Typography


Typography TokensはSparkle Design System全体で使用するタイポグラフィのための全ての要素を定義した物です。
Primitive Tokens
Primitive Tokens はタイポグラフィそのものではなく、タイポグラフィを構成する要素を扱うトークン階層です。
コンポーネントで使用するタイポグラフィは後述する Semantics Tokens で定義します。
現在はこの5つの要素から成り立っています。
fonts(フォントファミリー)fontSizes(フォントサイズ)fontWeights(フォントウェイト)lineHeights(行間)letterSpacings(文字間隔)
fonts
fonts はフォントファミリーを扱うための要素です。
テキストフォントには BIZ UD フォントを採用しており、トークンには等幅フォントと可変幅フォントの2種類のファミリーを用意しています。
アイコンフォントにはMaterial Symbols Roundedを採用しています。
| Token | Value | Description |
|---|---|---|
| fonts.proportional | “BIZ UDPGothic” | 可変幅フォント |
| fonts.monospace | “BIZ UDGothic” | 等幅フォント |
| fonts.icon | “Material Symbols Rounded” | アイコンフォント |

- プロポーショナルフォント (
proportional)- 文字の種類に応じて文字幅を調整して読みやすい文字組となるように設計されたフォント
- 見出しや文章に適用させることに向いている
- モノスペースフォント (
monospace)- 文字幅が固定化されているフォント
- 幅が均一なので数字や文字同士を比較してもらう目的で提示する場合に効果的
- アイコンフォント(
icon)- アイコンだけで構成されているフォント
fontSizes
fontSizes はフォントサイズを扱うための要素です。
12px を起点に、54px までの12段階を用意しています。
フォントサイズは以下の公式で求めることができます。
X₀ = 12px
Xn = Xn-1 + {INT[(n-2)/4] + 1} * 2def recurrence(x):
if x == 1:
return 12
else:
return recurrence(x - 1) + (int((x - 2) / 4) + 1) * 2
for i in range(1, 13):
px = recurrence(i)
rem = px / 16.00
print("x{0}: {1}px ({2}rem)".format(i, px, rem))| Token | Value | Description |
|---|---|---|
| fontSizes.1 | “12px” | 0.75rem |
| fontSizes.2 | “14px” | 0.875rem |
| fontSizes.3 | “16px” | 1rem |
| fontSizes.4 | “18px” | 1.125rem |
| fontSizes.5 | "20px" | 1.25rem |
| fontSizes.6 | "24px" | 1.5rem |
| fontSizes.7 | "28px" | 1.75rem |
| fontSizes.8 | “32px” | 2rem |
| fontSizes.9 | “36px” | 2.25rem |
| fontSizes.10 | “42px” | 2.625rem |
| fontSizes.11 | “48px” | 3rem |
| fontSizes.12 | “54px” | 3.375rem |
fontWeights
fontWeights はフォントウェイトを扱うための要素です。
フォントウエイトにはテキスト用とアイコン用の2種類があります。
| Token | Value | Description |
|---|---|---|
| fontWeights.text.regular | “Regular” | 400 |
| fontWeights.text.bold | “Bold” | 700 |
| fontWeights.icon.fill0 | “Fill0” | Fill: 0, Weight: 500 |
| fontWeights.icon.fill1 | “Fill1” | Fill: 1, Weight: 500 |
lineHeights
lineHeights は行高・行間を扱うための要素です。
line-heightに奇数や小数を含む値が適応されてしまうことを防ぐことを目的に、fontSizesを基準にバーティカルグリッドを適用した値を算出して定義します。
//計算式
verticalGridUnit: 4
baseLineHeight: none | small | medium | large
lineHeight: CEIL((fontSize * baseLineHeight) / verticalGridUnit ) * verticalGridUnitbaseLineHeight
none と small から large までの 計4段階を用意しています。
| Token | Value | Description |
|---|---|---|
| lineHeights.none | “1” | 100% |
| lineHeights.small | “1.25” | 125% |
| lineHeights.medium | “1.5” | 150% |
| lineHeights.large | “1.75” | 175% |
letterSpacings
letterSpacings は文字間隔を扱うための要素です。
通常状態の normal と small から large までの 3 段階を用意しています。
| Token | Value | Description |
|---|---|---|
| letterSpacings.normal | “0” | 0% |
| letterSpacings.small | “0.025em” | 2.5% |
| letterSpacings.medium | “0.05em” | 5% |
| letterSpacings.large | “0.1em” | 10% |
Semantics Tokens
Semantics Tokens は 実際にコンポーネントで使用するタイポグラフィを定義するためのトークン階層です。
Semantics Tokens は Primitive Tokens を継承して構築されています。
全てのタイポグラフィは Primitive Tokens で定義した5つの要素を組み合わせて構築されています。
実例
以下のトークンは Text コンポーネント用のタイポグラフィの定義を一部抜粋した物です。
Figma では深いネスト構造にすると目的のタイポグラフィスタイルを参照する際に時間がかかるため、text.3.regular.pro のように 4 階層で定義するのではなく text.3.regular-pro のようにウエイトとファミリーを混合させることで 3階層で定義しています。
| Token | Font family | Font weight | Line height | Font size | Letter spacing |
|---|---|---|---|---|---|
| text.3.regular-pro | "proportional" | "regular" | "medium" | "3" | medium |
| text.3.regular-mono | "monospace" | "regular" | "medium" | "3" | medium |
| text.3.bold-pro | "proportional" | "bold" | "medium" | "3" | medium |
| text.3.bold-mono | "monospace" | "bold" | "medium" | "3" | medium |
Headingコンポーネントの場合は同じフォントサイズであっても行高を広く取りたいのでLetter spacingを large に設定しています。
このように、目的に応じて参照するトークンだけを変更することでデザインの一貫性や実装時の保守性を保ちながらコンポーネントを定義することができます。
| Token | Font family | Font weight | Line height | Font size | Letter spacing |
|---|---|---|---|---|---|
| heading.3.regular | "proportional" | "regular" | "medium" | "3" | "large" |
| heading.3.bold | "proportional" | "bold" | "medium" | "3" | "large" |
各種リンク

