Open11

Typography における Figma Variables の使い方

YamanakaYamanaka

Figma の Variables をデザイントークンのマスターデータとし、デザインも実装も連携できるのが理想的なのだが、値によってうまくいかない。タイポグラフィ設定において、何が設定できて何が難しいのかを整理する。

前提

Webサイト制作での使用を想定。
Figma のプラグインを使用してJSONを書き出した後、実装側で Style Dictionary を使用してCSSカスタムプロパティ(format: 'css/variables')に変換して使用する。

YamanakaYamanaka

Variables には4つの Type がある。

  • Color
  • Number
  • String
  • Boolean
YamanakaYamanaka

Boolean 以外の3タイプにはスコープ(適用できる項目)が設定されてる。

YamanakaYamanaka

font-family

  • フォントの種類。
  • String タイプを設定可能。
    • 例:Hiragino Kaku Gothic ProN
    • 例:Roboto
  • 実装(CSS)で使用するためにクォーテーションを付与する必要がある。
    • Style Dictionary で調整すればOK。
--typography-font-family-base: Hiragino Kaku Gothic ProN;
↓
--typography-font-family-base: 'Hiragino Kaku Gothic ProN';
YamanakaYamanaka

font-weight

  • 文字のウェイト(太さ)。
  • Number タイプと String タイプが設定可能だが、実装との連携を考慮する場合は Number を使用すると良い。
  • String タイプだと、フォントの種類によって指定できる値がバラバラ。
    • 例:Hiragino Kaku Gothic ProN
      • W3, W6
    • 例:Roboto
      • Thin, ExtraLight, Light, Normal, Reqular, SemiBold, Bold, ExtraBold, Black
  • 実装では数値(500 など)を使うため、Number タイプで管理すればデザインと連携できる。
    • 一般的には100単位で設定するが、Variable Font の場合は 100 〜 900 の値を設定可能。
YamanakaYamanaka

font-size

  • 文字サイズ。
  • Number タイプを設定可能。
  • 実装では、ウェブアクセシビリティの観点から rem で指定すると良い。
    • Style Dictionary で変換すればOK。
YamanakaYamanaka

line-height

  • 行間の設定。やっかい。
  • Number タイプを設定できるが、px として扱われる。
    • 手動入力で % は使用可能だが、Variables では設定できない。
  • 実装では font-size の相対値にすることが多い。
    • line-height: 1.75; = 175%
  • % で連携できれば良いのだが、数値(px)の場合は「どの font-size に対しての値なのか」を判別できないため、Style Dictionary でも変換は不可。
  • 現状、1つの値でデザインと実装を連携することはできない。

対応パターン

  • デザイン用と実装用、両方の値を Variables で管理する。
  • デザイン用か実装用、どちらかの値を Variables で管理する。
  • Variables で管理をしない。
YamanakaYamanaka

letter-spacing

  • 文字間の設定。line-height と同じ。やっかい。
  • 実装では、font-size の相対値(em)で設定することが多い。
    • letter-pacing: 0.05em; = 5%
YamanakaYamanaka

color

  • 文字色。Figma だとFill
  • Color タイプを設定可能。
  • 実装側でも特に問題なく連携可能。
YamanakaYamanaka

まとめ

プロパティ タイプ 連携 備考
font-family String 問題なし Style Dictionary でひと手間(クォーテーション追加)
font-weight Number 問題なし
font-size Number 問題なし Style Dictionary でひと手間(remに変換)
line-height Number
letter-spacing Number
color Color 問題なし