CSS 基本ユーザーインターフェイスモジュール レベル4

W3C作業草案,

このバージョン:
https://www.w3.org/TR/2021/WD-css-ui-4-20210316/
最新公開バージョン:
https://www.w3.org/TR/css-ui-4/
編集者草案:
https://drafts.csswg.org/css-ui-4/
以前のバージョン:
テストスイート:
http://test.csswg.org/suites/css-ui-4_dev/nightly-unstable/
課題追跡:
CSSWG課題リポジトリ
仕様内インライン
編集者:
Florian Rivoal (Bloomberg代表)
この仕様への編集提案:
GitHubエディター

概要

この仕様書は、ユーザーインターフェイスに関連する プロパティと値を使用してHTMLおよびXML(XHTMLを含む)をスタイリングする方法について説明します。 これは、以前のCSSレベルのプロパティと値から ユーザーインターフェイス関連機能を含み、それを拡張します。 文書内の基本的なユーザーインターフェイス要素を スタイリングするために、さまざまなプロパティと値を使用します。

CSSは、構造化された文書(HTMLやXMLなど)の 画面上、紙上などでのレンダリングを記述するための言語です。

この文書の状態

このセクションでは、公開時点でのこの文書の状態について説明します。 他の文書がこの文書に取って代わる可能性があります。 現在のW3Cの公開物とこの技術レポートの最新版のリストは、 W3C技術レポートのインデックス(https://www.w3.org/TR/)にあります。

この文書は、CSS作業グループによって 作業草案として公開されました。 作業草案としての公開は、W3C会員による承認を意味するものではありません。

この文書は草案であり、 他の文書によって更新、置き換え、 または廃止される可能性があります。 この文書を進行中の作業以外として引用するのは不適切です。

フィードバックは、GitHubで課題を提出(推奨) することで送信してください。 タイトルに仕様コード「css-ui」を含めて、次のようにしてください: 「[css-ui] …コメントの概要…」。 すべての課題とコメントはアーカイブされています。 また、フィードバックはwww-style@w3.orgという 公開メーリングリスト(アーカイブあり)に送信することもできます。

この文書は、2020年9月15日W3Cプロセス文書に 基づいて管理されています。

この文書は、W3C特許方針の下で運営されている グループによって作成されました。 W3Cは、グループの成果物に関連する特許開示の 公開リスト を維持しています。そのページには特許を開示するための指示も含まれています。 特許を含むと個人が知っている場合は、 必須クレーム に関する情報を、W3C特許方針第6節 に従って開示する必要があります。

この仕様は、CSS基本ユーザーインターフェイスモジュールレベル3を 含み、拡張します。[CSS-UI-3]

以下の機能はリスクがあり、CR期間中に削除される可能性があります:

「リスクあり」とはW3Cプロセスの専門用語であり、必ずしもその機能が削除または延期される危険があることを意味するわけではありません。 作業グループ(WG)は、その機能が適時に相互運用可能に実装されるのが難しいと考えており、 必要に応じて提案勧告段階に移行する際にその機能を削除できるようにするため「リスクあり」としてマークしています。

1. イントロダクション

このモジュールは、ユーザーインターフェイス関連のプロパティや値をスタイリングできるCSSプロパティについて説明します。

CSS1のセクション2.1 [CSS1]CSS2の第18章 [CSS21] では、いくつかのユーザーインターフェイス関連プロパティや値が導入されました。CSS3のユーザーインターフェイス(2000年2月16日) では、更なる新しいユーザーインターフェイス関連機能が導入されました。

[CSS-UI-3] は、これらを統合・拡張・置換するために後に導入されました。 この仕様はその流れを継承し、[CSS-UI-3] を置き換えます。

1.1. 目的

この仕様の目的は、以下の目標を達成することです:

2. モジュールの相互作用

この文書は、従来の仕様には存在しなかった新しい機能を定義しています。 さらに、[CSS-UI-3] を置き換え、それ自体も以下を置き換えました:

注: box-sizing プロパティは以前このセクションで定義されていましたが、 CSS Sizing 3 §3.3 Box Edges for Sizing: the box-sizing property に移動されました。

注: text-overflow プロパティは以前このセクションで定義されていましたが、 CSS Overflow 3 §4.1 Overflow Ellipsis: the text-overflow property に移動されました。

2.1. 値の定義

この仕様は、CSS21[CSS21] におけるCSSプロパティ定義規則に従い、[CSS-VALUES-3] の値定義構文を用いています。 この仕様で定義されていない値型はCSS Values & Units [CSS-VALUES-3] で定義されています。 他のCSSモジュールとの組み合わせで、これらの値型の定義が拡張される場合があります。

各プロパティ定義で示されている値に加えて、 この仕様で定義される全てのプロパティは CSS全体キーワードも値として受け付けます。 可読性のため、明示的には繰り返しません。

3. アウトラインプロパティ

スタイルシート作成者は、ボタンやアクティブなフォームフィールド、イメージマップなどの視覚的オブジェクトを強調表示するためにアウトラインを作成したい場合があります。アウトラインは、以下の点でボーダーと異なります:

  1. アウトラインは空間を占有しません。
  2. アウトラインは非矩形の場合があります。
  3. UA(ユーザーエージェント)は、:focus 状態の要素にアウトラインを描画することがよくあります。

アウトラインプロパティは、これらの動的アウトラインのスタイルを制御します。

アウトライン描画の積み重ね順は、プラットフォームごとにより良いユーザー体験を提供するために、実装に委ねられています。 これは、CSS 2.1付録E [CSS21] で定義されたアウトラインの積み重ね順を上書きします。

キーボードユーザー、特に障害のある方などページと他の方法で インタラクションできない方は、:focus 状態の要素にアウトラインが見えることに依存しています。 したがって、著者は代替のハイライト機構を提供しない限り、そうした要素のアウトラインを不可視にしてはなりません。

アウトラインにtransformを適用した場合の描画はCSS3-UIでは明示的に未定義です。

3.1. アウトラインショートハンド: outline プロパティ

名前: outline
値: [ <'outline-color'> || <'outline-style'> || <'outline-width'> ]
初期値: 各プロパティを参照
適用対象: すべての要素
継承: しない
パーセンテージ: N/A
算出値: 各プロパティを参照
アニメーション型: 各プロパティを参照
正規順序: 構文に準ずる

3.2. アウトラインの太さ: outline-width プロパティ

名前: outline-width
値: <line-width>
初期値: medium
適用対象: すべての要素
継承: しない
パーセンテージ: N/A
算出値: 絶対長さ; 0 もしアウトラインスタイルが none の場合
正規順序: 構文に準ずる
アニメーション型: 算出値による

3.3. アウトラインパターン: outline-style プロパティ

名前: outline-style
値: auto | <outline-line-style>
初期値: none
適用対象: すべての要素
継承: しない
パーセンテージ: N/A
算出値: 指定されたキーワード
正規順序: 構文に準ずる
アニメーション型: 算出値による

3.4. アウトラインの色: outline-color プロパティ

名前: outline-color
値: <color> | invert
初期値: invert
適用対象: すべての要素
継承: しない
パーセンテージ: N/A
算出値: invert の算出値は invert です。 <color> の値については [CSS-COLOR-4] の [[!CSS-COLOR-4#resolving-color-values]] を参照してください。
正規順序: 構文に準ずる
アニメーション型: 算出値による

outlineプロパティで作成されたアウトラインは、ボックスの「上」に描画されます。 つまり、アウトラインは常に最前面に表示され、 ボックスや他のボックスの位置やサイズには影響しません。 したがって、アウトラインの表示や非表示はリフローを引き起こしません。

アウトラインは非矩形の場合があります。 例えば、要素が複数行に分割されている場合、 すべての要素のボックスを囲むアウトラインまたは最小限のアウトライン集合であるべきです。

アウトラインの各部分は、一部の辺が開いている(インライン要素のボーダーが行分割される場合のように)状態ではなく、 全てが完全に連結されているべきです。

アウトラインの部分は矩形である必要はありません。 アウトラインが border edge に沿う場合、 border-radius のカーブに従うべきです。

アウトラインの位置は、子孫ボックスによって影響される場合があります。

ユーザーエージェントは、フォーカスという概念を適切にユーザーに伝えるための領域を囲むアウトラインを決定するアルゴリズムを使用すべきです。

注: この仕様ではアウトラインの正確な位置や形状は定義していませんが、一般的にボーダーボックスのすぐ外側に描画されます。

outline-width プロパティは border-widthCSS Backgrounds 3 §3.3 Line Thickness: the border-width properties)と同じ値を受け付けます。

<outline-line-style><line-style>CSS Backgrounds 3 §3.2 Line Patterns: the border-style properties)と同じ意味で同じ値を受け付けますが、 hidden はアウトラインスタイルとしては使用できません。 さらに、outline-style プロパティは auto の値も受け付けます。 auto の値を指定すると、ユーザーエージェントがカスタムアウトラインスタイルを描画できます。 通常はプラットフォームのユーザーインターフェイスのデフォルトや、CSSで詳細に記述できないリッチなスタイル (例えば、半透明の外側ピクセルで光って見える丸みのあるアウトラインなど)が描画されます。 したがって、この仕様では outline-coloroutline-widthauto スタイルのアウトライン描画時に どのように反映・使用されるか(もし使用される場合)が定義されていません。 ユーザーエージェントは autosolid として扱っても構いません。

outline-color プロパティは 全ての色と、キーワード invert を受け付けます。invert は画面上のピクセルの色反転を行うことが期待されています。 これは、背景色に関係なくフォーカス枠が見えるようにする一般的な手法です。

準拠したユーザーエージェントは、画面上のピクセルの色反転をサポートしないプラットフォームでは invert の値を無視しても構いません。

もしユーザーエージェントが invert の値をサポートしない場合、 その値をパース時に拒否しなければならず、 outline-color プロパティの初期値は currentColor キーワードになります。

outline プロパティはショートハンドプロパティであり、 outline-style, outline-width, outline-color の3つすべてを設定します。

注: アウトラインは全ての辺で同じになります。 ボーダーとは異なり、outline-topoutline-left などのプロパティはありません。

この仕様では、複数のアウトラインが重なって描画される場合や、他の要素の背後に部分的に隠れているボックスのアウトラインがどのように描画されるかは定義していません。

BUTTON要素に太いアウトラインを描画する例:
button { outline: thick solid }

グラフィカルユーザーインターフェイスは、ページ上でどの要素がフォーカスされているかをユーザーに伝えるためにアウトラインを使う場合があります。 これらのアウトラインは、ボーダーとは別に表示され、 アウトラインの表示や非表示を切り替えても文書のリフローは発生しません。 フォーカスは、文書内でユーザーが操作対象としている要素です (例:テキスト入力やボタン選択など)。

例えば、要素がフォーカスされた時に太い黒い線、 アクティブな時に太い赤い線を描くには、次のルールを使用できます:
:focus  { outline: thick solid black }
:active { outline: thick solid red }

注: アウトラインはレイアウトに影響しないため (つまり、ボックスモデルにスペースは確保されません)、 ページ上の他の要素と重なる場合があります。

3.5. アウトラインのオフセット: outline-offset プロパティ

デフォルトでは、アウトラインは border edge のすぐ外側から描画されます。 しかし、アウトラインをオフセットして border edge より外側に描画することも可能です。

名前: outline-offset
値: <length>
初期値: 0
適用対象: すべての要素
継承: しない
パーセンテージ: N/A
算出値: 絶対長さ
正規順序: 構文に準ずる
アニメーション型: 算出値による

outline-offset の算出値が0以外の場合、 アウトラインは border edge からその分だけ外側に描画されます。

例えば、フォーカスアウトラインとフォーカス・アクティブ要素の間に2ピクセルの間隔を空けたい場合、 次のルールを使用できます:
:focus,:active  { outline-offset: 2px }

負の値を指定した場合、アウトラインはボーダーボックス内に縮小されます。 アウトラインで描画される形状の外側の高さと幅は、 outline-width プロパティの算出値の2倍未満になってはならず、 大きな負の値でもアウトラインが描画できるようにしなければなりません。 ユーザーエージェントは、この制約を各次元で独立して適用すべきです。 アウトラインが複数の分断された形状として描画される場合、この制約はそれぞれの形状に個別に適用されます。

4. リサイズ

CSS2.1では、ブロックコンテナ要素上のスクロール機構 (スクロールバーなど)の外観を制御するための仕組みが提供されています。 この仕様は、それに加えて要素のユーザーによるリサイズ可能性や テキストオーバーフロー動作の指定を制御するための仕組みを追加します。

4.1. ボックスのリサイズ: resize プロパティ

resize プロパティは、著者が要素をユーザーがリサイズできるかどうか、 またどの軸でリサイズできるかを指定できます。

名前: resize
値: none | both | horizontal | vertical | block | inline
初期値: none
適用対象: overflow が visible 以外の要素、 または画像・動画・iframe などの置換要素
継承: しない
パーセンテージ: N/A
算出値: 指定キーワード
正規順序: 構文に準ずる
アニメーション型: 離散値
none
UAは要素上でリサイズ機構を表示せず、ユーザーは要素を直接操作してリサイズする方法を持ちません。
both
UAは高さと幅の両方を調整できる双方向リサイズ機構を表示します。
horizontal
UAは幅のみ調整できる水平方向リサイズ機構を表示します。
vertical
UAは高さのみ調整できる垂直方向リサイズ機構を表示します。
block
UAは ブロック軸 のみ調整できる 一方向リサイズ機構を表示し、 要素の block size のみ調整できます。
inline
UAは インライン軸 のみ調整できる 一方向リサイズ機構を表示し、 要素の inline size のみ調整できます。

現在、overflow プロパティ(例:overflow: scrolloverflow: hidden など)で 要素上のスクロール機構の外観を制御できます。 resize プロパティの目的は、 要素上のリサイズ機構(リサイズボックスやウィジェットなど)の外観と機能を制御できるようにすることです。

注: リサイズ機構はスクロール機構とは異なり、UAのズーム機構とも関係ありません。 スクロール機構は、ユーザーが要素のコンテンツのどの部分を表示するか決定できるものです。 リサイズ機構は、ユーザーが要素のサイズ自体を決定できるものです。

resize プロパティは、 算出された overflow の値が visible 以外である要素に適用されます。 UAは、overflow プロパティの値に関係なく、次にも適用できます:

resize プロパティの生成されたコンテンツへの効果は未定義です。 実装では resize プロパティを生成されたコンテンツに適用すべきではありません。

注: resize プロパティは、 将来的に Interface CSSPseudoElement の実装があれば生成されたコンテンツにも適用される場合があります。

ユーザーが要素をリサイズした場合、 ユーザーエージェントは widthheight のプロパティを ユーザーが指定したサイズのpx単位長値に設定し、 要素の style属性DOMに既存の宣言があればそれを置き換えます。 !important があっても置き換えます。

要素が一方向だけリサイズされた場合、対応するプロパティのみが設定され、両方は設定されません。

リサイズの方向(要素の左上を変更するか右下を変更するかなど)は、 要素が絶対位置指定かどうか、rightbottom プロパティで位置指定されているか、要素の言語が右から左かなど、 多くのCSSレイアウト要因によって変わります。 UAは、リサイズの方向(CSSレイアウトで決定されるもの)と、プラットフォームの慣習・制約の両方を考慮して、 リサイズ機構をユーザーにどう伝えるか決定すべきです。

ユーザーエージェントは、min-width, max-width, min-height, max-height で課されるもの以外の制約なしに ユーザーが要素をリサイズできるようにしなければなりません。

注: ユーザーが要素をリサイズしようとしても、!important のカスケード宣言により style属性の widthheight のプロパティが DOM上で上書きされ、無視される場合があります。

要素の resize プロパティの算出値の変更は、 ユーザーによるリサイズで style属性に加えられた変更をリセットしません。

例えば、iframeをスクロール可能かつリサイズ可能にするには、次のルールを使用できます:
iframe,object[type^="text/"],
object[type$="+xml"],object[type="application/xml"]
{
  overflow:auto;
  resize:both;
}

5. ポインティングデバイスとキーボード

5.1. ポインターの操作

5.1.1. カーソルのスタイリング: cursor プロパティ

名前: cursor
値: [ [<url> [<x> <y>]?,]*
[ auto | default | none |
context-menu | help | pointer | progress | wait |
cell | crosshair | text | vertical-text |
alias | copy | move | no-drop | not-allowed | grab | grabbing |
e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll |
zoom-in | zoom-out
] ]
初期値: auto
適用対象: すべての要素
継承: する
パーセンテージ: N/A
算出値: 指定通り。ただし相対URLは絶対URLに変換される
正規順序: 構文に準ずる
アニメーション型: 離散値

このプロパティは、ポインティングデバイスのカーソルのホットスポットが要素の border edge 内にあるときに表示するカーソルの種類を指定します。

注: CSS Backgrounds 3 §4.1 カーブ半径: border-radius プロパティ に従い、border edgeborder-radius の影響を受けます。

要素が重なっている場合、どの要素がカーソルの種類を決定するかはヒットテストに基づきます。 カーソルを決定する要素は、この位置でクリックが発生した場合にクリックを受け取る要素です。

注: ヒットテストの詳細は本仕様の範囲外です。 今後のCSSまたはHTMLの改訂で定義される予定です。

ユーザーエージェントは、スクロールバーやリサイズハンドルなどのネイティブUIコントロール、 またはフォーム要素のUA固有実装で使われるその他のネイティブUIウィジェット上では cursor プロパティを無視しても構いません。 また、UAは cursor プロパティを無視し、 ページが応答していないときのビジーカーソルや、テキスト選択中のテキストカーソルなど、 UAインターフェイスのさまざまな状態を示すカーソルを表示することができます。

注: [HTML] では イメージマップの特別な扱いcursor プロパティに対して定義されています。

値の意味は以下の通りです:

画像カーソル
<url>
ユーザーエージェントはURIで指定されたリソースからカーソル画像を取得します。 リスト内の最初のカーソルを処理できない場合、2番目以降を順次処理します。 すべてのユーザー定義カーソルを処理できない場合、リスト末尾のキーワードカーソルを使用します。 準拠UAは <url> の代わりに、 <image> (上位互換)をサポートしても構いません。

UAは以下の画像ファイル形式をサポートしなければなりません:

加えて、UAは以下の画像ファイル形式をサポートすべきです:

UAは追加のファイル形式(SVG含む)もサポートしても構いません。 [SVG11]で定義されるものや、 セキュア静的・アニメーションモード [SVG2] など、natural size がなくてもよいです。

注: CSSワーキンググループは元々すべてのSVG(natural size有無問わず)を必須とする意図でしたが、 実装が不足していたため必須からオプションに変更されました。

注: この仕様執筆時点(2015年春)で、一般的なデスクトップブラウザがカーソルでサポートするファイル形式は Microsoft設計の.icoと.curのみです。レガシーコンテンツとの互換性のため、 これらの形式をサポートすることが推奨されますが、オープンスペックがないため これらの形式について規範的要件は課せません。 詳細は Wikipedia を参照してください。

default object size(カーソル画像の既定サイズ)は UAのOS上の一般的なカーソルサイズに基づくべきUA定義サイズです。

concrete object size(実サイズ)は default sizing algorithm で決定されます。 OSが一定サイズ以上のカーソル描画に非対応の場合、 それ以上のサイズはOSの制約内に収まるよう縮小し、 可能なら画像の natural aspect ratio を維持します。

オプションの <x> と <y> 座標は、画像内のポインタ位置(ホットスポット)を特定します。

<x>
<y>
どちらも <number> です。 カーソルの座標系(左上基準)で指し示す位置のx座標とy座標です。

注: 画像型ごとの座標系の定義は本仕様では定めず、[CSS4-IMAGES] に委ねます。

値が指定されていなければ、画像リソース内で定義されたホットスポットが使われます。 両方未指定かつカーソル画像にホットスポット定義がなければ "0 0" が指定されたものとみなします。

座標が画像外になる場合、独立してクランプして収める必要があります。

汎用カーソル
auto
UAは状況に応じて表示するカーソルを決定します。 具体的には auto は、選択可能なテキストや編集可能要素上では text として、その他ではdefaultとして振る舞います。

注: 選択可能テキストや編集要素上では text同様、 要素の writing mode に応じて縦・横のテキストカーソルを使い、transformや他の効果も考慮してよいです。

default
プラットフォーム依存のデフォルトカーソル。 多くは矢印で描画されます。
none
その要素にはカーソルが表示されません。
リンク・ステータスカーソル
context-menu
カーソル下のオブジェクトにコンテキストメニューが利用可能。 多くは小さなメニューアイコン付き矢印で描画されます。
help
カーソル下のオブジェクトにヘルプが利用可能。 多くはクエスチョンマークや吹き出しで描画されます。
pointer
カーソルはリンクを示すポインターです。 多くは人差し指を伸ばした手の甲で描かれます。

特に指定がない限り、 UAは全ての対応文書フォーマットのハイパーリンクに cursor: pointerUAスタイルシートで 通常(!important なし)宣言で適用しなければなりません。

著者はリンクに pointer を使うべきで、他の対話要素にも使っても構いません。

progress
進行状況インジケーター。処理中だが wait とは違いユーザー操作可能。 多くはスピニングアイコンや時計付き矢印などで描画されます。
wait
プログラムがビジー状態でユーザーが待つ必要があることを示す。 多くは時計や砂時計で描画されます。
選択カーソル
cell
セルやセル集合が選択可能であることを示す。 多くは中央に点のある太いプラス記号で描画されます。
crosshair
単純な十字線(例: "+"記号のような短い線分)。 2次元ビットマップ選択モードなどで使われます。
text
選択可能なテキストを示す。多くはI字型(I-beam)で描画。 UAは横書き要素では縦I字カーソル、縦書き要素では横I字カーソル (vertical-text キーワードと同じ)を自動表示しなければならず、 transform([CSS-TRANSFORMS-1])やSVG2のパス上テキスト (SVG 2 §11.8 Text on a path)も考慮してよいです。 角度付きI字カーソルも任意で描画できます。
vertical-text
選択可能な縦書きテキストを示す。 多くは横I字型で描画されます。
ドラッグ&ドロップカーソル
alias
何かのエイリアスやショートカットが作成されることを示します。 多くは小さい曲線矢印付き矢印で描画されます。
copy
何かがコピーされることを示します。 多くは小さいプラス記号付き矢印で描画されます。
move
何かが移動されることを示します。
no-drop
ドラッグしたアイテムが現在のカーソル位置にドロップできないことを示します。 多くは禁止マーク付き手やポインターで描画されます。
not-allowed
要求された操作が実行されないことを示します。 多くは禁止マークで描画されます。
grab
何かを掴める(ドラッグして移動できる)ことを示します。 多くは開いた手の甲で描画されます。
grabbing
何かを掴んで(ドラッグして移動中)であることを示します。 多くは指を閉じた手の甲で描画されます。
リサイズ・スクロールカーソル
e-resize, n-resize, ne-resize, nw-resize, s-resize, se-resize, sw-resize, w-resize
何らかの端が動かされることを示します。 例えば se-resize カーソルは ボックスの南東端から動かし始める際に使われます。
ew-resize, ns-resize, nesw-resize, nwse-resize
双方向リサイズカーソルを示します。
col-resize
アイテムや列が水平にリサイズできることを示します。 多くは左右矢印+中央棒で描画されます。
row-resize
アイテムや行が垂直にリサイズできることを示します。 多くは上下矢印+中央棒で描画されます。
all-scroll
任意方向にスクロールできることを示します。 多くは上下左右矢印+中央点で描画されます。
ズーム系カーソル
zoom-in, zoom-out
何かがズーム(拡大・縮小)できることを示します。 多くは中央に「+」や「-」記号のある虫眼鏡で描画されます。 zoom-inzoom-out に対応します。
複数のカーソル値を使う例:
:link,:visited {
    cursor: url(example.svg#linkcursor),
      url(hyper.cur),
      url(hyper.png) 2 3,
      pointer
}

この例では、すべてのハイパーリンク(訪問済みかどうかに関係なく)のカーソルを外部SVG cursor に設定しています。 SVGカーソルに対応しないUAは次の値「hyper.cur」に進みます。 それも未対応なら「hyper.png」カーソル(ホットスポット指定)を使います。 どれも未対応なら最後に pointer カーソルを描画します。

5.1.1.1. キャンバスのカーソル

文書の キャンバス は、文書が描画される無限の表面です [CSS21]。 キャンバスに対応する要素は存在しないため、 どの要素上でもない時にカーソルをスタイリングできるよう、 キャンバスのカーソルはルート要素のカーソルを再利用します。 ただし、ルート要素にボックスが生成されない場合 (例: ルート要素が display: none の場合)、 キャンバスのカーソルはプラットフォーム依存のデフォルトカーソルになります。

注: 要素が不可視でもボックスが生成される場合があります。 例えば visibility: hidden だが display: none ではない場合などは ボックスが生成され、そのカーソルがキャンバス用として使われます。

5.2. 挿入カーソル

5.2.1. 挿入カーソルの色指定: caret-color プロパティ

名前: caret-color
値: auto | <color>
初期値: auto
適用対象: すべての要素
継承: する
パーセンテージ: N/A
算出値: auto の算出値は auto です。 <color> の値については [CSS-COLOR-4] の [[!CSS-COLOR-4#resolving-color-values]] を参照してください。
正規順序: 構文に準ずる
アニメーション型: 算出値による
auto
ユーザーエージェントは currentColor を使用するべきです。 周囲のコンテンツとの視認性やコントラストを確保するため、caretの色を自動的に調整しても構いません。 例えば currentColor、背景、影などを考慮する場合があります。

注: caret-shapeblock の場合は、 より良い視認性・コントラストのために currentColor 以外のUAが決定した色が推奨されます。

<color>
挿入カーソルの色を指定した色にします。

caretは、ユーザーがテキスト(または他のコンテンツ)を挿入する際の挿入ポイントを示す可視インジケータです。このプロパティは、その可視インジケータの色を制御します。

注: UAによっては「カーソル」とみなされるものが他にもあります。 例えば、一部UAでは「ナビゲーションカーソル」を表示可能で、これは挿入カーソルに似ていますが、非編集テキスト内で移動でき、機能としてはカーソルです。 一方、cursor プロパティが auto のときや cursor プロパティが textvertical-text の要素上で表示されるカーソル画像は caretに似ていてもカーソルであり、caretそのものではありません。

例:caret-color:#00aacc; を指定した textarea

5.2.2. 挿入カーソルの形状: caret-shape

名前: caret-shape
値: auto | bar | block | underscore
初期値: auto
適用対象: 入力を受け付ける要素
継承: する
パーセンテージ: N/A
算出値: 指定キーワード
正規順序: 構文に準ずる
アニメーション型: 算出値による

このプロパティでは、テキスト挿入カーソルの形状を指定できます。

この定義において、character[UAX29] で定義される 拡張書記素クラスタ を指し、 visible character は非零のadvance measureを持つ文字を意味します。

auto
UAがcaretの形状を決定します。 プラットフォーム慣習に合わせるべきで、文脈によって調整される場合があります。 例えば、ユーザーがキーボードの insert キーを押して挿入モードと上書きモードを切り替える場合、 挿入モードでは bar caret、上書きモードでは block caretを表示することがあります。
bar
UAは、テキスト挿入カーソルを挿入ポイントに細いバーとして描画しなければなりません。 これは character の間・前・後に現れますが、文字上には現れません。 インライン進行方向に垂直で描画すべきですが、イタリックや斜体テキストでは斜めに描画しても構いません。
block
UAは、テキスト挿入カーソルを挿入ポイントの次の visible character を重ねる矩形として描画しなければなりません。 挿入ポイントの後に visible character がなければ、最後の visible character の後にcaretを描画します。 イタリックや斜体テキストでは斜めの矩形でも構いません。
underscore
UAは、テキスト挿入カーソルを挿入ポイントの次の under[CSS-WRITING-MODES-3] で定義)に細い線として描画しなければなりません。 挿入ポイントの後に visible character がなければ、最後の visible character の後にcaretを描画します。

blockunderscore caretの幅は、挿入ポイントの次の visible character のadvance measureか、次の visible character がない・判定困難な場合は 1ch になります。

caretの向きや見た目を決定する際、UAは writing mode [CSS-WRITING-MODES-3] を考慮し、[CSS-TRANSFORMS-1] の変形も適用しなければなりません。 編集テキストがパス上にレイアウトされている場合(SVGの textPath 要素など)も考慮すべきです。

barunderscore caret、および同様の描画となる auto caretの太さは、ユーザーエージェントが決定します。 可能であれば、transform [CSS-TRANSFORMS-1] などでスケールダウンされてもcaretが視認可能な太さを選ぶべきです。

caretの重なり順は以下の制約下で未定義とします:

各caret形状の典型的な見た目を示します。 下記サンプルでは挿入ポイントが「u」と「m」の間です。
caret-shape サンプルレンダリング あなたのブラウザ
(各セルをフォーカスするとcaretが表示)
bar Lorem ipsum Lorem Ipsum
block Lorem ipsum Lorem Ipsum
underscore Lorem ispum Lorem Ipsum
underscoreblock caretは、ターミナルやコマンドラインでよく使用されます。 以下の例を参照してください。
.console {
  caret-shape: underscore;
  background: black;
  color: white;
  font-family: monospace;
  padding: 1ex;
}

下記のシミュレーションレンダリングは、どのように表示されるべきかを示しています。

user@host:css-ui-4 $ ls -a
. .. Overview.bs Overview.html
user@host:css-ui-4 $  

下の要素をフォーカスすると、あなたのブラウザでどのように描画されるか確認できます。

user@host:css-ui-4 $ ls -a
. .. Overview.bs Overview.html
user@host:css-ui-4 $

5.2.3. 挿入カーソルのショートハンド: caret

名前: caret
値: <'caret-color'> || <'caret-shape'>
初期値: auto
適用対象: 入力を受け付ける要素
継承: する
パーセンテージ: N/A
算出値: 各プロパティを参照
アニメーション型: 各プロパティを参照
正規順序: 構文に準ずる

このプロパティは、caret-color および caret-shape を1つの宣言で設定するショートハンドです。 省略された値は初期値が適用されます。

5.3. キーボード操作

名前: nav-up, nav-right, nav-down, nav-left
値: auto | <id> [ current | root | <target-name> ]?
初期値: auto
適用対象: 有効なすべての要素
継承: しない
パーセンテージ: N/A
算出値: 指定通り
正規順序: 構文に準ずる
アニメーション型: 離散値
auto
ユーザーエージェントが方向ナビゲーション入力に応じて、どの要素にフォーカスを移すか自動で決定します。
<id>
<id> の値はIDセレクターです [SELECT]。 そのプロパティに対応する方向ナビゲーション入力により、最初に一致する要素にツリー順でフォーカスが移ります。

これが現在フォーカスされている要素を指す場合、対応するnav-プロパティの入力は無視されます(同じ要素に再度フォーカスする必要はありません)。

一致する要素がない場合、ユーザーエージェントが自動でフォーカス先を決定します。

フォーカスが本来フォーカス可能でない要素に移った場合、方向ナビゲーションの結果としてのみフォーカス可能となり、 その間 :focus 疑似クラスはマッチします。

注: 「本来フォーカス可能でない」要素については、他の選択肢(例えばドキュメントツリー内で次のフォーカス可能要素に移る、こうした要素の子孫も含む)が検討されています。 こうした選択肢へのフィードバック(実装・著者経験含む)を歓迎します。

<target-name>
<target-name> パラメーターはフォーカスナビゲーションのターゲットフレームを示します。 <string> で、先頭に "_" は付けてはいけません。 エラー処理:もし "_" で始まる場合 "_parent" は親フレーム、"_root" は root として扱い、 その他は名前でフレームがあればそこに移ります。 指定されたフレームが存在しない場合、そのパラメータはキーワード current として扱われ、 つまりその要素が属するフレームで使います。 キーワード root はUAが全ウィンドウをターゲットにすることを示します。

方向ナビゲーションキーを持つデバイス向けUAは、4つのnav-*方向ナビゲーションプロパティ(nav-up, nav-right, nav-down, nav-left)に従いフォーカスを移動します。 本仕様では、どのキーが方向ナビゲーションキーかは定義しません。

注: 一般的なPCのキーボードには4つの矢印キーがあります。 一つの実装例として、これら4つの矢印キーで方向ナビゲーションを行うことが考えられます。 アクセシビリティや利便性のため、UAはどのキーを方向ナビゲーションに使うかを設定可能にすべきです。

5.3.1.1. 例:配置されたボタン

この例は、ボタンがひし形に配置されていて、 方向フォーカスナビゲーションが設定されていることで、 ユーザーが方向キーで移動すると、ひし形の周囲を時計回り(または反時計回り)にフォーカスが移動するようになっています。

button { position:absolute }

button#b1 {
  top:0; left:50%;
  nav-right:#b2; nav-left:#b4;
  nav-down:#b2; nav-up:#b4;
}

button#b2 {
  top:50%; left:100%;
  nav-right:#b3; nav-left:#b1;
  nav-down:#b3; nav-up:#b1;
}

button#b3 {
  top:100%; left:50%;
  nav-right:#b4; nav-left:#b2;
  nav-down:#b4; nav-up:#b2;
}

