✅ 왜 쓰게 되었는가
tailwind-css 를 배우고 적용시키는 공부를 하던 중, tailwind를 쓰기 전 styled-components 를 쓸 땐 몰랐던 단점을 알게 되었다.
<>
<nav className="relative flex items-center justify-between w-full py-2 bg-white shadow-md position-absolute navbar-expand-lg h-1/6">
<div className="flex items-center navbar-collapse collapse grow" id="navbarSupportedContentYavMenu">
<ul className="grid grid-cols-6 gap-4 mr-auto navbar-nav lg:flex lg:flex-row">
<li className="pl-4 ml-5 cols-1 ">
<a className ="block py-2 pr-2 font-bold transition duration-150 ease-in-out nav-link lg:px-2 text-rose-300 hover:text-rose-400 focus:text-rose-400" href="/Main" data-mdb-ripple="true" data-mdb-ripple-color="light">Home</a>
</li>
<li className="gap-4">
<a className="block py-2 pr-2 font-bold transition duration-150 ease-in-out nav-link lg:px-2 text-rose-300 hover:text-rose-400 focus:text-rose-400" href="/Prologue" data-mdb-ripple="true" data-mdb-ripple-color="light">Prologue</a>
</li>
<li className="gap-4">
<a className ="block py-2 pr-2 font-bold transition duration-150 ease-in-out nav-link lg:px-2 text-rose-300 hover:text-rose-400 focus:text-rose-400" href="/Wines" data-mdb-ripple="true" data-mdb-ripple-color="light">Wines</a>
</li>
<li className="gap-4 mr-60">
<a className="block py-2 pr-2 font-bold transition duration-150 ease-in-out nav-link lg:px-2 text-rose-300 hover:text-rose-400 focus:text-rose-400" href="/myPage" data-mdb-ripple="true" data-mdb-ripple-color="light">MyPage</a>
</li>
<ul className='grid grid-cols-2 place-content-end ml-60'>
<ul>
<li className="block ml-10">
<button type="button" className="block ml-10 px-6 py-2 text-xs font-medium leading-tight text-blue-400 uppercase transition duration-150 ease-in-out border-2 border-blue-400 rounded hover:bg-black hover:bg-opacity-5 focus:outline-none focus:ring-0">Log in</button>
</li>
</ul>
<ul className="block mr-10">
<li class="block pt-1 pb-1 py-2 px-2">
<button type="button" className="px-6 py-2 text-xs font-medium leading-tight text-white uppercase transition duration-150 ease-in-out bg-blue-400 rounded shadow-md hover:bg-blue-700 hover:shadow-lg focus:bg-blue-700 focus:shadow-lg focus:outline-none focus:ring-0 active:bg-blue-800 active:shadow-lg">Resister</button>
</li>
</ul>
</ul>
</ul>
</div>
</nav>
</>
😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶😶
❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔❔
지저분하다. 정말.. 따로 css 와 분리하지 않고 바로 적용할 수 있다는게 tailwind의 장점이긴한데..
이건 좀 아니지않나싶다.
그래서 찾은게 tailwind-styled-components 이다.
⛏ 설치하는 방법
Using npm
npm i -D tailwind-styled-components
Using yarn
yarn add -D tailwind-styled-components
✅ styled-component 와 함께쓰면 css 파일을 따로 분리시키지 않고 바로 쓸 수 있는 장점이 사라지는거아닌가?
아니다.
1. styled-components를 쓸 때
const Box = styled.div`
background-color: &{(props) => props.bgColor};
width: 100px;
height: 100px;
`
const Circle = styled(Box)`
border-radius: 50px;
`;
function App() {
return (
<Father>
<Box bgColor="teal" />
<Box bgColor="orange" />
<Circle bgColor="red" />
</Father>
);
}
2. tailwind-styled-components를 쓸 때
const Box = tw.div`
w-40
h-40
`;
const Circle = tw(Box)`
rounded-full
`;
function App() {
return (
<>
<Box className="bg-slate-400" />
<Box className="bg-orange-400" />
<Circle className="bg-blue-400" />
</>
);
}
styled-components 에서 사용하던 props를 사용하지 않아도된다!!
❕ 추가로 알면 좋은 styled-components / tailwind-styled-components 사용법
1. styled-components : as
as를 사용하여 엘리먼트를 다른 엘리먼트로 교체할 수 있다.
const BtnOne = styled.button`
color: white;
background-color: tomato;
border: 0;
border-radius: 15px;
`;
function App() {
return (
<Father>
<BtnOne as="a" href="/">
클릭버튼
</BtnOne>
</Father>
);
}
이렇게하면 버튼이지만 anchor 태그의 기능을 하게 된다. 다양하게 응용이 가능하다.
💥 tailwind-styled-component 에선 안된다 .. 구글링 열심히 해봤는데 답을 못찾았다. 찾는데로 수정해야겠다.
2. animation
-(1) styled-components
import styled, {keyframes} from "styled-components"
styled-components 에서 animation을 사용하기 위해선 keyframes 가 필요하다.
const rotationAnimation = keyframes`
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
`
const BoxTwo = styled.div`
height: 200px;
width: 200px;
background-color: tomato;
display: flex;
justify-content: center;
align-items: center;
animation: ${rotationAnimation} 1s linear infinite;
span {
font-size: 36px;
}
`;
애니메이션을 넣기 위해 사용하는 것이다.
-(2) tailwind
이렇게 기본적인것은 className 만 적어주면 되게끔 만들어져있다.
세세하게 다루게 되면 커스터마이징을 해야한다.
추가로 styled-components, tailwind-styled-components 둘 다 자식을 선언할 수가 있다.
const BoxThree = tw.div`
h-52
w-52
bg-lime-500
flex
justify-center
content-center
span { //자식 선언
text-4xl
}
`;
<BoxThree className="animate-spin">
<span>💕</span>
</BoxThree>
3. hover
-(1) styled-components
const BoxTwo = styled.div`
height: 200px;
width: 200px;
background-color: tomato;
display: flex;
justify-content: center;
align-items: center;
animation: ${rotationAnimation} 1s linear infinite;
span {
font-size: 36px;
&:hover {
font-size: 80px;
}
}
`;
자식 태그에 호버를 줄 때 & 을 이용하면 된다.
-(2) tailwind
<BoxThree>
<span className="hover:text-8xl">💕</span>
</BoxThree>
tailwind 에선 자식 클래스도 바로 타겟팅을 해주는 것 같다. 그래서 바로 적용!