kokoball의 devlog
728x90

컴포넌트를 재사용하면서 단순히 하위 요소의 font-size만 변경하고 싶은 경우,
컴포넌트에 props로 전달하는 대신 Tailwind CSS의 "arbitrary variants" 기능을 사용하면 간편하게 해결할 수 있습니다.

 

기본 문법

Tailwind CSS에서는 클래스 이름에 대괄호([ ]) 안에 CSS 선택자와 함께 사용하여, 부모 요소를 기준으로 하위 요소(자손 혹은 직계 자식)를 선택할 수 있습니다.

  • 후손 선택:
    [&_input]:w-[140px]
    여기서 &는 현재 요소(자신)를 의미하고, _input은 공백을 나타내므로, 현재 요소의 모든 후손 중 <input> 태그를 선택합니다.
<div className="w-[200px] [&_input]:w-[140px]">
  <input type="text" />
</div>

 

 

위 예시에서는 부모 <div>는 너비 200px, 그 안의 모든 <input>은 너비 140px로 적용됩니다.

  • 직계 자식 선택:
    [&>input]:w-[140px]
    이 경우에는 바로 자식인 <input> 태그에만 스타일을 적용합니다.
<div className="w-[200px] [&>input]:w-[140px]">
  <input type="text" />
  <div>
    <input type="text" /> {/* 이 input은 선택되지 않음 */}
  </div>
</div>

 

 

클래스 선택자 사용
클래스 선택자로 지정하려면, 점(.)을 사용합니다.

<div className="[&_.idInput]:text-lg">
  <input className="idInput" type="text" />
</div>

 

 

위 예시에서는 idInput 클래스를 가진 요소의 글자 크기를 text-lg로 설정합니다.

우선순위 조정

Tailwind CSS에서는 선택자 우선순위 때문에 원하는 요소에 스타일이 적용되지 않을 때가 있습니다.
이럴 때는, 선택자에! 를 붙여 **!important**를 적용하여 우선순위를 높일 수 있습니다.

<div className="[&>input]:!text-xl">
  <input type="text" />
</div>

 

위와 같이 작성하면, 바로 자식인 <input> 태그에 대해 text-xl 스타일이 강제로 적용됩니다.

 

정리

  • [&_태그]: 현재 요소의 모든 후손 중 해당 태그를 선택합니다.
  • [&>태그]: 현재 요소의 직계 자식 중 해당 태그를 선택합니다.
  • [&_.className]: 현재 요소의 후손 중 지정한 클래스를 가진 요소 선택.
  • 필요시 !를 붙여 중요도를 높일 수 있습니다.

 

728x90
profile

kokoball의 devlog

@kokoball-dev

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!