zfb
GitHub リポジトリ

検索したい単語を入力

いつでも検索バーを開ける

概要

zudo-wind が完全なクラス候補とプロジェクトのトークンから、バージョン管理された CSS を生成する仕組みを説明します。

コンポーネントを設定して使う

Wind は馴染みのあるユーティリティ表記を使い、値はプロジェクトが定義します。次の完全な wind オブジェクトを zfb.config.json のルートに置きます。zfb.config.ts では同じ wind プロパティを指定します。

{
  "wind": {
    "spec": 1,
    "reset": "none",
    "strict": true,
    "tokens": {
      "spacing": { "hsp-sm": "0.75rem", "vsp-md": "1.25rem" },
      "colors": { "surface": "#f4f1ec", "ink": "#203046" },
      "radii": { "card": "0.5rem" }
    }
  }
}

完全なクラスとして px-hsp-sm は横方向の余白、py-vsp-md は縦方向の余白、bg-surface と text-ink は名前付きの色、rounded-card は角丸を使います。色はリテラル値なので手書きのカスタムプロパティ宣言は不要です。block、inline-flex、hidden はトークンなしで使えます。display:none は none ではなく hidden です。mx-auto もトークン不要で、物理的な左右の余白を設定します。下のプレビューはこの設定を使い、別途書いた表示用 CSS も示します。

プロジェクト値を使うコンポーネント
HTML
<div class="wind-demo-grid flex"><article class="wind-demo-card block rounded-card bg-surface px-hsp-sm py-vsp-md"><h3 class="wind-demo-title text-ink">A configured card</h3><p>Every value is project defined.</p></article><article class="wind-demo-card inline-flex rounded-card bg-surface px-hsp-sm py-vsp-md"><span class="text-ink">Complete classes</span></article></div>
CSS
@layer zw-reset, zw-tokens, zfb-hi, base, components;
@layer zw-tokens {
  :root {
    --zw-color-ink: #203046;
    --zw-color-surface: #f4f1ec;
    --zw-radius-card: .5rem;
    --zw-spacing-hsp-sm: .75rem;
    --zw-spacing-vsp-md: 1.25rem;
  }
}
.wind-demo-grid {
  font: 14px / 1.5 system-ui, sans-serif;
  color: #203046;
}

.wind-demo-card {
  border: 1px solid #8797aa;
}

.wind-demo-title {
  margin: 0 0 .5rem;
  font-size: 1rem;
  font-weight: 600;
}
.block {
  display: block;
}
.flex {
  display: flex;
}
.inline-flex {
  display: inline-flex;
}
.px-hsp-sm {
  padding-left: var(--zw-spacing-hsp-sm);
  padding-right: var(--zw-spacing-hsp-sm);
}
.py-vsp-md {
  padding-top: var(--zw-spacing-vsp-md);
  padding-bottom: var(--zw-spacing-vsp-md);
}
.text-ink {
  color: var(--zw-color-ink);
}
.bg-surface {
  background-color: var(--zw-color-surface);
}
.rounded-card {
  border-top-left-radius: var(--zw-radius-card);
  border-top-right-radius: var(--zw-radius-card);
  border-bottom-right-radius: var(--zw-radius-card);
  border-bottom-left-radius: var(--zw-radius-card);
}
この例の設定
{
  "wind": {
    "spec": 1,
    "reset": "none",
    "strict": true,
    "tokens": {
      "spacing": {
        "hsp-sm": "0.75rem",
        "vsp-md": "1.25rem"
      },
      "colors": {
        "surface": "#f4f1ec",
        "ink": "#203046"
      },
      "radii": {
        "card": "0.5rem"
      }
    },
    "breakpoints": {},
    "defaultTransitionTimingFunction": "ease",
    "authoredClasses": {
      "wind-demo-grid": true,
      "wind-demo-card": true,
      "wind-demo-title": true
    },
    "safelist": {
      "docs-preview": [
        "flex",
        "block",
        "inline-flex",
        "rounded-card",
        "bg-surface",
        "px-hsp-sm",
        "py-vsp-md",
        "text-ink"
      ]
    }
  }
}
表示用の補助 CSS
.wind-demo-grid { font: 14px/1.5 system-ui, sans-serif; color: #203046; }
.wind-demo-card { border: 1px solid #8797aa; }
.wind-demo-title { margin: 0 0 .5rem; font-size: 1rem; font-weight: 600; }

続けて設定とソースと候補を読み、トークンガイドや全ユーティリティ一覧を参照してください。

言語とビルドの詳細

zudo-wind の役割

zudo-wind は zfb が提供するユーティリティ CSS 言語です。有限の集合に属する完全なクラス候補を認識し、設定されたトークンとブレークポイントを使って解決し、zfb コンパイラに CSS の生成を依頼します。言語の契約はバージョン管理されるため、別のツールが変わってもサポート範囲が暗黙に広がることはありません。

候補は、ユーティリティとして解決されるか、認識されても無効なため診断を受けるか、生成ルールを持たない通常のクラスとして残ります。完全な候補として組み立てられていないクラス名を、ビルド時に推測することはできません。zudo-wind はユーティリティプラグインを読み込まず、クラスの発見のためにプロジェクトの JavaScript を実行することもありません。

ビルド内での位置付け

ビルドは設定されたソースプランから候補を集め、生成された wind ルールと手書きのグローバル CSS を組み合わせ、CSS Modules は別の経路で処理します。ユーティリティ言語の範囲外にあるセレクタや宣言は、手書きの CSS に記述します。wind ルールは手書きのグローバルルールの後に、CSS レイヤーなしで出力されます。順序の詳細はカスケードとリセットを参照してください。

ソースの発見では、対象ファイルの内容をテキストとして読みます。アプリケーションは実行しません。build と dev で走査するファイルはソースと候補、グローバル CSS と CSS Modules はスタイリングガイドを参照してください。

最初の例

次の設定は、以降の例で使う静的でない値をすべて指定します。デフォルトのリセットは none で、パレットや余白スケールは自動追加されません。

{
  "wind": {
    "tokens": {
      "spacingUnit": "0.25rem",
      "colors": {
        "panel": "var(--app-panel)"
      },
      "radii": {
        "default": "0.5rem"
      }
    }
  }
}

同じトップレベルの wind 値を zfb.config.ts または zfb.config.json に指定します。色トークンが参照するプロジェクトのプロパティは、手書きのスタイルシートで定義できます。

:root {
  --app-panel: #f4f1ec;
}

コンポーネントでは、次の完全な候補を使えます。

<section class="rounded bg-panel p-4 text-panel">
  Welcome
</section>

rounded は radii.default、bg-panel と text-panel は colors.panel を使い、p-4 は設定された余白単位を 4 倍します。必要なトークンや単位がなければ、認識されたユーティリティには値を補う代わりにトークン不足の診断が出ます。結び付きの詳細はトークンガイドを参照してください。

バージョン管理された動作

v1 言語の値は spec: 1 です。このフィールドを省略してもバージョン 1 として扱います。コンパイラは生成ルールを zudo-wind://spec/1 として識別します。v1 は生成 CSS のソースマップを作らず、行番号の対応も保証しません。

Tailwind を使ったことがあればユーティリティ構文に見覚えがあるかもしれませんが、zudo-wind は互換性を保証しません。Tailwind からの移行を参照してください。

関連項目

Revision History

作成更新