CSS 変数ジェネレーター

デザイントークンから CSS カスタムプロパティを生成。カラー・タイポグラフィ・スペーシング・角丸をビジュアルエディタで管理し、:root ブロックをリアルタイム生成。無料・ブラウザ内で処理。

  • ブラウザ内で処理
  • データはブラウザ外に出ません
  • 無料 · 登録不要
--brand- などのプレフィックスを入力します。先頭のハイフンが足りなければ追加され、変更は全宣言に反映されます。
トークンを編集
変数名 変数名を入力します。空白はハイフンになり、空の名前の行はスキップされます。大文字と小文字を区別します。 値 var() や calc() を含む任意の CSS 値を入力します。値は入力どおりにコピーされ、同名の変数も行順に残ります。 カラー 色を選択するか3桁・6桁の HEX を入力するとスウォッチが同期します。他の CSS 色値では現在のスウォッチを保持します。 + トークン追加 4つのグループに空行を追加できます。名前と値を入力すると :root ブロックに含まれます。 トークンを削除 行を削除すると CSS が即座に更新されます。Ctrl/⌘+L はテキストと CSS を消去し、行とネイティブカラーを保持します。
完全な :root ブロックをコピーします。失敗したら再試行するか、CSS を選択して手動でコピーしてください。

生成された CSS
詳しいガイドを読む CSS変数ジェネレーター完全ガイド:カスタムプロパティでテーマシステムを構築
例・詳しい説明・よくある質問 実際の出力つきの例、ほかのツールとの違い、よくある質問。

出力されるもの

行をいくつ入力しても、出力は一つの :root ブロックです。グループ(カラー、タイポグラフィ、スペーシング、角丸)の順に、グループ内の行の順で宣言が並び、変数名が空の行は出力されません。値は前後の空白を取り除いたうえで入力どおりに書き出され、CSS として正しいかどうかは確認しません。ページを開いたときの初期行をそのままコピーすると次のとおりです。

:root {
  --primary: #3b82f6;
  --secondary: #6366f1;
  --bg: #ffffff;
  --text: #111827;
  --font-sans: Inter, system-ui, sans-serif;
  --font-mono: "Fira Code", monospace;
  --font-size-base: 16px;
  --font-size-lg: 18px;
  --space-1: 4px;
  --space-2: 8px;
  --space-4: 16px;
  --space-8: 32px;
  --radius-sm: 4px;
  --radius-md: 8px;
  --radius-lg: 16px;
  --radius-full: 9999px;
}

例:デジタル庁デザインシステムのトークンを書き写す

デジタル庁デザインシステム(DADS)は、デザイントークンを npm パッケージ @digital-go-jp/design-tokens として公開しています。バージョン 2.0.1 の dist/tokens.css には、--color-primitive-blue-900: #0017c1; のような原色のトークンと、それを var() で参照する --color-key-900: var(--color-primitive-blue-900); のような役割別のトークンが並んでいます。

自社サイトで一部だけ使いたい場合、プレフィックスを --color にして三行入力すると、パッケージと同じ行が得られます。

:root {
  --color-primitive-blue-900: #0017c1;
  --color-primitive-yellow-300: #ffd43d;
  --color-key-900: var(--color-primitive-blue-900);
}

--color-key-900 は固有の色の値を持たず、原色のトークンを参照しているだけです。キーカラーを別の青に替えるときは、--color-key-900 の参照先を書き換えるだけで、それを使う部品がすべて追従します。値の欄に書いた var() はそのままコピーされます。

文字サイズと角丸も同じ方法で写せます。DADS の値は rem で書かれているので、ルートのフォントサイズが 16px のとき 1rem が 16px です。プレフィックスを既定の -- に戻し、タイポグラフィと角丸のグループに入力します。

:root {
  --font-size-16: 1rem;
  --font-size-24: 1.5rem;
  --border-radius-8: 0.5rem;
}

IME の全角スペースと全角数字