button#b4 {
  top:50%; left:0;
  nav-right:#b1; nav-left:#b3;
  nav-down:#b1; nav-up:#b3;
}

ボタンのマークアップ順序がどうなっていても (この例では指定していません)、 配置されているので関係ありませんが、 指定されたレイアウトに合理的なフォーカスナビゲーション動作を保証することは重要です。

5.3.1.2. 例:フレーム内へのフォーカス移動

特定のフレーム内の要素にフォーカスを移動するには、要素のidとフレーム名の両方が必要です。

この例は、id "foo" のボタンから左にナビゲーションすると、フレーム名 "sidebar" 内のid "bar" の要素にフォーカスが移動する方法を示しています。

button#foo { nav-left: #bar "sidebar"; }

5.3.2. 廃止: ime-mode プロパティ

ime-mode プロパティは一部のブラウザーで部分的に実装されていますが、 問題があり、本仕様および前版 [CSS-UI-3] で公式に廃止されています。

これら実装の非互換性のドキュメントがあります。

ユーザーエージェントは ime-mode プロパティをサポートすべきではありません。

著者は ime-mode プロパティを使用してはなりません。

ユーザーは、悪質なサイトやレガシー実装への回避策が必要な場合のみ 修復目的で ime-mode プロパティを使うことができます。 例:ユーザースタイルシートで次のようなルールを記述

