공식 문서를 기반으로 최근 많이 사용되고 있는 CSS프레임워크인 tailwindcss의 핵심적인 개념에 대한 이해도를 높이기 위한 목적으로 작성된 글입니다.
가상 클래스 사용 예시(:hover :focus :active ...)
<button class="bg-violet-500 hover:bg-violet-400 active:bg-violet-600 focus:outline-none focus:ring focus:ring-violet-300 ...">
Save changes
</button>
가상 요소 사용 예시(::after)
<label class="block">
<span class="after:content-['*'] after:ml-0.5 after:text-red-500 block text-sm font-medium text-gray-700">
Email
</span>
<input type="email" name="email" class="mt-1 px-3 py-2 bg-white border shadow-sm border-gray-300 placeholder-gray-400 focus:outline-none focus:border-sky-500 focus:ring-sky-500 block w-full rounded-md sm:text-sm focus:ring-1" placeholder="you@example.com" />
</label>
<!--custom css로 구현하면 다음과 같은 방식으로 표현해야됩니다.-->
span::after {
content: "*",
margin-left: 5px,
color: red,
...
}
이 외에도 자주 사용하게 되는 다크모드에 관련된 옵션이나 파일 업로드 기능을 하는 버튼, prefer-reduced-motion 속성을 조작하는 등의 기능도 유틸리티 클래스로 구현되어 쉽게 적용할 수 있습니다.
공식 페이지의 다양한 modifier에 대한 예시 : https://tailwindcss.com/docs/hover-focus-and-other-states?email=choifrance%40gmail.com
반복을 통해 동일한 스타일을 공유하는 컴포넌트의 경우 작성해야할 HTML의 양을 크게 줄일 수 있습니다. 아래는 사용자의 프로필 이미지를 여러 개 작성해야 할 경우의 예시입니다.
<div class="mt-3 flex -space-x-2 overflow-hidden">
{#each contributors as user}
<img class="inline-block h-12 w-12 rounded-full ring-2 ring-white" src="{user.avatarUrl}" alt="{user.handle}"/>
{/each}
</div>
프로젝트 내에서 자주 사용되는 스타일 클래스가 존재하거나 사용자가 임의로 스타일 클래스를 만들고 싶은 경우 tailwind에서 제공하는 @apply 디렉티브를 통해 유틸리티 클래스를 새롭게 정의할 수 있습니다. 아래는 .btn-primary라는 클래스를 사용자가 커스텀하여 정의하는 예시입니다.
@tailwind base;
@tailwind components;
@tailwind utilities;
@layer components {
.btn-primary {
@apply py-2 px-4 bg-blue-500 text-white font-semibold rounded-lg shadow-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-400 focus:ring-opacity-75;
}
}
속성에 임의의 값을 넣을 수 있는 옵션이 존재합니다. 이를 활용하여 텍스트의 크기, 색, 마진 등을 특정한 부분에 대해서만 임의의 값을 사용해야 되는 경우 쉽게 대응할 수 있습니다. 예를 들어 배경으로 사용한 이미지를 원하는 위치에 가져다 놓기 위해서 위에서부터 123px 떨어트려야 한다면 다음과 같이 작성해주면 됩니다.
<div class="top-[123px]">
<img ...>
</div>
특정한 색을 써야 한다거나 텍스트의 크기를 특정 부분만 다르게 할 경우에도 다음과 같이 적용할 수 있습니다.
<div class="bg-[#bada55] text-[22px]">
<!-- ... -->
</div>
플러그인을 통해 커스텀 스타일을 추가하는 기능이 존재합니다. CSS파일이 아닌 플러그인을 import하는 것으로 커스텀 스타일을 가져옵니다.
장점