
className={clsx(
"bg-blue", // 기본 스타일
className // 커스텀 스타일
)}더 정리된 내용 👇
tailwind-merge와 clsx 설치:
pnpm add tailwind-merge clsx
유틸리티 함수 생성:
// utils/cn.ts
import { ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';
export const cn = (...inputs: ClassValue[]) => {
return twMerge(clsx(inputs));
};
컴포넌트에서 사용:
import { cn } from '@/utils/cn';
export default function Button({ className, ...props }) {
return (
<button
className={cn(
"px-4 py-2 bg-button-primary", // 기본 스타일
className // 커스텀 스타일
)}
{...props}
/>
);
}
다중 배경 속성 충돌 문제
background-color와 background-image 등을 함께 사용할 때 클래스가 제대로 적용되지 않음bg-input-bg와 bg-[image:var(--svg-bg)] 충돌해결책: style 속성 사용
const backgroundStyle = {
backgroundColor: '#FFFBEB', // 배경색
backgroundImage: 'url(...)', // 배경 이미지
} as React.CSSProperties;
return (
<div
style={backgroundStyle}
className={cn(
'other-classes',
className
)}
/>
);
불편하다. 정말로 이게 최선인가?
className={cn(
'base-styles',
condition && 'conditional-styles',
className
)}```다만 이는 tailwind-merge의 현재 버전(작성 시점 기준)에서의 제한사항이므로, 추후 라이브러리가 업데이트되면 더 나은 해결책이 제시될 수 있다.