例:ユーザー設定
input[type=password] {  ime-mode: auto !important;
}

この例のCSSは、ユーザースタイルシートに記述することでパスワード入力フィールドの挙動をデフォルトに強制できます。

本仕様では、レガシーの ime-mode 実装の機能や具体的なサポート内容を意図的に記載していません。 そのような仕様を追求したり推薦する意味がないためです。

注:著者がユーザーエージェントにより良い入力体験を提供できるよう、情報を提供するために使うべき [HTML5] の機能が複数あります:

6. ユーザーインタラクション

6.1. コンテンツ選択の制御

user-select プロパティは、文書中のどの要素がユーザーによって選択可能か、その方法を著者が指定できます。 これにより、すべての要素が同等に選択の価値があるわけではない場合でも、より便利な操作が可能となり、 隣接するコンテンツの誤選択を防ぐことができます。

名前: user-select
値: auto | text | none | contain | all
初期値: auto
適用対象: すべての要素、およびオプションで ::before::after 疑似要素
継承: しない
パーセンテージ: n/a
算出値: 指定キーワード
正規順序: 構文に準ずる
アニメーション型: 離散値

ユーザーエージェントは user-select プロパティを ::first-line および ::first-letter 疑似要素には適用してはなりません。

注: UAは ::before および ::after 疑似要素にこのプロパティを適用しても構いません。 その場合、auto 値はこれらの疑似要素上の used valuenone にマッピングしますが、他の値も指定可能です。 これは生成コンテンツが選択・コピー不可という従来の挙動を維持しますが、 例えばこの仕様書の課題番号のように、コンテンツ生成に使われる場合は選択・コピー可能になることが期待されます。可能な限り、 著者は生成コンテンツを装飾目的以外で使うことを避け、 すべてのコンテンツをDOMに含めるべきです。 この機能はリスクがあります。

