프론트엔드 개발자가 될거야./css 라이브러리

[TailwindCSS] TailwindCSS 유용한 속성

정니정은니 2023. 5. 15. 12:53

놀라운 점은 tailwind에만 있는 속성이 아니고 기존 css에도 있는 속성도 많다.

space-x-3

자식 컴포넌트의 좌우 margin을 알아서 계산해줘서 margin을 따로 생각할 필요가 없다.

css로 보면 이러한 구성이다.

.space-x-3 > :not([hidden]) ~ :not([hidden]) {
    --tw-space-x-reverse: 0;
    margin-right: calc(0.75rem * var(--tw-space-x-reverse));
    margin-left: calc(0.75rem * calc(1 - var(--tw-space-x-reverse)));
}

ring

<button className="w-5 h-5 rounded-full bg-yellow-500 focus:ring-2 ring-offset-2 ring-yellow-500 transition" />
<button className="w-5 h-5 rounded-full bg-indigo-500 focus:ring-2 ring-offset-2 ring-indigo-500 transition" />
<button className="w-5 h-5 rounded-full bg-teal-500 focus:ring-2 ring-offset-2 ring-teal-500 transition" />

list (array.map) : 배열을 map으로 돌릴 때 사용할 수 있는 속성들이다.

1. first, last

first:bg-blue-50 last:bg-blue-50

 

2. only : onlychild일 때만 사용되는 only modifier

only:bg-red-500

기존 css에도 있는 속성이다.

 

3. odd, even : 홀수요소와 짝수요소

odd:bg-blue-50 even:bg-yellow-500

기존 css에도 있는 속성이다.


4. empty : 비어있는 element에 색상을 넣을 수 있다.

empty:bg-blue-500

기존 css에도 있는 속성이다.

display:none이랑 똑같기 때문에 대부분 hidden으로 숨겨준다.


group modifier

상위(부모) 상태를 기반으로 한 스타일 지정이다.

일부 부모 요소의 상태를 기반으로 요소의 스타일을 지정해야 하는 경우, 부모를 group 클래스로 표시하고 group-hover와 같은 group-* 수정자를 사용하여 대상 요소의 스타일을 지정한다.

이 패턴은 group-focus, group-active 또는 group-odd와 같은 모든 유사 클래스 수정자와 함께 작동한다.

마우스를 이 그룹 아무곳이라도 올리면 Tony Molloy 글씨 색상이 바뀌거나 avartar가 바뀌는 그런 효과이다.
예를들어 group위에 마우스가 올라가면, avartar의 스타일이 바뀐다.

 

무엇을 target하려는 group인지 말해주고 ->  그 element에 group 클라스네임 추가한다. 

<div className="group">
   <span>1</span>
   <span className="group-hover:text-bold">2</span>
   <span>3</span>
</div>

 

group으로 할 수 있는 것은 엄청 다양하다!


feer modifier

형제 상태를 기반으로 한 스타일 지정이다.

형제 요소의 상태를 기반으로 요소의 스타일을 지정해야 하는 경우 형제를 peer 클래스로 표시하고 peer-invalid와 같은 peer-* 수정자를 사용하여 대상 요소의 스타일을 지정한다.

이 패턴은 모든 유사 클래스 수정자(예: peer-focus, peer-required 및 peer-disabled)와 함께 작동한다.

 

예를 들어, input의 상태에 따라서 span의 스타일을 변화시킬 수 있다. react state가 필요없다! 

즉, input의 state에 따라서 css를 modify한다.

const Home: NextPage = () => {
  return (
     <form className="flex flex-col space-y-2  p-5 ">
      <input
        type="text"
        required
        placeholder="Username"
        className="border p-1 peer border-gray-400 rounded-md "
      />
      <span className="hidden peer-invalid:block peer-invalid:text-red-500">
        This input is invalid
      </span>
      <span className="hidden peer-valid:block peer-valid:text-teal-500">
        Awesome username
      </span>
      <span className="hidden peer-hover:block peer-hover:text-amber-500">
        Hello
      </span>
      <input type="submit" value="Login" className="bg-white" />
    </form>
  );
};