ブラウザで生成された UI のテーマ設定

ブラウザで生成される UI のほとんどは、CSS を使用してある程度カスタマイズできます。最新の機能が必要な場合でも、古いブラウザでは適切に機能が制限されるため、ポリフィルやフォールバックが必要ないことがよくあります。

ブラウザの UI(フォーム コントロール、スクロールバー、選択、エラー メッセージなど)を再作成する前に、まず次の点を確認してください。

  1. 最新の CSS を使用しても、ブラウザの UI をニーズに合わせて十分にカスタマイズできない。
  2. 必要なカスタマイズが、組み込み UI を再作成するトレードオフを正当化するほど重要である。特に、ネイティブ UI が無料で提供する、アクセス可能なセマンティクス、キーボード処理、IME、AT 統合が失われる。

可能なカスタマイズの例:

  • ::selection を使用して、ハイライト表示されるテキストの色をカスタマイズします。
  • 避けるべきこと: コンテンツ テキストに user-select: none を適用する。コピー&ペースト、翻訳ツール、AT の「ここから読み上げる」ジェスチャーが機能しなくなります。クローム(ドラッグ ハンドル、ツールバー、冗長なボタンラベル)に限定します。
  • accent-color を使用して、ブラウザで生成された UI にページのアクセント カラーを適用します。
  • color-scheme を使用して、ブラウザの UI をライトモード / ダークモードに適応させます。
  • scrollbar-color を使用してスクロールバーの色をカスタマイズし、scrollbar-width を使用してスクロールバーの太さを制御します。つまみはトラックと明確に区別できるようにし(3:1 以上)、スクロール可能な領域に scrollbar-width: none を設定しないでください(スクロールが別のアフォーダンスに完全に置き換えられている場合にのみ使用します)。
  • 有効性のスタイル設定には、:invalid / :valid ではなく、:user-invalid / :user-valid を使用します。これらは、ユーザーがフィールドを操作した後にのみ一致するため、ページ読み込み時に必須の空のフィールドをエラーとしてフラグ付けする、不適切なデフォルトを回避できます。input を広範囲にターゲット設定する場合(例: input:not(input[type="range"]):user-valid)、スライダーを調整してもフィールドの有効性の境界や背景が適用されないように、範囲スライダーを除外します。
  • ボタンとテキスト フィールド(<textarea> を含む)は、通常、通常の要素としてスタイル設定できます。
  • font-size を使用してタイポグラフィをスケーリングし、その他のテキスト プロパティを使用してタイポグラフィを制御する

テキスト フィールドのスタイル設定(<input> と <textarea>)

ほとんどのスタイル設定(色、枠線、背景、タイポグラフィなど)では、これらの要素を通常のテキスト コンテナとして扱います。

  • :placeholder-shown と ::placeholder を使用して、入力プレースホルダのスタイルを設定します。
  • field-sizing: content を使用して、テキスト フィールドのサイズをコンテンツに合わせます。
  • <textarea> 要素の場合、resize: vertical を使用して水平方向のサイズ変更を無効にするか、resize: none を使用してすべてのサイズ変更を無効にします。

多肢選択コントロール(選択、ラジオボタン、チェックボックス)

  • プルダウンに表示される複数のオプションから 1 つを選択するには、<select> + appearance: base-select + ::picker(select) を使用します。詳しくは、ブランド選択のスタイル設定をご覧ください。
  • ページにインラインで配置された複数のオプションから 1 つ以上を選択する: 各オプションに <label> 内の <input type=checkbox> または <input type=radio> を使用します。label:has(:checked) を使用してスタイルを設定します。
  • appearance: none + 生成されたコンテンツ(::before / ::after)または背景画像を使用して、チェックボックス、ラジオボタン、スイッチのスタイルを設定し、チェックされた状態を描画します。

テキスト以外の <input>(ボタン、スライダー、ファイル入力など)

  • ファイル入力: ::file-selector-button を使用してボタンのスタイルを設定します。
  • <input> は、type が button、submit、reset のいずれかである場合は使用しないでください。代わりに <button> を使用し、通常の要素としてスタイルを設定します。
  • スライダー: appearance: none + つまみ疑似要素(::-webkit-slider-thumb、::-moz-range-thumb など)とトラック疑似要素(::-webkit-slider-runnable-track、::-moz-range-track など)を使用して、より細かく制御します。