Tailwind CSSのPreflightとは?

Tailwind CSS Tailwind CSS

Tailwind CSSのレイヤ

Tailwind CSSのレイヤは3種類で、これらはITCSSのコンセプトによる。

  • base…まっさらなHTMLに適用するリセット用、もしくはデフォルトのスタイル
  • component…クラスベースなスタイルで、utilitiesレイヤで上書きすることもできる。3rdパーティコンポーネントのスタイルなどを定義する場として最適
  • utilities…Tailwind CSSで最も使用するユーティリティと呼ばれるクラス

Preflightとは?

PreflightとはTailwind CSSプロジェクトのベーススタイルで、ブラウザ間の差異を均し、スタイル割り当てを簡単にする。baseレイヤでInjectされ、以下のようなことを行う。

  • いろいろな要素(h1, h2, h3, …p, …)のデフォルトマージンを削除
  • ヘッダ系要素(h1, h2, h3, …etc)のスタイル解除
  • リスト系要素(li/ul)のスタイル解除
  • 画像系要素(img, svg, video, canvas, …etc)をブロックとする
  • 画像と動画要素(img, video)を親コンテナに制約する
  • すべての要素のボーダスタイルをリセット

Preflightを拡張する方法

@layerと@applyディレクティブを使用して、baseレイヤに新たなスタイルを追加することができる。

/* CSSにbaseレイヤを挿入 */
@tailwind base

/* @layerカスタムスタイルの所属先を指定 */
@layer base {
  /* @applyを使用して既存のユーティリティクラス(text-2xl/xl/lg)を割り当てる */
  h1 {
    @apply text-2xl;
  }
  h2 {
    @apply text-xl;
  }
  h3 {
    @apply text-lg;
  }
  ...
}

/* CSSにcomponentsレイヤを挿入 */
@tailwind components;

/* CSSにutilitiesレイヤを挿入 */
@tailwind utilities;

Preflightを無効化する方法

以下のようなケースでは、Preflightを無効化したくなるかもしれない。

  • 既存プロジェクトにTailwindを統合する場合
  • ベーススタイルを提供したい場合など、

こういう時は、設定ファイルを次のようにすれば無効化できる。

// tailwind.config.js
module.exports = {
  content: ["./src/**/*.{html,js}"],
  theme: {
    extend: {},
  },
  plugins: [],
  corePlugins: {
    preflight: false,
  }
}

実際にビルドしてCSSを出力すると、結果にPreflight分が適用されていないことがわかる。

npx tailwindcss -i ./src/input.css -o ./src/output.css

参考

ITCSS: Scalable and Maintainable CSS Architecture - Xfive
ITCSS is an answer to the question: How do I make my CSS scalable and maintainable? It’s a concern for every front-end d...
Adding custom styles - Core concepts
Best practices for adding your own custom styles in Tailwind projects.
Preflight - Base styles
An opinionated set of base styles for Tailwind projects.
タイトルとURLをコピーしました