user-select を none 以外にできる場合、コピーやDOM APIへの意味づけを要検討。

このメカニズムで疑似要素の生成コンテンツが選択可能になった場合、 UAは検索機能でそのコンテンツも対象にすべきです。

::markerpage-margin boxes にも適用すべきか? auto の used value も none にすべきか、text が適切か?

used valuecomputed value と同じですが、例外:

  1. editable element では used valuecontain である(computed value に関係なく)
  2. computed valueauto の場合、 used value は下記いずれか

本仕様でいう editable element とは、 editing host または mutable なテキストコンテンツを持つフォームコントロール (例:textarea)。

editing host の編集可能な子孫要素で used value がどうなるか制約すべきか? セマンティクスは明確でない。 例えば nonetext にマッピングすべきか、 あるいは全ての値を text にすべきか?

auto
autoused value は以下の通り決定:

注: この非継承プロパティで初期値が auto で、used value が親要素によって決まるという特殊な組み合わせにより、 実質的な選択的継承が可能になります。 これは当初IEによって提案され、contain 値が継承されないという挙動を導入するためでした。

text
要素は選択に制約を加えません。
none
UAはこの要素で選択を開始できないようにしなければなりません。

この要素外で開始した選択は、この要素で終わってはならず、 そのような選択をユーザーが作ろうとした場合、UAは選択範囲を要素境界で終了させなければなりません。

