🦘

🛠️ Tailwind CSS と PostCSS の関係

2025/02/27に公開
  1. PostCSS は「変換エンジン」

    • PostCSS は、CSS を加工・変換するためのツールだよ。
    • ただのエンジンなので、プラグインを使って実際の機能を追加する必要があるんだ。
  2. Tailwind CSS は「PostCSS のプラグイン」の一つ

    • Tailwind CSS 自体が PostCSS 用のプラグインとして提供されているよ。
    • Tailwind CSS は、HTML や JSX の中で使われているクラス (bg-red-500p-4 など) を見つけて、それに対応する CSS を生成する役割を持っているんだ。

🔗 具体的な処理の流れ

1. 設定ファイルの準備

// postcss.config.js
module.exports = {
  plugins: {
    tailwindcss: {},   // Tailwind CSS を PostCSS プラグインとして登録
    autoprefixer: {},  // (必要なら)ベンダープレフィックスを追加
  },
};
  • tailwindcss: {} と書くことで、PostCSS が Tailwind CSS を使って CSS を変換するように指示するよ。

2. グローバルCSSで Tailwind CSS をインポート

/* global.css */
@tailwind base;       /* リセットCSSなど、基本スタイル */
@tailwind components; /* プリセットコンポーネントスタイル */
@tailwind utilities;  /* Tailwindのユーティリティクラス */
  • ここで書かれた @tailwind ディレクティブが、PostCSS を通して実際のCSSに変換されるんだ。

3. Tailwind CSS と PostCSS の連携

💡 PostCSS の変換フロー

1. global.css を読み込む
↓
2. Tailwind CSS プラグインが発動
   - tailwind.config.ts を参照して、カスタム設定を取得
   - content プロパティで指定されたファイルをスキャン
   - 使用されているクラスに対応するCSSを生成
↓
3. Autoprefixer プラグインが発動(オプション)
   - display: flex → -webkit-flex など、古いブラウザ対応のプレフィックスを追加
↓
4. 最終的なCSSファイルを出力

4. 最終的に生成されるCSS

例えば、HTMLでこんなコードがあったとする:

<div class="bg-red-500 p-4">
  こんにちは、Tailwind CSS!
</div>

PostCSS を通した後、生成されるCSSはこんな感じになるよ:

/* Tailwind CSS によって自動生成されたCSS */
.bg-red-500 {
  background-color: #f56565;
}

.p-4 {
  padding: 1rem;
}

/* Autoprefixer によるベンダープレフィックス追加 */
body {
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}

🤔 じゃあ、PostCSS を経由しないとどうなるの?

  • @tailwind base などが そのまま文字列 として表示されちゃう。
  • Tailwind のユーティリティクラス(例: bg-red-500p-4)が 機能しない
  • Tailwind CSS のカスタム設定(tailwind.config.ts で設定したカスタムカラーなど)も 反映されない

まとめ

  • Tailwind CSS は、PostCSS の「プラグイン」として動作するよ。
  • PostCSS → Tailwind CSS プラグイン → 変換されたCSS という流れ。
  • PostCSS は、CSSのビルドエンジンとして機能して、Tailwind CSS のクラスを正しく変換してくれるんだ。

Discussion