Tailwind CSS パターン(v4 - 2025)
CSSネイティブ設定によるモダンなユーティリティファーストCSS。
1. Tailwind v4 のアーキテクチャ
v3 からの変更点
| v3(レガシー) | v4(最新) |
|---|
tailwind.config.js | CSS ベースの @theme ディレクティブ |
| PostCSS プラグイン | Oxide エンジン(10倍高速) |
| JIT モード | ネイティブ、常時オン |
| プラグインシステム | CSS ネイティブ機能 |
@apply ディレクティブ | 引き続き動作可能、ただし非推奨 |
v4 のコアコンセプト
| 概念 | 説明 |
|---|
| CSSファースト | JavaScript ではなく CSS で設定 |
| Oxide エンジン | Rust ベースのコンパイラ、非常に高速 |
| ネイティブネスティング | PostCSS 不要の CSS ネスト |
| CSS 変数 | すべてのトークンが --* 変数として公開 |
2. CSS ベースの設定
テーマ定義
@theme {
--color-primary: oklch(0.7 0.15 250);
--color-surface: oklch(0.98 0 0);
--color-surface-dark: oklch(0.15 0 0);
--spacing-xs: 0.25rem;
--spacing-sm: 0.5rem;
--spacing-md: 1rem;
--spacing-lg: 2rem;
--font-sans: 'Inter', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
}
拡張と上書きの使い分け
| アクション | 使用タイミング |
|---|
| 拡張 | デフォルト値と一緒に新しい値を追加する場合 |
| 上書き | デフォルトのスケール全体を置き換える場合 |
| セマンティックトークン | プロジェクト固有の命名(primary, surface) |
3. コンテナクエリ(v4 ネイティブ)
ブレークポイント vs コンテナ
| 種類 | 応答対象 |
|---|
ブレークポイント(md:) | ビューポート幅 |
コンテナ(@container) | 親要素の幅 |
コンテナクエリの使い方
| パターン | クラス |
|---|
| コンテナの定義 | 親要素に @container |
| コンテナブレークポイント | 子要素に @sm:、@md:、@lg: |
| 名前付きコンテナ | 特異性のために @container/card |
使用シナリオ
| シナリオ | 使用するもの |
|---|
| ページレベルレイアウト | ビューポートブレークポイント |
| コンポーネントレベルレスポンシブ | コンテナクエリ |
| 再利用可能なコンポーネント | コンテナクエリ(コンテキスト非依存) |
4. レスポンシブデザイン
ブレークポイントシステム
| プレフィックス | 最小幅 | 対象 |
|---|
| (なし) | 0px | モバイルファーストのベース |
sm: | 640px | 大型スマートフォン / 小型タブレット |
md: | 768px | タブレット |
lg: | 1024px | ノートパソコン |
xl: | 1280px | デスクトップ |
2xl: | 1536px | 大型デスクトップ |
モバイルファーストの原則
- 最初にモバイルスタイルを書く(プレフィックスなし)
- プレフィックスを使って大きな画面用の上書きを追加する
- 例:
w-full md:w-1/2 lg:w-1/3
5. ダークモード
設定戦略
| 方法 | 動作 | 使用タイミング |
|---|
class | .dark クラスのトグル | 手動テーマ切り替え |
media | システム設定に従う | ユーザー操作不要 |
selector | カスタムセレクタ(v4) | 複雑なテーマ設定 |
ダークモードパターン
| 要素 | ライトモード | ダークモード |
|---|
| 背景 | bg-white | dark:bg-zinc-900 |
| テキスト | text-zinc-900 | dark:text-zinc-100 |
| ボーダー | border-zinc-200 | dark:border-zinc-700 |
6. モダンレイアウトパターン
Flexbox パターン
| パターン | クラス |
|---|
| 中央揃え(両軸) | flex items-center justify-center |
| 縦積み | flex flex-col gap-4 |
| 横並び | flex gap-4 |
| 均等配置 | flex justify-between items-center |
| 折り返しグリッド | flex flex-wrap gap-4 |
グリッドパターン
| パターン | クラス |
|---|
| 自動フィットレスポンシブ | grid grid-cols-[repeat(auto-fit,minmax(250px,1fr))] |
| 非対称(Bento) | grid grid-cols-3 grid-rows-2 + スパン |
| サイドバーレイアウト | grid grid-cols-[auto_1fr] |
注: 対称的な3カラムグリッドよりも、非対称/Bentoレイアウトを推奨します。
7. モダンカラーシステム
OKLCH vs RGB/HSL
| 形式 | 利点 |
|---|
| OKLCH | 知覚的に均一、デザインに最適 |
| HSL | 直感的な色相/彩度 |
| RGB | レガシー互換性 |
カラートークン設計
| レイヤー | 例 | 目的 |
|---|
| プリミティブ | --blue-500 | 生の色の値 |
| セマンティック | --color-primary | 目的ベースの命名 |
| コンポーネント | --button-bg | コンポーネント固有 |
8. タイポグラフィシステム
フォントスタックパターン
| 種類 | 推奨 |
|---|
| サンセリフ | 'Inter', 'SF Pro', system-ui, sans-serif |
| 等幅 | 'JetBrains Mono', 'Fira Code', monospace |
| ディスプレイ | 'Outfit', 'Poppins', sans-serif |
タイプスケール
| クラス | サイズ | 用途 |
|---|
text-xs | 0.75rem | ラベル、キャプション |
text-sm | 0.875rem | 補足テキスト |
text-base | 1rem | 本文テキスト |
text-lg | 1.125rem | リードテキスト |
text-xl+ | 1.25rem+ | 見出し |
9. アニメーションとトランジション
組み込みアニメーション
| クラス | 効果 |
|---|
animate-spin | 連続回転 |
animate-ping | 注意喚起パルス |
animate-pulse | 微妙な透過パルス |
animate-bounce | バウンス効果 |
トランジションパターン
| パターン | クラス |
|---|
| 全プロパティ | transition-all duration-200 |
| 特定プロパティ | transition-colors duration-150 |
| イージング指定 | ease-out または ease-in-out |
| ホバー効果 | hover:scale-105 transition-transform |
10. コンポーネント抽出
抽出のタイミング
| サイン | アクション |
|---|
| 同じクラスの組み合わせが3回以上 | コンポーネントを抽出 |
| 複雑な状態バリアント | コンポーネントを抽出 |
| デザインシステム要素 | 抽出してドキュメント化 |
抽出方法
| 方法 | 使用タイミング |
|---|
| React/Vue コンポーネント | 動的、JavaScript が必要 |
| CSS の @apply | 静的、JavaScript 不要 |
| デザイントークン | 再利用可能な値 |
11. アンチパターン
| してはいけないこと | 代わりにすること |
|---|
| あらゆる場所で任意の値を使う | デザインシステムのスケールを使う |
!important を使う | 詳細度を正しく修正する |
インライン style= を使う | ユーティリティを使う |
| 長いクラスリストの重複 | コンポーネントとして抽出する |
| v3の設定とv4を混在させる | 完全にCSSファーストへ移行する |
過度に @apply を使う | コンポーネントを優先する |
12. パフォーマンスの原則
| 原則 | 実装 |
|---|
| 未使用CSSの削除 | v4では自動 |
| 動的生成を避ける | テンプレート文字列クラスは使わない |
| Oxide を使う | v4 のデフォルト、10倍高速 |
| ビルドキャッシュ | CI/CD でのキャッシュ設定 |
覚えておいてください: Tailwind v4 は CSSファーストです。CSS 変数、コンテナクエリ、ネイティブ機能を活用しましょう。設定ファイルはオプションになりました。