1. 序論
これは Selectors Level 4 に対する差分仕様です。
1.1. モジュール間の相互作用
このモジュールは、 [selectors-4] において CSS 向けに定義されたセレクターの集合を拡張します。
2. 位置疑似クラス
2.1. ローカルリンク疑似クラス :local-link
:local-link 疑似クラスは、 サイト内におけるユーザーの現在位置に基づいて ハイパーリンク をスタイル付けし、 サイト内部リンクとサイト外部リンクを区別できるようにします。
(非関数形の):local-link 疑似クラスは、 対象の絶対 URL が要素自身の文書 URL と一致するハイパーリンクにおける、 リンク元アンカーである要素を表します。 文書 URL とリンク URL を照合する前に、フラグメント識別子は取り除かれます; それ以外の URL の部分はすべて考慮されます。
nav :local-link { text-decoration: none; }
関数形疑似クラスとして、:local-link() は単一の引数として非負整数も受け付けることができます。 文書の URL が階層的スキームに属する場合、 それは一致させるパス階層のレベル数を示します:
- :local-link(0) は、ターゲットが文書 URL と同一オリジンにあるリンク要素を表します
- :local-link(1) は、ターゲットが同一オリジンで、かつ最初のパスセグメントも同じであるリンク要素を表します
- :local-link(2) は、ターゲットが同一オリジンで、かつ最初および 2 番目のパスセグメントも同じであるリンク要素を表します
- など。
パスセグメントとは、URL のパスにおいてスラッシュ(/)で区切られた部分です。 文書 URL にセグメントが欠けている場合、 そのセグメントの一致を要求する疑似クラスは何にも一致しません。
<a href="http://www.example.com">Home</a><a href="http://www.example.com/2011">2011</a><a href="http://www.example.com/2011/03">March</a><a href="http://www.example.com/2011/03/">March</a><a href="http://www.example.com/2011/03/21">21 March</a><a href="https://www.example.com/2011/03/">March</a><a href="http://example.com/2011/03/">March</a>
そして次のスタイルがあるとします:
a:local-link {...}a:local-link(0) {...}a:local-link(1) {...}a:local-link(2) {...}a:local-link(3) {...}a:local-link(4) {...}
文書 URL が http://www.example.com/2011/03/ の場合:
- リンク 1 はスタイル B を受けます
- リンク 2 はスタイル B と C を受けます
- リンク 3 はスタイル B、C、D を受けます
- リンク 4 もスタイル A、B、C、D、E を受けます
- リンク 5 はスタイル B、C、D を受けます
- リンク 6 はスタイルが適用されません
- リンク 7 はスタイルが適用されません
- スタイル F は何にも適用されません
URL の「オリジン」は RFC 6454 の第 4 節で定義されます。 :local-link(n) に対する照合において、 URL のユーザー名、パスワード、クエリ文字列、およびフラグメントの各部分は考慮されません。 文書 URL が階層的スキームに属さない場合、 関数形疑似クラスは何にも一致しません。
文書 URL が少なくとも N 個のセグメントを持つ場合、 :local-link(N) が少なくとも N 個のセグメントを持つリンク URL にのみ一致することは明確です。 (これにより :local-link に一貫した意味論を割り当てられ、たとえば :local-link(2) が GitHub における「リポジトリ内」リンクを意味する、といったことができます。) では、文書 URL が N 未満のセグメントしか持たず、 リンクが同一ページである場合はどうでしょうか? 「null セグメント」は一致として数えるべきでしょうか、それとも数えないべきでしょうか?
3. ユーザー操作疑似クラス
3.1. 関心疑似クラス: :interest-source および :interest-target
一般的な UI 機能として、ユーザーが特定の要素に「関心を示す」ことができ(関心ソース)、 UI がその関心に反応して、別の要素に追加情報を表示する(関心ターゲット)ことがあります。 典型的にはポップアップです。 例えば、ページ上のユーザー名にホバーすると、そのユーザーの情報カードが表示されるかもしれません; またはリンクを長押しすると、リンク先のプレビューが表示されるかもしれません。 こうしたことが起きるとき、最初の要素は
注: どの要素が正確に 関心ソース になり得るのか、
それらがどのように 関心ターゲット
と結び付けられるのか、
そして「関心」がどのように示されるのかはすべて、
ホスト言語 によって定義されます。
例えば HTML では、
これは interestfor 属性によって行われ、
「関心を示す」ことができる要素(関心ソース)を示します。
そしてその属性は、追加情報を表示する意図を持つ別の要素(関連付けられた 関心ターゲット)を指します
(通常は
popover
要素です)。
:interest-source 疑似クラスは、 ユーザーが現在「関心を示している」 関心ソース 要素に適用され、 :interest-target 疑似クラスは、 :interest-source に一致する要素に関連付けられた 関心ターゲット に適用されます。
注: :interest-source は、
ユーザーが 現在 関心を示している 関心ソース にのみ一致し、
関心が 潜在的に 示され得る要素すべてに一致するわけではありません。
例えば HTML では、
単に interestfor 属性を持つだけでは、この疑似クラスに一致しません;
ユーザーが実際にそれへ関心を示す必要もあります。
同様に、:interest-target も、
ユーザーが 現在 関心を示している要素と結び付けられた 関心ターゲット にのみ一致し、
interestfor 属性が指し示す任意の要素に一致するわけではありません。
4. 入力疑似クラス
4.1. 入力値の検証
4.1.1. 空値疑似クラス: :blank
:blank 疑似クラスは、 入力値が空である(空文字列、またはそれ以外の null 入力から成る)ユーザー入力要素に適用されます。
フォームコントロールに対する :blank を解釈するための経験則は次のとおりです:
-
コントロールが常に送信され、 かつ空文字列で送信される場合、:blank に一致します。 (例えば、値が空のときの HTML の
<input type=text>など。) -
送信されることもあり、送信されないこともあり、 送信されない状態に設定されている場合、:blank に一致します。 (例えば、チェックされていないときの HTML の
<input type=checkbox>など。) -
それが「アクションボタン」 (状態を表す「トグルボタン」ではなく) であり、
<button>、<input type=submit>などの場合、 :blank に一致することはありません。
ホスト言語は、 フォームコントロールがいつ :blank に一致するかについて、 より正確な規則を指定できます。
5. 時間次元疑似クラス
これらの疑似クラスは、あるタイムラインにおける現在表示中またはアクティブな位置に対して、 要素を分類します。例えば、文書の音声レンダリング中や、 WebVTT を用いて字幕を描画する動画表示中などです。
CSS はこのタイムラインを定義しません; ホスト言語が定義しなければなりません。 要素に対してタイムラインが定義されていない場合、 これらの疑似クラスはその要素に一致してはなりません。
注: :current 要素の祖先もまた :current ですが、 :past または :future 要素の祖先は、必ずしも :past または :future でもありません。 ある要素が一致するのは、:current、:past、または :future のうち最大で 1 つです。
5.1. 現在要素疑似クラス: :current
:current 疑似クラスは、現在表示されている要素、またはその要素の祖先を表します。
その別形式である :current() は、 引数として 複合セレクター のリストを取ります: それは、引数に一致する :current 要素、またはそれが一致しない場合には、 一致する :current 要素の最も内側の祖先を表します。 (:current 要素もその祖先も引数に一致しない場合、 セレクターは何も表しません。)
:current(p, li, dt, dd) {
background: yellow;
}
5.2. 過去要素疑似クラス: :past
:past 疑似クラスは、 :current 要素より前に完全に起きると定義されている任意の要素を表します。 例えば、WebVTT 仕様は :past 疑似クラスを、 メディア要素の現在の再生位置に対して相対的に定義します。 文書言語が要素の時間に基づく順序を定義しない場合、 これは :current 要素の(間接的であり得る)前の兄弟である任意の要素を表します。
5.3. 未来要素疑似クラス: :future
:future 疑似クラスは、 :current 要素より後に完全に起きると定義されている任意の要素を表します。 例えば、WebVTT 仕様は :future 疑似クラスを、 メディア要素の現在の再生位置に対して相対的に定義します。 文書言語が要素の時間に基づく順序を定義しない場合、 これは :current 要素の(間接的であり得る)次の兄弟である任意の要素を表します。
6. カスタム状態の公開: :state() 疑似クラス
:state( <ident> ) 疑似クラスは、 カスタム要素 のうち、 その states set が、 セレクター引数の値と 同一である 文字列を含むものに一致します。
注: 「同一である」による照合の挙動は、コードポイントごとに文字列を比較します; 特に、大文字小文字を区別します。 したがって、states set に "foo" が含まれている場合、:state(FOO) は一致しません。
:state() 疑似クラスの正確な一致挙動は、 ホスト言語によって定義されます。 明確化のため、この疑似クラスを説明する概念は HTML の定義へリンクしています; 詳細については HTML 定義 を参照してください。 他のホスト言語は、この疑似クラスがどのように一致するかを定義しなければなりません。
7. 見出し構造: 見出し疑似クラス :heading および :heading()
(非関数形の):heading 疑似クラスは、 文書言語が定義する意味論(例えば [HTML5])において、 見出しレベルを持つ要素に一致します。
関数形疑似クラスとして、:heading() 記法は、 提供された integer 値のいずれかに一致する 見出しレベルを持つ要素を表します。 構文は次のとおりです:
:heading() = :heading( <level># )
ここで <level> は、
型フラグが "integer" に設定された <number-token> です。
:heading() の 詳細度 はクラスと同じです。
:heading(1, 2, 3) { font-weight: 900; }
:heading(6, 7, 8, 9) { font-weight: 500; }
:heading(1, 2) { text-decoration: underline; }
:heading(3, 4, 5, 6, 7, 8, 9) { text-decoration: none; }
注: 見出しレベル は、要素の 型セレクター と異なる可能性があります。したがって、 セレクター h1:heading(3) は、 公開された見出しレベルが 3 である任意の h1 タグに一致します。
8. グリッド構造セレクター
2 次元グリッドにおけるセルの二重の関連付け(行と列への関連付け)は、 階層的マークアップ言語における親子関係では表現できません。 これらの関連付けのうち、階層的に表現できるのは一方のみです: もう一方は、文書言語の意味論の中で明示的または暗黙的に定義されなければなりません。 最も一般的な階層的マークアップ言語である HTML と DocBook のいずれでも、 マークアップは行優先(すなわち、行の関連が階層的に表現される)であり、列は暗黙になります。 このような暗黙の列ベースの関係を表現できるようにするため、 列結合子 と、 :nth-col() および :nth-last-col() 疑似クラスが定義されます。 列優先形式では、これらの疑似クラスは代わりに行の関連付けに対して照合します。
8.1. 列結合子(||)
列結合子は、 2 本のパイプから成り(||)、 列要素が表す列に属するセル要素との関係を表します。 列への所属は、文書言語の意味論のみに基づいて決定されます: 要素が提示されるかどうか、またどのように提示されるかは考慮されません。 セル要素が複数の列に属する場合、 それはそれらの列のいずれかへの所属を示すセレクターによって表されます。
col.selected || td {
background: gray;
color: white;
font-weight: bold;
}
<table> <col span="2"> <col class="selected"> <tr><td>A <td>B <td>C <tr><td colspan="2">D <td>E <tr><td>F <td colspan="2">G </table>
8.2. :nth-col() 疑似クラス
:nth-col(An+B) 疑似クラス記法は、
n の任意の正整数またはゼロ値に対して、
その列の前に An+B-1 列がある列に属するセル要素を表します。
列への所属は、文書言語の意味論のみに基づいて決定されます: 要素が提示されるかどうか、またどのように提示されるかは考慮されません。
セル要素が複数の列に属する場合、
それはそれらの列のいずれかを示すセレクターによって表されます。
CSS Syntax Module [CSS3SYN] は、An+B 記法を定義します。
8.3. :nth-last-col() 疑似クラス
:nth-last-col(An+B) 疑似クラス記法は、
n の任意の正整数またはゼロ値に対して、
その列の後に An+B-1 列がある列に属するセル要素を表します。
列への所属は、文書言語の意味論のみに基づいて決定されます: 要素が提示されるかどうか、またどのように提示されるかは考慮されません。
セル要素が複数の列に属する場合、
それはそれらの列のいずれかを示すセレクターによって表されます。
CSS Syntax Module [CSS3SYN] は、An+B 記法を定義します。
9. 結合子
9.1. 参照結合子 /ref/
参照結合子は、 間に CSS 修飾名 を挟んだ 2 本のスラッシュから成り、 2 つの 複合セレクター(例: A /attr/ B)を分離します。 第 1 の 複合セレクターが表す要素は、 第 2 の 複合セレクターが表す要素を明示的に参照します。 ホスト言語がこの関係を表現する別の構文を定義しない限り、 この関係は、第 1 の要素上で指定された属性の値が IDREF であるか、 第 2 の要素を参照する ID セレクター である場合に存在すると見なされます。
参照結合子における属性照合は、属性セレクター と同じ規則に従います。
<label>
がフォーカスされているかホバーされているときにハイライトします:
label:is(:hover, :focus) /for/ input, /* "for" 属性による関連付け */
label:is(:hover, :focus):not([for]) input { /* 包含による関連付け */
box-shadow: yellow 0 0 10px;
}
10. 変更点
10.1. レベル 4 以降の変更点
レベル 4 以降の追加点:
- 参照結合子 (Selectors 4 の以前の草案から延期)
- :local-link 疑似クラスの関数形 (Selectors 4 の以前の草案から延期)
- :state() 疑似クラス
- :heading および :heading() 疑似クラス
- :local-link 疑似クラス (Selectors 4 の以前の草案から延期)
- :interest-source および :interest-target 疑似クラス
- :blank 疑似クラス (Selectors 4 の以前の草案から延期)
- グリッド構造(列)セレクター(Selectors 4 の以前の草案から延期)
- 時間次元疑似クラス(Selectors 4 の以前の草案から延期)
11. 謝辞
CSS working group は、 長年にわたって 以前の Selectors 仕様に貢献してくださった皆様に感謝します。 それらの仕様が本仕様の基礎となったためです。 特に working group は、Selectors Level 5 への具体的な貢献として、 次の方へ特別な感謝を申し上げます: Joey Arhar。
プライバシーに関する考慮事項
適切な場合、レベル 4 からコピーされるべきです。
セキュリティに関する考慮事項
適切な場合、レベル 4 からコピーされるべきです。