注: 執筆時点では、実験的実装ごとに挙動が異なります。 Firefoxは本仕様通り。 ChromeとSafariはほぼ同様だが、要素の後から選択を始めてさかのぼって要素に入る場合のみ仕様通りで、 要素の前から始めて中に入る場合は all として要素全体が選択されます。 IEはこの要素外からの選択が要素内に入ることを制限しません。 また、ChromeとSafariでは user-select: none 内で選択を開始し、外で終わらせる場合、要素境界から終点まで選択が作られます。 FirefoxとInternet Explorerは本仕様通り選択自体が作られません。

ただし、この要素の子孫で used valueuser-selectnone 以外の場合、 それら子孫内で選択開始と終了があれば選択可能です。

UAはこの要素をまたぐ選択は許可し、要素自体は選択範囲から除外しなければなりません。 ただし複数範囲選択をサポートしないUAはこの要素を含めてもよいです。 子孫で used valueuser-selectnone 以外の場合、 それら子孫は選択範囲に含める必要があります。本仕様はクリップボードの挙動について規範的要求はありませんが、 UAはコピーする内容と視覚的選択範囲が一致するようにすることが推奨されます。 未選択のテキストがコピーされたり、逆に選択されているのにコピーされないとユーザーに混乱を招きます。

user-select が none の要素内で選択開始(クリックやドラッグ)しても、既存の選択解除や影響を与えてはなりません。

user-select はコピー保護ではなくUI利便性のための仕組みなので、 UAは user-selectnone でも 明示的にテキスト選択できる代替手段を提供しても構いません。

注: none はコピー保護機構ではなく、著者がUI要素の選択を無効化してユーザーが必要なコンテンツを選びやすくするためのものです。 UAはこれを回避する手段を提供することが許され、非対応UAやユーザースタイルシートで無効化も容易です。 むしろ選択性を制約しすぎることでユーザーの利便性が損なわれるため、バリデータやデバッガ等は誤用や濫用を検出・警告すべきです。

著者はユーザーに不必要な制約をかけないよう注意すべきです。 例えば、ルート要素に user-select: none を設定し、選択可能な一部の要素だけ制限解除すると 以下のような不便が生じます:
  • 空白部分をクリックして選択解除できなくなる

  • 選択可能にすべき箇所の見落としが生じる

  • 後から追加した要素が選択不可のままになる可能性

  • ユーザーが辞書や翻訳ツール、検索等で主要コンテンツ以外のテキストを選択したい場合がある

むしろ誤選択が発生しやすい要素のみ user-select: none を適用し、 それ以外は選択可能なままにしておく方がユーザーの利便性を損ないません。

contain
UAはこの要素内で開始した選択が外に拡張されないようにしなければなりません。

この要素外で開始した選択は、この要素で終わってはならず、 そのような選択をユーザーが作ろうとした場合、UAは選択範囲を要素境界で終了させなければなりません。

UAはこの要素をまたぐ選択は許可し、その選択には要素の内容が含まれなければなりません。

注: 執筆時点では、実験的実装ごとに外からの選択や要素内への選択について挙動が異なります。 多くのブラウザーで contain を明示的にサポートしなくても textarea や contenteditable要素で挙動を観察できます。

注: この機能はIEで user-select: element として実験的に導入されたものです。

all
要素の内容は一括選択されなければなりません: 要素の一部が選択範囲に含まれる場合、要素全体(子孫含む)を選択範囲に含める必要があります。 要素が選択され、親要素の used valueuser-selectall の場合、 再帰的に親も選択範囲に含めなければなりません。

子孫で used valueuser-selectall 以外の場合、選択が子孫内だけで完結していればその要素全体を含めなくてよい。

注: 選択範囲にはテキストだけでなく画像・表・動画なども含めることができます。 コピー&ペースト時の挙動は本仕様の範囲外です。

HTML用UAスタイルシートに以下を追加します:

button, meter, progress, select { user-select: none; }

上記リストは不完全で、 特に input の各種ボタン型を含める必要があります。

レガシーコンテンツとの互換性のため、 user-select をサポートするUAは -webkit-user-select もエイリアスとしてサポートしなければなりません。

注: このエイリアス機構の詳細はUAに任されます。 -webkit-user-selectuser-select のショートハンドプロパティにするのは効果が高いため、新規実装者は検討すべきです。 ただし -webkit-user-select を他の方法で user-select のエイリアスとしてサポートするUAも存在し、 互換性には問題がないため、本仕様は柔軟性を認めます。

7. ウィジェットのスタイリング

7.1. ウィジェットのアクセントカラー: accent-color プロパティ

名前: accent-color
値: auto | <color>
初期値: auto
適用対象: すべての要素
継承: する
パーセンテージ: N/A
算出値: キーワード auto または算出色
正規順序: 構文に準ずる
アニメーション型: 算出値型による

ユーザーインターフェイスコントロールは、一般的に統一されたビジュアルスタイルで設計されています。 多くのプラットフォーム(すべてではありません)では、 ビジュアルスタイルに アクセントカラー(通常は明るく、背景や前景色と強くコントラストする色)が含まれます。 すべてのコントロールがすべての状態で アクセントカラー を使用するわけではありませんが、 コントロールのカラースキームの重要な要素です。

accent-color CSSプロパティは、要素によって生成されるユーザーインターフェイスコントロールのための アクセントカラー を著者が指定できます。 値の意味は以下の通りです:

auto
UAが選択する色で、可能ならプラットフォームの アクセントカラー に合わせるべきです。
<color>
アクセントカラー として使う色を指定します。

UAは指定された accent-color で、コントロールのうちアクセントカラーが使われる部分を描画するべきです。 UAはコントラスト(可読性)を維持するために、色の輝度や明度を調整したり、 他の箇所の色を置換(例:重ねたグリフの colorbackground-color に切り替えるなど)してもよいです。 また、グラデーション等のために色バリエーションを生成し、プラットフォーム慣習に合わせた使い方をしてもかまいません。

ラジオボタンは通常円形で、チェック状態を表す「ドット」が重ねられます。 あるビジュアルスタイルでは、チェック状態に アクセントカラー を使います: 円背景に使う場合もあれば、前景に使う場合もあります。

いずれの場合も、accent-color プロパティで該当部分をスタイリングします。 ラジオボタンに アクセントカラー を使わないスタイルの場合は、accent-color の効果はありません。

以下は、青色の accent-color で適合描画されたラジオボタンの例です:

プラットフォーム サンプル 備考
Firefox 79 / Win 未選択:白塗り黒枠の円。 選択:白塗り黒枠の円に黒塗りの円(ドット)が重なる。 アクセントカラー 未使用。
Chrome 81 / Win 未選択:薄灰色の円形バブル。 選択:薄灰色バブルに濃灰色の円が重なる。 アクセントカラー 未使用。
Safari / Snow Leopard 未選択:無色透明な3D風ガラスバブル。 選択:淡青色の3D風バブルに小さな黒ドット。 チェック状態の背景グラデーション生成にアクセントカラー使用。
Safari 13 / Mac / Light 未選択:薄灰色の影付き円。 選択:明るい青塗り円に白ドロップシャドウ付き小ドット。 チェック状態の前景にアクセントカラー使用。
Safari 13 / Mac / Dark 未選択:暗灰色の円(浮彫状だが凸面)。 選択:明るい青塗り円(浮彫状)、小さな白ドット重ね。 チェック状態の前景にアクセントカラー使用。
Chrome 83 / Win / Light 未選択:暗灰色の空円。 選択:明るい青枠円、同心円状の青塗り円重ね。 チェック状態の前景にアクセントカラー使用。
Chrome 83 / Win / Dark 未選択:薄灰色円に濃灰色塗り。 選択:明るいパウダーブルー枠円、同心円状パウダーブルー塗り円重ね。 ダークモード背景に合わせてコントラスト調整したチェック状態の前景アクセントカラー。

7.2. 外観の切り替え: appearance プロパティ

名前: appearance
値: none | auto | textfield | menulist-button | <compat-auto>
初期値: none
適用対象: すべての要素
継承: しない
パーセンテージ: n/a
算出値: 指定キーワード
正規順序: 構文に準ずる
アニメーション型: 離散値

文書中のほとんどの要素の外観はCSSで完全に制御できますが、ウィジェットは通常、UAがホストOSのネイティブUIコントロールを使って描画するため、CSSで再現・スタイリングできません。

この仕様での ウィジェット とは、ネイティブ外観 を持つ要素を指します。 これは、ホストOSやプラットフォームのネイティブウィジェットやコントロールのように描画されるか、CSSで表現できない外観や操作性を持つことを意味します。 どの要素が ネイティブ外観 を持つかは、ホスト言語(例: HTML [HTML])が決定します。

この仕様は appearance プロパティを導入し、 この挙動の一部を制御できるようにします。 特に、appearance: none を使うことで ネイティブ外観 を持つ ウィジェットの外観を抑制し、 CSSで再スタイリングできるようにします。

