© TOOLS BOX — Next.js / React / TypeScript コードサンプル集

サンプルガイド
←サンプル一覧
reactui-component

Tailwind CSS でバリアント対応バッジコンポーネントを作る

Tailwind CSS の clsx / cva を使ってバリアント(color / size)を型安全に管理するバッジコンポーネントの実装例。

難易度: 初級·更新: 2026-04-14·
tailwindcss

対応バージョン

react 19typescript 5tailwindcss 4

前提環境

Tailwind CSS の基本的な使い方を理解していること

概要

cva(class-variance-authority)を使って、バリアントを型安全に管理するコンポーネントを作る。 clsx との組み合わせで追加クラスも柔軟に扱える。

インストール

npm install class-variance-authority clsx

コンポーネント実装

// src/components/ui/Badge.tsx
import { cva, type VariantProps } from "class-variance-authority";
import { clsx } from "clsx";

const badge = cva(
  "inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium",
  {
    variants: {
      color: {
        gray: "bg-gray-100 text-gray-700",
        blue: "bg-blue-100 text-blue-700",
        green: "bg-green-100 text-green-700",
        red: "bg-red-100 text-red-700",
        yellow: "bg-yellow-100 text-yellow-700",
      },
      size: {
        sm: "text-xs px-2 py-0.5",
        md: "text-sm px-2.5 py-1",
      },
    },
    defaultVariants: {
      color: "gray",
      size: "sm",
    },
  }
);

type BadgeProps = VariantProps<typeof badge> & {
  children: React.ReactNode;
  className?: string;
};

export function Badge({ color, size, children, className }: BadgeProps) {
  return (
    <span className={clsx(badge({ color, size }), className)}>{children}</span>
  );
}

利用例

<Badge color="blue">Next.js</Badge>
<Badge color="green" size="md">reviewed</Badge>
<Badge color="red">draft</Badge>

ポイント

  • cva でバリアントを一元管理し、追加 props を型で表現する
  • defaultVariants によってデフォルト値を保証する
  • clsx で外部から className を上書き可能にしている

関連サンプル

同じテーマや技術スタックを使った実装例

  • Radix UI の Dialog でアクセシブルなモーダルを作る

    Radix UI の Dialog コンポーネントを使ってアクセシビリティに配慮したモーダルダイアログを実装する。Tailwind CSS でスタイリングする例も示す。

  • Tailwind CSS で空状態(EmptyState)UI を実装する

    検索結果ゼロ・データ未登録・エラー後などの空状態に表示するコンポーネントを Tailwind CSS でスタイリングし、アイコン・メッセージ・アクションボタンを組み合わせたパターン集。

  • Tailwind CSS でフィルターチップ(アクティブフィルタ表示・削除)UI を実装する

    適用中のフィルタ条件をチップ形式で横並びに表示し、個別削除ボタンと一括クリアボタンを持つフィルターチップコンポーネントを Tailwind CSS で実装する例。

  • Tailwind CSS でローディング中にオーバーレイを表示する

    フォーム送信や一覧更新中にコンテンツ上に半透明のローディングオーバーレイを被せる UI パターン。Tailwind CSS と React の状態管理で実装し、スケルトンカードとの責務の違いも示す。

  • Tailwind CSS でレスポンシブレイアウトを組む

    Tailwind CSS のブレークポイントプレフィックス(sm / md / lg)を使い、モバイルファーストのレスポンシブレイアウトを実装する例。

関連仕様

このサンプルを理解するのに役立つ仕様や概念

  • FrameworkReactUI 構築のための JavaScript ライブラリ。コンポーネントベースで宣言的に UI を記述できる。
←サンプル一覧に戻る