TailwindCSSでクラスを動的に付け替える方法
2023/08/22

TailwindCSSでクラスを動的に付け替える方法

1 min to read

TailwindCSSを使い始めて最初に戸惑った部分なのでまとめておきます

clsxtailwind-mergeをインストール

pnpm install clsx tailwind-merge

clsxは動的なクラスの付け替えを可能にするライブラリで、tailwind-mergeはクラス名の結合をいい感じにやってくれるライブラリです。

動的なクラスの付け替えに必要になるのはclsxだけなんですが、tailwind-mergeは同じクラス名を複数回書いてしまった時に2つ目以降を消しておいてくれたり、クラス名同士がコンフリクトしないようにしてくれたりとなにかと優秀なライブラリなので、是非一緒に入れておくことをおすすめします

cn関数を作る

動的なクラスの付け替えとクラス名の結合を、同時にやってくれるめっちゃ便利な関数を作っておきます。

lib/utils.ts
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";

export function cn(...inputs: (string | undefined)[]) {
  return twMerge(clsx(inputs));
}

使用例

こういう感じで使います

import { cn } from '@/lib/utils';

export const ExampleLink = ({
  href,
  active,
  className
}: {
  href: string;
  active: boolean;
  className?: string;
}) => {
  return (
    <Link
      href={href}
      className={cn(
        "text-foreground",
        active ? "bg-red-400" : "bg-gray-400",
        className 
      )}
    >
      {href}
    </Link>
  );
};

このコードの場合は、

  • text-foregroundは共通で適用されるスタイル
  • active=trueの時、bg-red-400が適用される
  • active=falseの時、bg-gray-400が適用される
  • classNameを追加した場合は、上記のCSSにいい感じに結合してくれる

という感じになります!以上です✨