この機能の歴史的経緯について

これは多くのブラウザでプレフィックス付きで存在していました。 標準化前は none の他に、要素の外観ごとに非常に多くの値がありました。 各値がフォームコントロールに固有の外観を与え、そのリストはブラウザごとに異なりました。

CSSワーキンググループは、これを標準化するのは非現実的と判断しました。 一因は多くの値が、他ブラウザに存在しない疑似要素にも適用されていたこと、 またフォーム要素の構築方法が異なるためです。 プラットフォームごとにフォームコントロールの外観が大きく異なる能力は保持すべきです。

また、任意の要素(フォームコントロールも含め)を他の任意のフォームコントロールに変える能力は誤った機能と考えられています。

代わりに、「auto」値でフォームコントロールを必要な外観にし、「none」値で ネイティブ外観 を抑制するシンプルなモデルを採用しました。

ただし、これだけではWeb互換性に課題があることが判明しました。 例:以下のような使い方

input { appearance: none; }
input[type=checkbox] { appearance: checkbox; }

この仕様の設計は、none | auto モデルの簡潔さを保ちつつ、 既存コンテンツとの互換性のために追加キーワードを少数だけ認めるという妥協案です。

互換性維持に必要なキーワードの正確なリストや挙動は、将来の仕様バージョンで調整される可能性があります。 CSS-WGはフィードバックを歓迎します。

none
要素は通常のCSSルールに従って描画されます。 ウィジェット以外の置換要素は影響を受けず、引き続き置換要素です。ウィジェットネイティブ外観 を持たないこと。 詳細は § 7.2.1 外観の装飾的側面への影響 および § 7.2.2 外観のセマンティック側面への影響 を参照。
auto
ウィジェットネイティブ外観 を持ってよい。

ウィジェット以外の要素は none を指定した場合と同じ描画になります。

textfield
input 要素で type 属性がSearch状態なら、 通常のテキスト入力ウィジェットとして描画されます(Text状態と同様)。

それ以外の要素では auto と同じ効果です。

menulist-button
ドロップダウンボックス select 要素では、ドロップダウンボックス(ドロップダウンボタン付き)として描画されますが、 必ずしもOSのネイティブコントロールを使う必要はありません。 こうした要素では、colorbackground-colorborderauto の場合は無視されることがある)などは無視されません。

それ以外の要素では auto と同じ効果です。

<compat-auto>
これらは以前の非標準版プロパティ用の互換性維持値です。 すべて auto と同じ効果です。
<compat-auto> =  searchfield | textarea | push-button | slider-horizontal | checkbox | radio | square-button | menulist | listbox | meter | progress-bar | button 

auto が広くサポートされたら、そちらの使用を推奨。

Web互換に不要な値はこのリストから除外、必要な値が漏れていれば追加すべき。

互換性のため、これらの値の一部を任意要素で有効にすべき場合や、ウィジェットに副作用を持たせるべき場合があるかもしれません。

slider-vertical および sliderthumb-vertical は一部UAで <input type=range> 要素の向きを変更するためにサポートされています。 これらの値は、コントロールの向きを別機構で変更する方がよいため、この仕様では定義されていません。 issue whatwg/html#4177 を参照してください。
HTMLのチェックボックスの見た目をカスタマイズしたい場合、次のようにできます:
input[type=checkbox] {
  all: unset; /* このショートハンドは appearance: none も含めてリセット */
  width: 1em;
  height: 1em;
  display: inline-block;
  background: red;
}
input[type=checkbox]:checked {
  border-radius: 50%;
  background: green;
}
input[type=checkbox]:focus-visible {
  outline: auto;
}

<input type="checkbox"> のように描画され、 <input type="checkbox" checked> のように描画され、 通常通り(例えばクリックで)状態が切り替わります。

算出値が ウィジェットautotextfieldmenulist-button、 または <compat-auto> の値のいずれかの場合、 UAは本来の外観を維持するため、またはその外観で意味がない場合、 一部CSSプロパティを無視してもよいですが、以下のプロパティは無視してはなりません:

他に追加すべきプロパティはあるか?削除すべきか?無視してよいものをホワイトリスト化するべきか?いずれにせよ、UAは ウィジェット 描画時に一部プロパティを無視するため、本仕様で何らかの指針が必要。

レガシーコンテンツ互換のため、UAは -webkit-appearanceレガシー名エイリアス として appearance のエイリアスとしてもサポートしなければなりません。

7.2.1. appearance が要素の装飾的側面に与える影響

ウィジェット のCSSスタイルルールによらない全ての装飾的視覚要素は、 appearance によって外観が変更された場合、抑制されなければなりません。 これはUAの内部表現が複数要素や疑似要素の組み合わせで構成されている場合でも同様です。

例:[HTML] select 要素は、リストがクリックで展開されることを示す右側の矢印で描画されることが多いですが、 appearance の算出値が select 要素で none の場合は、この矢印は消えなければなりません。

UAは、ウィジェットappearancenone の場合、 認識しやすい形状を与えるようにUAスタイルシートでスタイルルールを付与すべきです。

注: 著者は意図したスタイリングを実現するため、これらUAスタイルルールを上書きする必要がある場合があります。

著者は all: unset を利用して、 完全に未スタイル化された ウィジェット にし、 UAスタイルシートの干渉なく自由にスタイリングできて便利ですが、 これにより同じUAスタイルシートによるフォーカス指標も抑制されてしまいます。 アクセシビリティを損なわないために、 このような場合はフォーカス指標を復元し、 例えば :focus-visible { outline: auto; } などを使用すべきです。

7.2.2. appearance が要素のセマンティック側面に与える影響

UAは、ウィジェット の元のセマンティクスで操作に必要な側面は保持しなければなりません。 見た目が変わっても、ウィジェット の操作が可能な限り許容されます。 ウィジェット の状態を観察するために必要なだけで、操作には不要な側面は、 同じ情報が通常のCSSで伝えられるなら抑制すべきです。 ドキュメント言語は、それぞれが定義する ウィジェット について、 保持すべき内容を指定するものとします。

例:<input type=range> のスライダーは、 appearancenone でも (または同等のメカニズムで)保持されます。 そうしないとマウスやタッチ操作で値変更できなくなるためです。

一方、<input type=checkbox checked> のチェックマークは単に状態を示すだけなので抑制されるべきです。 この状態は :checked セレクターで様々な方法でスタイリングできます。

要素の挙動やセマンティクスはドキュメント言語で定義されており、このプロパティによって影響されません。

例:appearance の算出値に関わらず、

逆に、要素の appearance を変更しても、 そのappearanceで典型的なセマンティクス・疑似クラス・イベントハンドラ等を獲得してはなりません。

例::enabled:disabled は、 div 要素に appearance: button を指定してもマッチしません。 また、要素がフォーカス可能かどうかも appearance プロパティでは変わりません。

7.3. コントロール固有のルール

このセクションの一部または全部は、将来的に [HTML] の仕様に移すべきかもしれません。

一部の要素では、特定プロパティを設定すると appearance: auto が阻害されます。 例えば appearanceauto の場合でも、 ボタンに border を設定するとネイティブ外観が失われます。 これは auto の定義と矛盾しませんが、 appearance: auto はUAがネイティブ外観を使うことが「できる」だけであり、 より高い相互運用性のためには、 どの要素のどのプロパティにこの効果があるか文書化すべきです。

UAがUAスタイルシートに何を入れる必要があるか文書化すると良いでしょう。

7.3.1. 単一行のテキスト入力コントロール

appearanceauto の場合、 [HTML]<input type=text> などの単一行テキスト入力コントロールは、以下のように描画されなければなりません:


付録A. 謝辞

この付録は 参考情報 です。

この仕様は [CSS-UI-3] に基づいており、 編集・執筆の大部分は 1999年から現在までTantek Çelikによるもので、 当初はMicrosoftの代表として、次に招待専門家として、 最近はMozillaの代表として活動しています。

以下の方々からのフィードバックや貢献に感謝します:Rossen Atanassov, Tab Atkins, L. David Baron, Bert Bos, Matthew Brealey, Rick Byers, Ada Chan, James Craig, Michael Cooper, Axel Dahmen, Michael Day, Micah Dubinko, Elika E., Steve Falkenburg, Andrew Fedoniouk, Al Gilman, Ian Hickson, Bjoern Hoehrmann, Alan Hogan, David Hyatt, Richard Ishida, Sho Kuwamoto, Yves Lafon, Stuart Langridge, Susan Lesch, Peter Linss, Kang-Hao Lu, Masayuki Nakano, Mats Palmgren, Brad Pettit, Chris Rebert, François Remy, Andrey Rybka, Simon Sapin, Alexander Savenkov, Sebastian Schnitzenbaumer, Lea Verou, Etan Wexler, David Woolley, Frank Yan, Boris Zbarsky, および Domel

付録B. 変更点

この付録は 参考情報 です。

2020年1月24日作業草案 からの変更点

いくつかの編集調整に加え、以下の規範的変更が行われました:

2020年1月2日作業草案 からの変更点

いくつかの編集調整に加え、以下の規範的変更が行われました:

2017年12月22日作業草案 からの変更点

いくつかの編集調整に加え、以下の規範的変更が行われました:

2015年9月22日 初公開草案 からの変更点

いくつかの編集調整に加え、以下の規範的変更が行われました:

