CSSで実現する鮮やかなフォントデザイン:カラーフォントと@font-palette-valuesの活用法


@font-palette-values は、CSSでカラーフォントのパレット値を定義するためのルールです。カラーフォントは、文字に色情報を埋め込むことができる新しいタイプのフォント形式です。@font-palette-values を使用すると、フォント制作者が設定したデフォルトのパレット値を上書きし、独自のパレット値を指定することができます。

構文

@font-palette-values <font-family> {
  <palette-identifier> {
    <property-name>: <value>;
  }
}
  • <value>: プロパティ値
  • <property-name>: パレット内のプロパティ名。例:colorweightalphaなど
  • <palette-identifier>: パレット識別子。フォント制作者が定義したパレットの名前またはインデックスを指定します。
  • <font-family>: カラーフォントのファミリー名

@font-palette-values "MyFont" {
  "DefaultPalette" {
    color: #f00; /* 赤色に変更 */
  }
  "AccentPalette" {
    weight: 700; /* 太字に変更 */
  }
}

この例では、"MyFont" というカラーフォントの "DefaultPalette" パレットの文字色を赤色に、"AccentPalette" パレットの文字の太さを太字に変更します。

  • CSS カスタムプロパティの値を @font-palette-values 内で呼び出すことはできません。
  • フォント制作者によって定義されたパレット識別子のみを使用できます。独自の名前でパレットを作成することはできません。
  • @font-palette-values は、比較的新しく導入された機能であり、すべてのブラウザでサポートされているわけではありません。現時点では、Chrome、Edge、Safariのみでサポートされています。


カラーフォントのデフォルトパレットをカスタマイズする

@import url('https://fonts.googleapis.com/css2?family=Bungee+Spice');

p {
  font-family: 'Bungee Spice';
  font-size: 2rem;
}

@font-palette-values --blue-palette {
  font-family: 'Bungee Spice';
  base-palette: 0;
  override-colors: 0 #007bff;
}

.blue-text {
  font-palette: var(--blue-palette);
}

説明

  • .blue-text クラスは、--blue-palette パレットを要素に適用します。
  • @font-palette-values ルールは、--blue-palette という名前の新しいパレットを定義します。
    • font-family プロパティは、Bungee Spice フォントをこのパレットに関連付けます。
    • base-palette プロパティは、デフォルトパレットを使用することを示します。
    • override-colors プロパティは、デフォルトパレットの最初の色の値を青色 (#007bff) に上書きすることを示します。
  • p セレクタは、Bungee Spice フォントと 2rem のフォントサイズをすべての <p> 要素に適用します。
  • @import ルールを使用して、"Bungee Spice" フォントを Google Fonts からインポートします。

結果

このコードを実行すると、blue-text クラスが適用されたすべてのテキストが青色で表示されます。

独自のカラーパレットを作成する

この例では、"Bungee Spice" というカラーフォント用の独自のパレットを作成し、そのパレットを要素に適用します。

@import url('https://fonts.googleapis.com/css2?family=Bungee+Spice');

p {
  font-family: 'Bungee Spice';
  font-size: 2rem;
}

@font-palette-values --custom-palette {
  font-family: 'Bungee Spice';
  color: #f00, #0f0, #00f; /* 赤、緑、青 */
  weight: 400, 700, 900; /* 標準、太字、極太 */
  alpha: 1, 0.5, 0.2; /* 不透明、半透明、薄透明 */
}

.custom-text {
  font-palette: var(--custom-palette);
}

説明

  • .custom-text クラスは、--custom-palette パレットを要素に適用します。
  • @font-palette-values ルールは、--custom-palette という名前の新しいパレットを定義します。
    • font-family プロパティは、Bungee Spice フォントをこのパレットに関連付けます。
    • color プロパティは、パレットに 3 つのカラー値 (#f00#0f0#00f) を定義します。これらの色は、それぞれ赤、緑、青に対応します。
    • weight プロパティは、パレットに 3 つのフォントウェイト値 (400700900) を定義します。これらの値は、それぞれ標準、太字、極太のフォントウェイトに対応します。
    • alpha プロパティは、パレットに 3 つの不透明度値 (10.50.2) を定義します。これらの値は、それぞれ不透明、半透明、薄透明の不透明度に対応します。
  • この例は、@import ルールと p セレクタは前の例と同じです。

結果

このコードを実行すると、custom-text クラスが適用されたすべてのテキストは、赤、緑、青の順に色が変わり、フォントウェイトと不透明度も変化します。

この例では、"Bungee Spice" というカラーフォントの既存のパレットを継承し、そのパレットの一部を変更します。

@import url('https://fonts.googleapis.com/css2?family=Bungee+Spice');


代替手段

    • フォントの色やスタイルを定義するために、CSS カスタムプロパティを使用できます。
    • var() 関数を使用して、CSS カスタムプロパティの値をフォントプロパティに動的に適用できます。
    • この方法は、すべての主要なブラウザで広くサポートされています。
  1. フォントのフォールバック

    • カラーフォントが利用できない場合に備えて、代替のフォントを定義できます。
    • font-family プロパティでフォールバックフォントを指定できます。
    • この方法は、古いブラウザでも比較的良好に動作します。
  2. SVGフォント

    • カラーを含む複雑な文字デザインを作成するために、SVGフォントを使用できます。
    • SVGフォントは、すべての主要なブラウザでサポートされています。
    • ただし、SVGフォントはファイルサイズが大きくなる傾向があり、読み込み速度が遅くなる可能性があります。
  3. WebAssemblyフォント

    • 高度な機能とパフォーマンスを備えたカラーフォントを作成するために、WebAssemblyフォントを使用できます。
    • WebAssemblyフォントは、比較的新しい技術であり、すべてのブラウザでサポートされているわけではありません。
    • また、SVGフォントと同様に、ファイルサイズが大きくなる傾向があり、読み込み速度が遅くなる可能性があります。

各代替手段の比較

代替手段利点欠点
CSS カスタムプロパティと var() 関数広いブラウザサポート、柔軟性カラーフォントの詳細な制御が難しい場合がある
フォントフォールバック古いブラウザでのサポートカラーフォントの機能が制限される
SVGフォント複雑なデザインが可能ファイルサイズが大きくなる可能性がある、読み込み速度が遅くなる可能性がある
WebAssemblyフォント高度な機能とパフォーマンスブラウザサポートが限られている、ファイルサイズが大きくなる可能性がある、読み込み速度が遅くなる可能性がある

推奨事項

  • 高度な機能とパフォーマンスが必要な場合は、WebAssemblyフォント を検討します。(ただし、ブラウザサポートが限られていることに注意してください)
  • 複雑なデザインが必要な場合は、SVGフォント を検討します。
  • 古いブラウザでのサポートが重要の場合は、フォントフォールバック を使用します。
  • シンプルなカラー変更の場合は、CSS カスタムプロパティと var() 関数 が最良の選択肢です。
  • 最新の情報については、CSSに関するドキュメントや Web 開発に関するブログ記事を常に確認することをお勧めします。
  • 将来的には、「@font-palette-values」 の機能がより広くサポートされるようになる可能性があります。