
학습자료 : https://youtu.be/H27N2PgtjUM?si=3tYjHj0C6V9LwWG0
Tailwind CSS는 미리 정의된 유틸리티 클래스를 활용하여 빠르고 효율적으로 스타일링할 수 있도록 도와주는 강력한 도구.
하지만 때로는 Tailwind가 제공하지 않는 스타일이나 동적인 스타일링이 필요할 때가 있음.
Tailwind CSS의 유연성을 극대화하는 몇 가지 팁을 정리해보았음
// width, height
<div className="w-[10rem]"></div>
<div className="h-[250px]"></div>
// bg image
<div className="bg-[url('./assets/react.svg')]"></div>
// custom color:
<div className="bg-[rgb(31,120,50)]"></div>
<div className="[border-image:url('./assets/border.svg')_30_stretch]"></div>
import clsx from 'clsx';
function MyComponent({ isActive }) {
return (
<div className={clsx('py-2 px-4 rounded', { 'bg-blue-500 text-white': isActive, 'bg-gray-200 text-gray-700': !isActive })}>
{isActive ? '활성화됨' : '비활성화됨'}
</div>
);
}
import { twMerge } from 'tailwind-merge';
import clsx from 'clsx';
function MyComponent({ isLarge }) {
return (
<button className={twMerge('py-2 px-4 rounded bg-indigo-500 text-white font-semibold', isLarge && 'py-3 px-6 text-lg')}>
{isLarge ? '큰 버튼' : '작은 버튼'}
</button>
);
}
function AnotherComponent({ isActive }) {
return (
<div className={twMerge('py-2 px-4 rounded', clsx({ 'bg-blue-500 text-white': isActive, 'bg-gray-200 text-gray-700': !isActive }))}>
{isActive ? '활성화됨' : '비활성화됨'}
</div>
);
}
clsx
twMerge
Tailwind CSS는 CSS 변수(Custom Properties)와 calc() 함수를 활용하여 더욱 동적이고 유연한 스타일링을 지원
<div className="[--container-gap:15px] sm:[--container-gap:15px] md:[--container-gap:20px] lg:[--container-gap:30px] space-x-[var(--container-gap)]">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<div className="[--header-height:6rem] [--sidebar-width:12rem] flex">
<header className="h-[var(--header-height)] w-full bg-gray-100"></header>
<aside className="w-[var(--sidebar-width)] bg-gray-200"></aside>
<main className="flex-1 ml-[var(--sidebar-width)] mt-[var(--header-height)] p-4"></main>
</div>