付録C. セキュリティとプライバシーの考慮事項

この付録は 参考情報 です。

W3C TAGでは仕様編集者向けの セキュリティ・プライバシー自己点検質問票 を作成中です。

検討すべき質問 に従い:

この仕様は個人識別情報を扱いますか?
いいえ。
この仕様は高価値データを扱いますか?
いいえ。
この仕様はoriginごとにセッションをまたいで持続する新しい状態を導入しますか?
いいえ。
この仕様は永続的かつクロスオリジンな状態をWebに公開しますか?
いいえ。
この仕様はoriginが現在アクセスできない他のデータにアクセス可能にしますか?
いいえ。
この仕様は新しいスクリプト実行/ロード機構を導入しますか?
ロードについてははい、実行についてはいいえ。

cursor プロパティは <image> 値を受け付け、URLロードを伴う場合があります。 これにはスクリプトを含む可能性のあるSVG文書も含まれますが、本仕様ではスクリプトの実行を禁止しています。

この仕様はoriginがユーザーの位置情報にアクセスできるようにしますか?
いいえ。
この仕様はoriginがユーザーのデバイスのセンサーにアクセスできるようにしますか?
はい。

方向フォーカスナビゲーションプロパティは、矢印キーなどのデバイスのキーボードナビゲーション入力機構へのアクセスを間接的に可能にします。

この仕様はoriginがユーザーのローカルコンピューティング環境の側面にアクセスできるようにしますか?
いいえ。
この仕様はoriginが他のデバイスにアクセスできるようにしますか?
いいえ。
この仕様はoriginがUAのネイティブUIの一部を制御できるようにしますか?
はい。

cursorcaret プロパティおよび サブプロパティによって、 UAのネイティブUI上のカーソルやテキスト挿入カーソルの表示をページで変更できます。 また outline-style プロパティの auto 値 (および outline のショートハンド)により、 任意の要素にネイティブ風のフォーカスアウトラインを表示することも可能です。

appearance プロパティも、ネイティブスタイルを無効化しCSSによるスタイリングに置き換えることができます。

この仕様は一時的な識別子をWebに公開しますか?
いいえ。
この仕様はファーストパーティ・サードパーティの文脈で挙動を区別しますか?
いいえ。
この仕様はUAの「シークレット」モードでどのように動作すべきですか?
通常通りです。
この仕様はユーザーのローカルデバイスにデータを保存しますか?
いいえ。
この仕様は「セキュリティの考慮事項」および「プライバシーの考慮事項」セクションを持ちますか?
はい。
この仕様はデフォルトのセキュリティ特性をダウングレード可能としますか?
いいえ。

付録D. HTML用デフォルトスタイルシート追加

この付録は 参考情報 です。

HTMLフォームコントロールやいくつかの動的表示属性を表現するための、基本スタイルシートへの追加例:

:enabled:focus {
  outline: 2px inset;
}

button,
input[type=button],
input[type=reset],
input[type=submit],
input[type=checkbox],
input[type=radio],
textarea,
input,
input[type=text],
input[type=password],
input[type=image] {
  display: inline-block;
}

input[type=button],
input[type=reset],
input[type=submit],
input[type=checkbox],
input[type=radio],
input,
input[type=text],
input[type=password],
input[type=image] {
  white-space: nowrap;
}

button {
  /* 特に BUTTON タグの空白の扱い */
  white-space:normal;
}

input[type=reset]:lang(en) {
  /* HTML input type=reset ボタンのデフォルト内容(言語ごと) */
  content: "リセット";
}

input[type=submit]:lang(en) {
  /* HTML input type=submit ボタンのデフォルト内容(言語ごと) */
  content: "送信";
}

/* UA は他の言語用に言語別 Reset/Submit ルールを用意すべき */

input[type=button],
input[type=reset][value],
input[type=submit][value] {
  /* HTML input ボタンのテキスト内容/ラベル */
  content: attr(value);
}

textarea {
  /* 特に TEXTAREA タグの空白の扱い */
  white-space:pre-wrap;
  resize: both;
}

input[type=hidden] {
  /* 特定の HTML 隠しテキストフィールドの外観 */
  display: none !important;
}

input[type=image] {
  content: attr(src,url);
  border: none;
}

select[size] {
  /* HTML4/XHTML1 <select> size>1 の場合 - リスト外観 */
  display: inline-block;
  height: attr(size,em);
}

select,select[size=1] {
  /* HTML4/XHTML1 <select> size 未指定または size=1 - ポップアップメニュー */
  display: inline-block;
  height: 1em;
  overflow: hidden;
}

select[size]:active {
  /* アクティブな HTML <select>  size>1 - アクティブリスト外観 */
  display: inline-block;
}

optgroup, option {
  display: block;
  white-space: nowrap;
}

optgroup[label],option[label] {
  content: attr(label);
}

option[selected]::before {
  display: inline;
  content: check;
}

/* FRAMEのリサイズは本仕様で直接扱っていないが、
   以下のルールで合理的な挙動の近似を与えられる場合がある。 */

/*

frame { resize:both }
frame[noresize] { resize:none }

*/

適合性

文書規約

適合性要件は、記述的な断言と RFC 2119 用語の組み合わせで表現されています。規範的な部分における “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” などのキーワードは RFC 2119 の定義に従って解釈されます。 ただし、読みやすさのため本仕様ではこれらの語は全て大文字で表記されません。

この仕様の本文は、明示的に非規範的と記載されたセクション、例、および注記を除きすべてが規範的です。 [RFC2119]

本仕様の例は「例えば」の語で始まるか、class="example" で規範文から分離して示されます。例:

これは参考情報としての例です。

参考情報の注記は「注:」で始まり、class="note" で規範文から分離して示されます。例:

注:これは参考情報の注記です。

勧告(advisement)は特別な注意を促すようにスタイルされた規範的なセクションであり、<strong class="advisement"> で他の規範文と区別されます。例: UAはアクセシブルな代替手段を提供しなければならない。

適合性クラス

本仕様への適合性は、以下の3つの適合性クラスで定義されます:

スタイルシート
CSS スタイルシート
レンダラー
UA(ユーザーエージェント)。スタイルシートの意味を解釈し、文書を描画するもの。
オーサリングツール
UA(ユーザーエージェント)。スタイルシートを書き出すもの。

スタイルシートは、本モジュールで定義された構文を使う全ての文が、 汎用CSS文法および本モジュールで定義される各機能の個別文法に従って有効であれば、本仕様に適合しています。

レンダラーは、スタイルシートを適切な仕様に従って解釈するだけでなく、 本仕様で定義された全ての機能を正しくパースし、文書をそれに従って描画することで本仕様に適合します。ただし、デバイスの制約によって文書の正しい描画ができない場合でもUAが非適合とされることはありません。(例えば、UAはモノクロモニター上で色を描画する必要はありません。)

オーサリングツールは、汎用CSS文法および本モジュールで定義される各機能の個別文法に従って文法的に正しいスタイルシートを書き出し、 かつ本モジュールのスタイルシートに関するその他の適合要件を満たす場合、本仕様に適合しています。

部分的な実装

著者が将来互換のパースルールを活用してフォールバック値を割り当てられるようにするため、 CSSレンダラーは、利用可能なサポートレベルがない atルール、プロパティ、プロパティ値、キーワードその他構文要素を無効として扱い、適切に無視しなければなりません。特に、ユーザーエージェントは一つの複数値プロパティ宣言で、未サポート値のみを選択的に無視してサポート値のみを適用してはなりません。未サポート値は無効とされるため、CSSでは宣言全体を無視する必要があります。

不安定機能・独自拡張の実装

将来の安定CSS機能との衝突を避けるため、CSSWGは ベストプラクティス に従い、不安定機能や 独自拡張を実装することを推奨します。

非実験的な実装

仕様が候補勧告段階(CR)に到達すると、非実験的な実装が可能となり、 実装者は仕様に従って正しく実装できると証明できるCRレベル機能について、 プレフィックスなしの実装をリリースすべきです。

CSSの相互運用性を確立・維持するため、CSSワーキンググループは、 非実験的CSSレンダラーがW3Cに実装報告書(必要に応じてそのためのテストケースも)を提出し、CSS機能のプレフィックスなし実装をリリースする前にレビューを受けることを求めます。提出されたテストケースは、CSSワーキンググループによりレビュー・修正される場合があります。

テストケースや実装報告書の提出方法など詳しい情報は、CSSワーキンググループのWebサイト https://www.w3.org/Style/CSS/Test/ を参照してください。 質問は public-css-testsuite@w3.org メーリングリストへ。

索引

この仕様で定義される用語

参照によって定義される用語

参考文献

規範参考文献