日本語入力のまま変数名を打つと、空白が全角スペース(U+3000)になりがちです。このツールは名前の中の空白をハイフンに置き換え、全角スペースも空白として扱うので、primary color は --primary-color になります。一方、値の欄は入力どおりにコピーされるため、全角数字で 16px と書くとそのまま残ります。

:root {
  --primary-color: #0017c1;
  --space: 16px;
}

--space の宣言そのものはカスタムプロパティとして受け付けられますが、全角の「16」は CSS の数字ではありません。padding: var(--space) と書くと、置き換えた結果が padding の値として成り立たず、計算値の時点で無効になり、padding は初期値の 0 になります(CSS Custom Properties Level 1 §3.1)。数値は半角で入力してください。

制限

  • 出力は :root ブロック一つだけです。ダークテーマ、メディアクエリ、@property の登録、JSON や Sass 形式は生成しないので、必要なら別のブロックを手で書き足します。
  • グループは 4 つで固定です。各グループの中で行を追加・削除できます。
  • 値は検証しません。同じ名前の行が二つあると両方出力され、CSS の規則どおり後の宣言が有効になります。
  • 名前は大文字と小文字を区別します。var(--Primary) で --primary は読めません。
  • var() の第二引数(代替値)が使われるのは変数が未定義のときだけです。--gap: red のように使えない値が入っていると、代替値ではなく上記と同じく計算値時点で無効になります。
  • カラーピッカーの色が連動するのは 3 桁と 6 桁の HEX だけです。rgb() や oklch() も正しくコピーされますが、色見本は変わりません。
  • ツール内で Ctrl/⌘+L を押すと、プレフィックス・変数名・値がすべて空になります。行とカラーピッカーの色は残ります。

カスタムプロパティと var() は Chrome 49、Firefox 31、Safari 9.1、Edge 15 以降で使えます(MDN の互換性データ)。一つの色から濃淡の段階を作るならカラーシェード生成器、画面幅に応じて変わるサイズは CSS clamp() 計算機の値を貼り付けて使えます。

FAQ

CSS カスタムプロパティ(CSS 変数)とは何ですか?

名前が二つのハイフンで始まるプロパティです(例: --primary-color: #3b82f6)。:root に書くとページ内のすべての要素に継承され、var(--primary-color) で読み出せます。値を一箇所変えれば、参照しているところがまとめて変わります。

変数プレフィックスとは何ですか?変更できますか?

すべての変数名の先頭に付く文字列です。既定値の '--' なら --primary のような名前になります。'--brand' や '--brand-' に変えると名前空間を分けられます(末尾のハイフンがなければ補います)。先頭の二つのハイフンを書き忘れても、'app' と入力すれば --app-primary になります。カスタムプロパティ名は -- で始まる必要があるためです。

新しいデザイントークンを追加するにはどうすればよいですか?

各グループ(カラー・タイポグラフィ・スペーシング・角丸)内の「+ トークン追加」ボタンをクリックし、変数名と値を入力します。カラートークンではカラーピッカーも使えます。CSS 出力はリアルタイムで更新されます。

不要なトークンを削除するにはどうすればよいですか?

各トークン行の末尾にある × ボタンをクリックすると削除できます。CSS 出力は即座に更新されます。

生成した CSS をプロジェクトで使用するには?

「コピー」ボタンをクリックして :root ブロックをコピーし、グローバルなスタイルシート(例: styles/global.css)に貼り付けます。コンポーネント CSS 内で var(--token-name) として参照できます。

入力した変数名や値は送信・保存されますか?

いいえ。CSS はブラウザーのタブ内で生成し、変数名・値・プレフィックスをサーバーへ送ることも、ブラウザーのストレージに保存することもありません。そのため再読み込みすると初期の行に戻ります。ページのアクセス解析が記録するのは利用イベント(ツール名と、生成・トークン追加・コピーという操作の種類)だけで、入力した内容は含みません。