[CSS-BACKGROUNDS-3]
Bert Bos; Elika Etemad; Brad Kemper. CSS Backgrounds and Borders Module Level 3. 2020年12月22日. CR. URL: https://www.w3.org/TR/css-backgrounds-3/
[CSS-BOX-4]
Elika Etemad. CSS Box Model Module Level 4. 2020年4月21日. WD. URL: https://www.w3.org/TR/css-box-4/
[CSS-CASCADE-5]
Elika Etemad; Miriam Suzanne; Tab Atkins Jr.. CSS Cascading and Inheritance Level 5. 2021年1月19日. WD. URL: https://www.w3.org/TR/css-cascade-5/
[CSS-COLOR-3]
Tantek Çelik; Chris Lilley; David Baron. CSS Color Module Level 3. 2018年6月19日. REC. URL: https://www.w3.org/TR/css-color-3/
[CSS-COLOR-4]
Tab Atkins Jr.; Chris Lilley. CSS Color Module Level 4. 2020年11月12日. WD. URL: https://www.w3.org/TR/css-color-4/
[CSS-DISPLAY-3]
Tab Atkins Jr.; Elika Etemad. CSS Display Module Level 3. 2020年12月18日. CR. URL: https://www.w3.org/TR/css-display-3/
[CSS-IMAGES-3]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Images Module Level 3. 2020年12月17日. CR. URL: https://www.w3.org/TR/css-images-3/
[CSS-OVERFLOW-3]
David Baron; Elika Etemad; Florian Rivoal. CSS Overflow Module Level 3. 2020年6月3日. WD. URL: https://www.w3.org/TR/css-overflow-3/
[CSS-OVERFLOW-4]
David Baron; Florian Rivoal. CSS Overflow Module Level 4. 2017年6月13日. WD. URL: https://www.w3.org/TR/css-overflow-4/
[CSS-PAGE-3]
Elika Etemad; Simon Sapin. CSS Paged Media Module Level 3. 2018年10月18日. WD. URL: https://www.w3.org/TR/css-page-3/
[CSS-POSITION-3]
Elika Etemad; 他. CSS Positioned Layout Module Level 3. 2020年5月19日. WD. URL: https://www.w3.org/TR/css-position-3/
[CSS-PSEUDO-4]
Daniel Glazman; Elika Etemad; Alan Stearns. CSS Pseudo-Elements Module Level 4. 2020年12月31日. WD. URL: https://www.w3.org/TR/css-pseudo-4/
[CSS-SIZING-3]
Tab Atkins Jr.; Elika Etemad. CSS Box Sizing Module Level 3. 2020年12月18日. WD. URL: https://www.w3.org/TR/css-sizing-3/
[CSS-TRANSFORMS-1]
Simon Fraser; 他. CSS Transforms Module Level 1. 2019年2月14日. CR. URL: https://www.w3.org/TR/css-transforms-1/
[CSS-UI-3]
Tantek Çelik; Florian Rivoal. CSS Basic User Interface Module Level 3 (CSS3 UI). 2018年6月21日. REC. URL: https://www.w3.org/TR/css-ui-3/
[CSS-VALUES-3]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 3. 2019年6月6日. CR. URL: https://www.w3.org/TR/css-values-3/
[CSS-VALUES-4]
Tab Atkins Jr.; Elika Etemad. CSS Values and Units Module Level 4. 2020年11月11日. WD. URL: https://www.w3.org/TR/css-values-4/
[CSS-WRITING-MODES-3]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 3. 2019年12月10日. REC. URL: https://www.w3.org/TR/css-writing-modes-3/
[CSS-WRITING-MODES-4]
Elika Etemad; Koji Ishii. CSS Writing Modes Level 4. 2019年7月30日. CR. URL: https://www.w3.org/TR/css-writing-modes-4/
[CSS21]
Bert Bos; 他. Cascading Style Sheets Level 2 Revision 1 (CSS 2.1) Specification. 2011年6月7日. REC. URL: https://www.w3.org/TR/CSS21/
[HTML]
Anne van Kesteren; 他. HTML Standard. Living Standard. URL: https://html.spec.whatwg.org/multipage/
[PNG]
Tom Lane. Portable Network Graphics (PNG) Specification (Second Edition). 2003年11月10日. REC. URL: https://www.w3.org/TR/PNG/
[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997年3月. Best Current Practice. URL: https://tools.ietf.org/html/rfc2119
[SELECTORS-4]
Elika Etemad; Tab Atkins Jr.. Selectors Level 4. 2018年11月21日. WD. URL: https://www.w3.org/TR/selectors-4/
[SVG11]
Erik Dahlström; 他. Scalable Vector Graphics (SVG) 1.1 (Second Edition). 2011年8月16日. REC. URL: https://www.w3.org/TR/SVG11/
[SVG2]
Amelia Bellamy-Royds; 他. Scalable Vector Graphics (SVG) 2. 2018年10月4日. CR. URL: https://www.w3.org/TR/SVG2/
[UAX29]
Mark Davis; Christopher Chapman. Unicode Text Segmentation. 2020年2月19日. Unicode Standard Annex #29. URL: https://www.unicode.org/reports/tr29/tr29-37.html

参考情報文献

[CSS1]
Håkon Wium Lie; Bert Bos. Cascading Style Sheets, level 1. 2018年9月13日. REC. URL: https://www.w3.org/TR/CSS1/
[CSS4-IMAGES]
Tab Atkins Jr.; Elika Etemad; Lea Verou. CSS Image Values and Replaced Content Module Level 4. 2017年4月13日. WD. URL: https://www.w3.org/TR/css-images-4/
[HTML5]
Ian Hickson; 他. HTML5. 2018年3月27日. REC. URL: https://www.w3.org/TR/html5/
[SELECT]
Tantek Çelik; 他. Selectors Level 3. 2018年11月6日. REC. URL: https://www.w3.org/TR/selectors-3/

プロパティ索引

名前 初期値 適用対象 継承 %ages アニメーション型 正規順序 算出値
accent-color auto | <color> auto すべての要素 する N/A 算出値型による 構文に準ずる auto キーワードまたは算出色
appearance none | auto | textfield | menulist-button | <compat-auto> none すべての要素 しない n/a 離散値 構文に準ずる 指定キーワード
caret <'caret-color'> || <'caret-shape'> auto 入力を受け付ける要素 する N/A 各プロパティを参照 構文に準ずる 各プロパティを参照
caret-color auto | <color> auto すべての要素 する N/A 算出値による 構文に準ずる auto の場合は auto。 <color> の場合は [CSS-COLOR-4] を参照。
caret-shape auto | bar | block | underscore auto 入力を受け付ける要素 する N/A 算出値による 構文に準ずる 指定キーワード
cursor [ [<url> [<x> <y>]?,]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | grab | grabbing | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out ] ] auto すべての要素 する N/A 離散値 構文に準ずる 指定通り。ただし相対URLは絶対URLに変換
nav-down auto | <id> [ current | root | <target-name> ]? auto 有効なすべての要素 しない N/A 離散値 構文に準ずる 指定通り
nav-left auto | <id> [ current | root | <target-name> ]? auto 有効なすべての要素 しない N/A 離散値 構文に準ずる 指定通り
nav-right auto | <id> [ current | root | <target-name> ]? auto 有効なすべての要素 しない N/A 離散値 構文に準ずる 指定通り
nav-up auto | <id> [ current | root | <target-name> ]? auto 有効なすべての要素 しない N/A 離散値 構文に準ずる 指定通り
outline [ <'outline-color'> || <'outline-style'> || <'outline-width'> ] 各プロパティを参照 すべての要素 しない N/A 各プロパティを参照 構文に準ずる 各プロパティを参照
outline-color <color> | invert invert すべての要素 しない N/A 算出値による 構文に準ずる invert の場合は invert。 <color> の場合は [CSS-COLOR-4] を参照。
outline-offset <length> 0 すべての要素 しない N/A 算出値による 構文に準ずる 絶対長
outline-style auto | <outline-line-style> none すべての要素 しない N/A 算出値による 構文に準ずる 指定キーワード
outline-width <line-width> medium すべての要素 しない N/A 算出値による 構文に準ずる 絶対長; outline-style が none の場合は 0。
resize none | both | horizontal | vertical | block | inline none overflow が visible 以外の要素、オプションで画像・動画・iframeなどの置換要素 しない N/A 離散値 構文に準ずる 指定キーワード
user-select auto | text | none | contain | all auto すべての要素、およびオプションで ::before, ::after 疑似要素 しない n/a 離散値 構文に準ずる 指定キーワード

課題索引

user-select を none 以外に変更できる場合、コピー可能性やDOM APIの意味づけが必要です。
これを ::markerpage-margin boxes にも適用すべきか? auto の used value は none にすべきか、text が適切か?
editing host の編集可能な子孫要素で used value がどうなるか制約すべきか?セマンティクスが明確でない。 例えば none を text にマッピングすべきか、全ての値を text にすべきか?
上記リストは不完全であり、少なくとも input の各種ボタン型を含める必要があります。
auto が広くサポートされたら、そちらの使用を推奨。
Web互換に不要な値はこのリストから除外、必要な値が漏れていれば追加すべき。
互換性のため、これらの値の一部を任意要素で有効にすべき場合や、ウィジェットに副作用を持たせるべき場合があるかもしれません。
slider-vertical および sliderthumb-vertical は一部UAで <input type=range> 要素の向きを変更するためにサポートされていますが、これらの値は仕様で定義されていません。コントロールの向き変更は別機構が適切です。 issue whatwg/html#4177 を参照。
このリストに追加すべきプロパティは他にあるか?削除すべきか?無視してよいものをホワイトリスト化すべきか?UAはウィジェット描画時に一部プロパティを無視するため、仕様で何らかの指針が必要です。
このセクションの一部または全部は、将来的に [HTML] 仕様に移すべきかもしれません。
一部の要素では、特定プロパティを設定すると appearance: auto が阻害されます。例えば、appearance が auto の場合でも、ボタンに border を設定するとネイティブ外観が失われます。これは auto の定義と矛盾しませんが、どの要素のどのプロパティにこの効果があるか文書化すべきです。
UAがUAスタイルシートに何を入れる必要があるか文書化すると良いでしょう。