1. 序論
◎非規範的`選択子$とは、[ ~tree構造~内の各~要素に対し,要素が選択子に合致するかどうか ]を~testする真偽-述語である。 ◎ A selector is a boolean predicate that takes an element in a tree structure and tests whether the element matches the selector or not.
これらの式には多くの用途がある: ◎ These expressions may be used for many things:
- `element.matches()@~DOM4#dom-element-matches$c ~API【!関数】 `DOM$r などにおいて、 要素が何らかの判定基準に合致するかどうかを,直に~testする。 ◎ directly on an element to test whether it matches some criteria, such as in the element.matches() function defined in [DOM]
- `document.querySelectorAll()@~DOM4#dom-parentnode-queryselectorall$c ~API【!関数】 `DOM$r や~CSS~style規則の選択子などを通して、 要素~tree全体に適用して,判定基準に合致する要素たちが成す集合に絞込む。 ◎ applied to an entire tree of elements to filter it into a set of elements that match the criteria, such as in the document.querySelectorAll() function defined in [DOM] or the selector of a CSS style rule.
- `HAML@http://haml.info/$ や `Emmet@https://en.wikipedia.org/wiki/Emmet_(software)$ などのように “逆向き” に利用して、 所与の選択子に合致するような~markupを生成する。 ◎ used "in reverse" to generate markup that would match a given selector, such as in HAML or Emmet.
~Selectors~level 1, 2, 3 は、 順に `CSS1@~TR/REC-CSS1$cite 仕様, `CSS21$r, `SELECT$r に定義される — これらは、 選択子の機能性の下位集合を成すものとして定義される。 この~moduleは、 ~Selectors~level 4 を定義する。 【~levelを伴わない “~Selectors” は、これら各~levelの仕様の総称を表す。】 ◎ Selectors Levels 1, 2, and 3 are defined as the subsets of selector functionality defined in the CSS1, CSS2.1, and Selectors Level 3 specifications, respectively. This module defines Selectors Level 4.
1.1. ~module間の相互作用
この~moduleは、 `~level 2$, `~level 3$ にて~CSS用に定義された選択子の定義を置換し,その集合を拡張する。 ◎ This module replaces the definitions of and extends the set of selectors defined for CSS in [SELECT] and [CSS21].
具現化~treeの中の抽象的な要素を定義する`疑似要素$選択子は、 この仕様の一部を成すものではない。 その汎用~構文は,ここで述べられるが、 それらの具現化~modelとの密接な統合, および~DOM~queryその他の関連しない用途などに因り, 他の~module【 `CSS-PSEUDO-4$r など】にて定義されることになる。 ◎ Pseudo-element selectors, which define abstract elements in a rendering tree, are not part of this specification: their generic syntax is described here, but, due to their close integration with the rendering model and irrelevance to other uses such as DOM queries, they will be defined in other modules.
【この訳に特有な表記規約】
◎表記記号2. 選択子の概観
`この節は規範的ではなく,以下の各~節を要約するものに過ぎない。^em ◎ This section is non-normative, as it merely summarizes the following sections.
選択子は、 構造を表現する。 この構造は、 文書~treeの中でどの要素が選択子に合致するかを決定するための条件として (例:~CSS規則における), あるいは その構造に対応する~HTMLや~XMLを成す素片の平坦な記述として,利用し得る。 ◎ A selector represents a structure. This structure can be used as a condition (e.g. in a CSS rule) that determines which elements a selector matches in the document tree, or as a flat description of the HTML or XML fragment corresponding to that structure.
選択子の表現力は、 単純な要素~名から多彩な文脈に応じた表現までに渡る。 ◎ Selectors may range from simple element names to rich contextual representations.
選択子の構文は,次の表tに要約される: ◎ The following table summarizes the Selector syntax:
【 この表tにおいては、[ %E / %F ]は ある`複合-選択子$を表し, %T は ある`型~選択子$を表す。 “%E 要素” は %E に合致する要素を意味する( “%F 要素”, “%T 要素” も同様)。 】【 “分類” の~~見出しは訳者による追加。 】【 この訳では、 原文の表tには まだ挙げられていない選択子( "※" が付与されたもの)も含めている (それらの記述は、この訳による補完である)。 】
分類 | |||
---|---|---|---|
~pattern ◎ Pattern | 表現される`~subject$ ◎ Represents | § ◎ Section | ~level ◎ Level |
`元素的な選択子§ | |||
`*^css | 任意の要素 ◎ any element | `全称~選択子§ | 2 |
`%T^css | 任意の %T 要素 ◎ an element of type E | `型(~tag名)選択子§ | 1 |
`論理的な組合n§ | |||
`%E:not(%s1, %s2, ...)^css | `複合-選択子$ %s1, %s2, … のどれにも合致しない %E 要素 ◎ an E element that does not match either compound selector s1 or compound selector s2 | `否定 疑似類§ | 3/4 |
`%E:is(%s1, %s2, ...)^css | `複合-選択子$ %s1, %s2, … のどれかに合致する %E 要素 ◎ an E element that matches compound selector s1 and/or compound selector s2 | `論理和 疑似類§ | 4 |
`%E:where(%s1, %s2, ...)^css | `複合-選択子$ %s1, %s2, … のどれかに合致する %E 要素 — 加えて、 詳細度にも寄与しない ◎ an E element that matches compound selector s1 and/or compound selector s2 but contributes no specificity. | `詳細度~調整 疑似類§ | 4 |
`%E:has(%rs1, %rs2, ...)^css | `相対~選択子$ %rs1, %rs2, … のいずれかに対し[ `~anchor要素$として %E を与える下で評価したとき,合致する要素が存在する ]ような %E 要素 ◎ an E element, if there exists an element that matches either of the relative selectors rs1 or rs2, when evaluated with E as the anchor elements | `関係上の 疑似類§ | 4 |
`属性~選択子§ | |||
`%E.%warning^css | %warning ~class に属する %E 要素 (要素が属する~classがどう決定されるかは、 文書~言語が指定する)。 ◎ an E element belonging to the class warning (the document language specifies how class is determined). | `~class選択子§ | 1 |
`%E#%myid^css | ~IDが %myid に等しい %E 要素 ◎ an E element with ID equal to myid. | `~ID選択子§ | 1 |
`%E[%foo]^css | %foo 属性を有する %E 要素 ◎ an E element with a foo attribute | `属性~存在p/属性~値~選択子§ | 2 |
`%E[%foo="%bar"]^css | %foo 属性~値が %bar に等しい %E 要素 ◎ an E element whose foo attribute value is exactly equal to bar | `属性~存在p/属性~値~選択子§ | 2 |
`%E[%foo="%bar" i]^css | %foo 属性~値が`~ASCII大小無視$で %bar に等しい %E 要素 ◎ an E element whose foo attribute value is exactly equal to any (ASCII-range) case-permutation of bar | `属性~値の文字大小比較§ | 4 |
`%E[%foo="%bar" s]^css | %foo 属性~値が %bar に`一致-$する %E 要素 ◎ an E element whose foo attribute value is identical to bar | `属性~値の文字大小比較§ | 4 |
`%E[%foo~="%bar"]^css | %foo 属性~値を`空白$で分離した~listを成す ある項が %bar に等しい %E 要素 ◎ an E element whose foo attribute value is a list of whitespace-separated values, one of which is exactly equal to bar | `属性~存在p/属性~値~選択子§ | 2 |
%E[%foo^="%bar"]
| %foo 属性~値が文字列 %bar から始まる %E 要素 ◎ an E element whose foo attribute value begins exactly with the string bar | `部分照合 属性~選択子§ | 3 |
%E[%foo$="%bar"]
| %foo 属性~値が文字列 %bar で終わる %E 要素 ◎ an E element whose foo attribute value ends exactly with the string bar | `部分照合 属性~選択子§ | 3 |
`%E[%foo*="%bar"]^css | %foo 属性~値が %bar を部分文字列として包含する %E 要素 ◎ an E element whose foo attribute value contains the substring bar | `部分照合 属性~選択子§ | 3 |
`%E[%foo|="%en"]^css | %foo 属性~値を~hyphenで分離した~listを成す最初の項が %en に等しい %E 要素 ◎ an E element whose foo attribute value is a hyphen-separated list of values beginning with en | `属性~存在p/属性~値~選択子§ | 2 |
`自然言語に関する疑似類§ | |||
`%E:dir(ltr)^css | 方向性が左横書きの %E 要素 (方向性がどう決定されるかは、 文書~言語が指定する) ◎ an element of type E with left-to-right directionality (the document language specifies how directionality is determined) | `方向性 疑似類§ | 4 |
`%E:lang(zh, "*-hant")^css | 言語~tagが[ 標準中国語(そのどの方言/書記体系も含む), あるいは繁体字で書かれたもの ]として付与された下にある %E 要素 ◎ an element of type E tagged as being either in Chinese (any dialect or writing system) or otherwise written with traditional Chinese characters | `自然言語 疑似類§ | 2/4 |
`所在 疑似類§ (以下における “~link元” とは、 ~hyperlinkの~source~anchorを意味する) | |||
`%E:any-link^css | ~link元である %E 要素 ◎ an E element being the source anchor of a hyperlink | `~hyperlink 疑似類§ | 4 |
`%E:link^css | ~targetが未訪問な~link元である %E 要素 ◎ an E element being the source anchor of a hyperlink of which the target is not yet visited | `~link履歴 疑似類§ | 1 |
`%E:visited^css | ~targetが訪問-済みな~link元である %E 要素 ◎ an E element being the source anchor of a hyperlink of which the target is already visited | `~link履歴 疑似類§ | 1 |
`%E:local-link^css | 現在の~URLを~targetにしている~link元である %E 要素 ◎ an E element being the source anchor of a hyperlink targeting the current URL | `局所~link 疑似類§ | 4 |
`%E:target^css | 現在の~URLにおいて~targetにされている %E 要素 ◎ an E element being the target of the current URL | `~target 疑似類§ | 3 |
`%E:target-within^css | 現在の~URLにおいて~targetにされているか, それを包含している %E 要素 ◎ an E element that is the target of the current URL or contains an element that does. | `~target容器 疑似類§ | 4 |
`%E:scope^css | `視野ng根$でもある %E 要素 ◎ an E element being a scoping root | `視野ng根 疑似類§ | 4 |
`時系列 疑似類§ | |||
`%E:current^css | 時系列再生の下で現在~呈示された %E 要素 ◎ an E element that is currently presented in a time-dimensional canvas | `現在-要素 疑似類§ | 4 |
`%E:current(%S)^css | 最も深い `current$ps 要素であって, 選択子 %S に合致する %E 要素。 ◎ an E element that is the deepest :current element that matches selector s | `現在-要素 疑似類§ | 4 |
`%E:past^css | 時系列再生の下で過去に現れた %E 要素 ◎ an E element that is in the past in a time-dimensional canvas | `過去-要素 疑似類§ | 4 |
`%E:future^css | 時系列再生の下で未来に現れる %E 要素 ◎ an E element that is in the future in a time-dimensional canvas | `未来-要素 疑似類§ | 4 |
`利用者~動作 疑似類§ | |||
`%E:active^css | 作動化された %E 要素 ◎ an E element that is in an activated state | `作動化 疑似類§ | 1 |
`%E:hover^css | ~cursorが指している要素, またはその要素を子孫に持つ %E 要素 ◎ an E element that is under the cursor, or that has a descendant under the cursor | `~pointer~hover 疑似類§ | 2 |
`%E:focus^css | 利用者~入力の~focusを得ている %E 要素 ◎ an E element that has user input focus | `入力~focus 疑似類§ | 2 |
`%E:focus-within^css | 利用者~入力の~focusを得ているか, それを包含している %E 要素 ◎ an E element that has user input focus or contains an element that has input focus. | `~focus容器 疑似類§ | 4 |
`%E:focus-visible^css | 利用者~入力の~focusを得ている %E 要素のうち,~UAが[ その要素~用に~focus環~その他の指示子を描くべきである ]と決定した要素 ◎ an E element that has user input focus, and the UA has determined that a focus ring or other indicator should be drawn for that element | `~focus指示-先 疑似類§ | 4 |
`資源~状態 疑似類§ | |||
`%E:playing^css ※/ `%E:paused^css ※/ `%E:seeking^css ※ | ~media要素のうち、 順に,[ 再生している/ 静止している/ ~seekしている ]状態にある %E 要素 | `~media再生-状態 疑似類§ | 4 |
`%E:buffering^css ※/ `%E:stalled^css ※ | ~media要素のうち、 順に,[ ~buffer中にあり,再生を再開できない/ ~dataを受信するのに失敗したため,再生し続けられない ]状態にある %E 要素 | `~media読込ng状態 疑似類§ | 4 |
`%E:muted^css ※/ `%E:volume-locked^css ※ | ~media要素のうち、 順に,[ 消音された/ ~program的に変更しても音量は変化しない ] %E 要素 | `音響~状態 疑似類§ | 4 |
`要素~表示~状態 疑似類§ | |||
`%E:open^css ※ / `%E:closed^css ※ | [ “開な”, “閉な” ]両~状態をとり得る要素のうち,現在は[ “開な” / “閉な” ]状態にある %E 要素。 | `開閉~状態 疑似類§ | 4 |
`%E:modal^css ※ | すべてのヤリトリを排他的に受け付けている %E 要素 | `~modal状態 疑似類§ | 4 |
`%E:fullscreen^css ※ | ~fullscreen~modeで呈示されている %E 要素 | `~fullscreen呈示~状態 疑似類§ | 4 |
`%E:picture-in-picture^css ※ | ~picture-in-picture~modeで呈示されている %E 要素 | `~picture-in-picture呈示~状態 疑似類§ | 4 |
`入力 疑似類§ ( “UI” は “利用者~interface” の略語) | |||
`%E:enabled^css / `%E:disabled^css | ~UI要素のうち、順に,[ 可能化-, 不能化- ]されている %E 要素 ◎ a user interface element E that is enabled or disabled, respectively | `操作可否 疑似類§ | 3 |
`%E:read-only^css / `%E:read-write^css | ~UI要素のうち、順に,利用者が内容を[ 改めれる, 改めれない ] %E 要素 ◎ a user interface element E that is user alterable, or not | `変異能 疑似類§ | 3-UI/4 |
`%E:placeholder-shown^css | 入力~controlのうち、 現在~仮入力~textを示している %E 要素 ◎ an input control currently showing placeholder text | `仮入力例示 疑似類§ | 3-UI/4 |
`%E:autofill^css ※ | 入力~controlのうち、 ~UAにより自動的に埋められていて, 後続して利用者により改められてない %E 要素 | `自動的~入力 疑似類§ | 4 |
`%E:default^css | ~UI要素のうち、 一連の選択肢の中で既定の選択肢にされている %E 要素 ◎ a user interface element E that is the default item in a group of related choices | `既定の~option 疑似類§ | 3-UI/4 |
`%E:checked^css | ~UI要素のうち、 ~checkまたは選択されている %E 要素(~radio~buttonや~checkbox用) ◎ a user interface element E that is checked/selected (for instance a radio-button or checkbox) | `選択-済み~option 疑似類§ | 3 |
`%E:indeterminate^css | ~UI要素のうち、 不定な(~checkの有無が~~未設定な)状態にある %E 要素 ◎ a user interface element E that is in an indeterminate state (neither checked nor unchecked) | `不定な値 疑似類§ | 4 |
`%E:valid^css / `%E:invalid^css | ~UI要素のうち、 順に,入力~値が[ 妥当である, 妥当でない ] %E 要素 ◎ a user-input element E that meets, or doesn’t, its data validity semantics | `妥当性 疑似類§ | 3-UI/4 |
`%E:in-range^css / `%E:out-of-range^css | 利用者~入力~要素のうち、 順に,入力~値が[ 範囲~内, 範囲~外 ]にある %E 要素 ◎ a user-input element E whose value is in-range/out-of-range | `範囲 疑似類§ | 3-UI/4 |
`%E:required^css / `%E:optional^css | 利用者~入力~要素のうち、 順に,入力が[ 必須である, 必須でない ] %E 要素 ◎ a user-input element E that requires/does not require input | `必須随意 疑似類§ | 3-UI/4 |
`%E:blank^css | 利用者~入力~要素のうち、 値が空欄である(空/欠落である) %E 要素 ◎ a user-input element E whose value is blank (empty/missing) | `空な値 疑似類§ | 4 |
`%E:user-invalid^css | 利用者~入力~要素のうち、 【利用者から】不正な値が入力された %E 要素 (妥当でない/範囲~外である/必須にもかかわらず未入力にされた) ◎ a user-altered user-input element E with incorrect input (invalid, out-of-range, omitted-but-required) | `利用者~対話 疑似類§ | 3-UI/4 |
`%E:user-valid^css | 利用者~入力~要素のうち、 利用者から正しい値が入力された %E 要素 【この項は、この訳による補完】 ◎ | `利用者~対話 疑似類§ | 4 |
`~tree構造上の疑似類§ (以下における “同胞”, “同胞~群” は、 概ね,同じ親を共有する要素(~text~など他種の~nodeは除外される), それらが成す`~tree順序$による一連の要素を意味する — 正確な定義は、 `同胞~群$を見よ)。 | |||
`%E:root^css | 文書の根である %E 要素 ◎ an E element, root of the document | `root$PS | 3 |
`%E:empty^css | 空白~以外に子が無い %E 要素(要素, ~textどちらの子も) ◎ an E element that has no children (neither elements nor text) except perhaps white space | `empty$PS | 3 |
`%E:nth-child(%n [of %S]?)^css | 同胞~群の中で %S に合致する要素のうち %n 個目のものであって, %E 要素でもあるもの ◎ an E element, the n-th child of its parent matching S | `nth-child()$PS | 3/4 |
`%E:nth-last-child(%n [of %S]?)^css | 同胞~群の中で %S に合致する要素のうち 最後から %n 個目のものであって, %E 要素でもあるもの ◎ an E element, the n-th child of its parent matching S, counting from the last one | `nth-last-child()$PS | 3/4 |
`%E:first-child^css | 同胞~群の中で最初の要素であって, %E 要素でもあるもの ◎ an E element, first child of its parent | `first-child$PS | 2 |
`%E:last-child^css | 同胞~群の中で最後の要素であって, %E 要素でもあるもの ◎ an E element, last child of its parent | `last-child$PS | 3 |
`%E:only-child^css | 自身の他に同胞は無い, %E 要素 ◎ an E element, only child of its parent | `only-child$PS | 3 |
`%T:nth-of-type(%n)^css | 同胞~群の中の %T 要素のうち, %n 個目のもの 【 %T が一般の`複合-選択子$であった場合の挙動は、定義を見よ(以下同様)】 ◎ an E element, the n-th sibling of its type | `nth-of-type()$PS | 3 |
`%T:nth-last-of-type(%n)^css | 同胞~群の中の %T 要素のうち,最後から %n 個目のもの ◎ an E element, the n-th sibling of its type, counting from the last one | `nth-last-of-type()$PS | 3 |
`%T:first-of-type^css | 同胞~群の中の %T 要素のうち,最初のもの ◎ an E element, first sibling of its type | `first-of-type$PS | 3 |
`%T:last-of-type^css | 同胞~群の中の %T 要素のうち,最後のもの ◎ an E element, last sibling of its type | `last-of-type$PS | 3 |
`%T:only-of-type^css | 自身の他に同胞である %T 要素は無い, %T 要素 ◎ an E element, only sibling of its type | `only-of-type$PS | 3 |
`結合子§( 語 “同胞~群” は上記参照 ) | |||
`%E %F^css | %E 要素の子孫である %F 要素 ◎ an F element descendant of an E element | `子孫~結合子§ | 1 |
`%E > %F^css | %E 要素の子である %F 要素 ◎ an F element child of an E element | `子~結合子§ | 2 |
`%E + %F^css | 同胞~群の中で, %E 要素の直後に在る %F 要素 ◎ an F element immediately preceded by an E element | `直後~同胞~結合子§ | 2 |
`%E ~ %F^css | 同胞~群の中で, %E 要素に後続している %F 要素 ◎ an F element preceded by an E element | `後続~同胞~結合子§ | 3 |
`格子構造~選択子§ | |||
`%F || %E^css | 格子/~table内の, %F 要素で表現される~columnに属する~cellを表現する %E 要素 ◎ an E element that represents a cell in a grid/table belonging to a column represented by an element F | `~column結合子§ | 4 |
`%E:nth-col(%n)^css | 格子/~table内の %n 個目の~columnに属する~cellを表現する %E 要素 ◎ an E element that represents a cell belonging to the nth column in a grid/table | `nth-col()$PS | 4 |
`%E:nth-last-col(%n)^css | 格子/~table内の最後から %n 個目の~columnに属する~cellを表現する %E 要素 ◎ an E element that represents a cell belonging to the nth column in a grid/table, counting from the last one | `nth-last-col()$PS | 4 |
注記: 一部の ~level 4 選択子(上の表tで "3-UI" と記されているもの)は `CSS3UI$r にて導入されたものである。 ◎ Note: Some Level 4 selectors (noted above as "3-UI") were introduced in [CSS3UI].
3. 選択子の構文と構造
3.1. 構造と各種用語
`選択子@ ( `selector^en )は、 ~tree構造における特定0の要素(たち)が成す~patternを表現する。 `選択子$は、[ `単純-選択子$, `複合-選択子$【/`疑似-複合-選択子$】, `複階-選択子$, `選択子~list$ ]の総称である†。 `選択子$の `~subject@ ( `subject of a selector^en )とは、 当の`選択子$の対象になるものとして定義される要素たちである — すなわち、 `選択子$に `合致して@ いる任意の要素である。 ◎ A selector represents a particular pattern of element(s) in a tree structure. The term selector can refer to a simple selector, compound selector, complex selector, or selector list. The subject of a selector is any element that selector is defined to be about; that is, any element matching that selector.
【† この仕様の中では、 `複階-選択子$を表すことが多い。 この種の`同一視@#_note1_$は、 “一定範囲の要素を選択する” という機能上の観点からは同等に扱えるイミで 理に適う面もある一方で, 定義が解り難くなる面もあるので、 この訳では必要に応じて注釈を加えている。 】
- `単純-選択子@ ( `simple selector^en )
- 合致する要素が満たすべき単独の条件を表す。 それは、 次のいずれかである (`文法$においては `simple-selector$t により表現される) ⇒# `型~選択子$, `全称~選択子$, `属性~選択子$, `~class選択子$, `~ID選択子$, `疑似類$ ◎ A simple selector is a single condition on an element. A type selector, universal selector, attribute selector, class selector, ID selector, or pseudo-class is a simple selector. (It is represented by <simple-selector> in the selectors grammar.)\
- 所与の要素 %E は、 次を満たすならば,`単純-選択子$ %S に`合致して$いるとされる ⇒ %S は、 この仕様に定義されるとおり, かつ`文書~言語$に則って, %E を正確aに述べている。 ◎ A given element is said to match a simple selector when that simple selector, as defined in this specification and in accordance with the document language, accurately describes the element.
- `複合-選択子@ ( `compound selector^en )
- `結合子$で分離されていない`単純-選択子$たちが成す連列であり (`文法$においては `compound-selector$t により表現される)、 単独の要素が同時に満たす条件たちが成す集合を表現する。 この連列が[ `型~選択子$/`全称~選択子$ ]を包含する場合、 それは先頭に来なければナラナイ。 ◎ A compound selector is a sequence of simple selectors that are not separated by a combinator, and represents a set of simultaneous conditions on a single element. If it contains a type selector or universal selector, that selector must come first in the sequence. Only one type selector or universal selector is allowed in the sequence. (A compound selector is represented by <compound-selector> in the selectors grammar.)\
- 所与の要素 %E は、 次を満たすならば,`複合-選択子$ %S に`合致して$いるとされる ⇒ %E は、 %S を成すどの`単純-選択子$にも`合致して$いる ◎ A given element is said to match a compound selector when it matches all simple selectors in the compound selector.
- 注記: 空白は`子孫~結合子$を表現するので、 `複合-選択子$内の`単純-選択子$たちの合間には,空白は許容されない。 ◎ Note: As whitespace represents the descendant combinator, no whitespace is allowed between the simple selectors in a compound selector.
- `疑似-複合-選択子@ ( `pseudo-compound selector^en )
-
`疑似要素$選択子 %P に 0 個以上の`疑似類$選択子が`結合子$を挟まずに後続するもの (`文法$においては `pseudo-compound-selector$t により表現される)。 %P には,省略可能な[ `複合-選択子$/`疑似-複合-選択子$ ] %Q が`結合子$を挟まずに先行する。 `疑似要素$は、 ~AND↓ を満たすとき,`疑似-複合-選択子$に`合致して$いるとされる: ◎ A pseudo-compound selector is a pseudo-element selector, optionally followed by additional pseudo-class selectors, and optionally preceded by a compound selector or another pseudo-compound selector, without any combinators. (A pseudo-compound selector is represented by <pseudo-compound-selector> in the selectors grammar.) A pseudo-element matches a pseudo-compound selector when\
- %P の名前に対応する`疑似要素$である ◎ it has the specified pseudo-element name,\
- 後続する各 `疑似類$により表現される追加的な条件に合致している ◎ matches the additional conditions represented by any pseudo-classes,\
- その`出自の要素$は、 %Q に`合致-$している — %Q が省略された場合、 %Q は`全称~選択子$であると見做される (例えば, `.foo ::before^css は、 `.foo *::before^css と等価であり, `.foo::before^css とは別物になる)。 ◎ and has an originating element represented by the adjacent preceding selector. If there is no adjacent preceding selector, the universal selector is assumed. (For example, .foo ::before is equivalent to .foo *::before, and distinct from .foo::before.)
- 例えば, `.foo::before:hover^css においては、[ `.foo^css は`複合-選択子$, `::before:hover^css は`疑似-複合-選択子$ ]を成す。 一方で, `.foo::before::marker^css においては、[ `before$pe, `marker$pe ]は別々な`疑似-複合-選択子$を成す。 【この場合、 `marker^pe は`下位-疑似要素$を成すので,その`出自の要素$は `before^pe で表現されることになる。】 ◎ For example, in .foo::before:hover, the .foo is a compound selector, while the ::before:hover is a pseudo-compound selector. However, in .foo::before::marker, ::before and ::marker are separate pseudo-compound selectors.
- 注記: `疑似-複合-選択子$は、 `複合-選択子$ではないので, `複合-選択子$しか期待しない所には利用できない。 `疑似-複合-選択子$は、[ その`出自の要素$との関係性を表出する,ある`結合子$ ]を伴っているかのように動作する — `子~結合子$が親~要素との関係性を表出するのと同じく。 ◎ Note: A pseudo-compound selector is not a compound selector, and can’t be used in places that expect a compound selector only. Pseudo-compound selectors act as if they carry a combinator with themselves, expressing their relationship with their originating element, just as the > combinator expresses a relationship with a parent element.
- `結合子@ ( `combinator^en )
- 両側に在る`複合-選択子$で表現される 2 つの要素の関係性についての条件を表す。 ~Selectors ~level 4 の結合子には次の 4 種がある ⇒# `子孫~結合子$(`空白$), `子~結合子$( “大なり記号”, `003E^U ), `直後~同胞~結合子$(“正符号”, `002B^U ), `後続~同胞~結合子$( “~tilde”, `007E^U ) ◎ A combinator is a condition of relationship between two elements represented by the compound selectors on either side. Combinators in Selectors Level 4 include: the descendant combinator (white space), the child combinator (U+003E, >), the next-sibling combinator (U+002B, +), and the subsequent-sibling combinator (U+007E, ~).\
- 所与の 2 つの要素【順序も有意】は、 次を満たすならば`結合子$に`合致して$いるとされる ⇒ `結合子$が表す関係性についての条件に`合致して$いる。 ◎ Two given elements are said to match a combinator when the condition of relationship between these elements is true.
- `複階-選択子@ ( `complex selector^en )
-
`結合子$で分離された 1 個以上の “単位” たち (および,それら “単位” の合間にある`結合子$たち) が成す連列 (`文法$においては `complex-selector$t により表現される)。 それは、 一連の要素が[ それらの`結合子$で述べられる特定0の関係性 ]を同時に満たす条件たちが成す集合を表現する。
`複階-選択子$を成す各 “単位” (`文法$においては `complex-selector-unit$t により表現される)は、 順に[ 0 〜 1 個の`複合-選択子$, 0 個以上の`疑似-複合-選択子$ ]からなる,空でない連列である。
◎ A complex selector is a sequence of one or more compound selectors and/or pseudo-compound selectors, with compound selectors separated by combinators. It represents a set of simultaneous conditions on a set of elements in the particular relationships described by its combinators. (Complex selectors are represented by <complex-selector> in the selectors grammar.)\ -
所与の[ 要素/`疑似要素$ ] %E は、 ~AND↓ を満たす要素~群 %L が在るとき, `複階-選択子$ %S に`合致して$いるとされる:
- %L を成す要素の個数 ~EQ %S を成す単位の個数 — 以下、 %N と記す。
-
どの %n ~IN { 1 〜 %N } に対しても、[ %L を成す %n 個目の要素 %要素, %S を成す %n 個目の単位 %単位 ]は ~AND↓ を満たす:
- %要素 は、 %単位 を成す`複合-選択子$ — 無い場合は`全称~選択子$が在るものと見做す — に`合致して$いる
- %単位 を成す どの`疑似-複合-選択子$ %P に対しても、 次を満たす`疑似要素$ %疑似要素 がある ⇒ [ %疑似要素 は %P に`合致して$いる ]~AND[ %要素 ~EQ %疑似要素 の`最終的な出自の要素$ ]
- どの %n ~IN { 1 〜 %N ~MINUS 1 } に対しても、 次が満たされる ⇒ %L を成す[ %n , %n ~PLUS 1 ]個目の要素は, %S を成す[ %n , %n ~PLUS 1 ]個目の単位の合間に在る結合子による関係性を満たす
- %E は %S を成す最後の単位の最後の[ `複合-選択子$/`疑似-複合-選択子$ ]に`合致して$いる
- 【 原文は行間情報が多いので、 この訳では,`文法§に基づいて記述を補完している。 】
【 これらの語は,上述の様に階層的な関係で区別されるものであるが、 (構文上は/機能的には)同時に: `単純-選択子$は, 1 個のそれからなる`複合-選択子$と見なすこともでき、 `複合-選択子$は, 1 個のそれからなる`複階-選択子$と見なすこともでき、 `複階-選択子$は, 1 個のそれからなる`選択子~list$と見なすこともできる。 その結果, 1 個の`単純-選択子$は,`選択子~list$と見なせることになり、 `複合-選択子$の一部分もまた `複合-選択子$と見なすことができ, `複階-選択子$の一部分もまた `複階-選択子$と見なすこともできる, 等々になる。 したがって,例えば、 複階-選択子に適用される~algoや要件は, 型~選択子などの単純-選択子や複合-選択子, 等々にも(それを複階-選択子と見なす下で)適用されることになる。 】
例えば,次に挙げる選択子に合致するものは: ◎ For example,\
- `.foo.bar^css ⇒ `foo^v, `bar^v 両~classを伴う要素。 ◎ .foo.bar matches an element with both "foo" and "bar" classes.
- `.ancestor > .foo.bar^css ⇒ `.foo.bar^css に合致する要素のうち, その親~要素は `ancestor^v ~classを伴うもの ( `子~結合子$により指示されるとおり)。 ◎ .ancestor > .foo.bar matches a subset of those elements: only those whose parent element (as indicated by the > combinator) has the "ancestor" class.
- `.foo.bar::before^css ⇒ `before$pe 疑似要素のうち, その`出自の要素$は `.foo.bar^css に合致するもの。 ◎ .foo.bar::before matches a ::before pseudo-element, whose originating element matches .foo.bar.
[ `単純-選択子$/`複合-選択子$/`複階-選択子$ ]たちが `成す~list@ とは、 これらいずれかの選択子たちが成す~commaで分離された~listである 【~listが空な場合(空白のみ)、`無効な選択子$になる】 。 [ どの選択子か未指定な場合/周囲の注釈文から明らかな場合 ]は、 単に `選択子~list@ とも称される。 既定では、 `複階-選択子$たちが`成す~list$の意味になる。 (追加的な情報は、 `選択子~list§を見よ。 正式な構文については、 `文法§における各種 `*-selector-list^t 生成規則を見よ。) ◎ A list of simple/compound/complex selectors is a comma-separated list of simple, compound, or complex selectors. This is also called just a selector list when the type is either unimportant or specified in the surrounding prose; if the type is important and unspecified, it defaults to meaning a list of complex selectors. (See § 4.1 Selector Lists for additional information on selector lists and the various <*-selector-list> productions in the grammar for their formal syntax.)\
所与の要素 %E は、 次を満たすならば,`選択子~list$ %S に`合致して$いるとされる ⇒ %E は %S 内の 1 個以上の`選択子$に`合致して$いる ◎ A given element is said to match a selector list when it matches any (at least one) of the selectors in that selector list.
3.2. ~data~model
選択子は、 ~DOM~tree `DOM$r などの要素~treeに対し評価される。 この仕様においては、 “文書~tree”, あるいは “~source文書” とも称される。 ◎ Selectors are evaluated against an element tree such as the DOM. [DOM] Within this specification, this may be referred to as the "document tree" or "source document".
各~要素は、 次に挙げる 5 種の側面 【これらは、以下では “特能( `feature^en )” と総称される】 に基いて選択される — いずれも文字列として照合される: ◎ Each element may have any of the following five aspects, which can be selected against, all of which are matched as strings:
- 要素の型(~tag名とも呼ばれる) ◎ The element’s type (also known as its tag name).
- 要素が属する名前空間 ◎ The element’s namespace.
- ~ID ◎ An ID.
- 要素が属する 0 個以上の~class (名前を持つ~group) ◎ Classes (named groups) to which it belongs.
- [ 名前, 値 ]の~pairである,属性 ◎ Attributes, which are name-value pairs.
選択子の多くは、 `文書~言語@ ( `document language^en ) の意味論 (すなわち,文書~treeの[ 言語と意味論 ]) に依存したり, `~host言語@ ( `host language^en ) (すなわち,選択子~構文を利用している言語)の意味論に依存する。 例えば, `lang()$ps 選択子は、 要素に自然言語が どう結付けられるかを定義する際に,`文書~言語$(例: ~HTML)に依存する。 少し異なる例として, `first-line$pe 疑似要素は、[ それが何を表現するか, その何かに対し何を行えるか ]を定義する際に,`~host言語$(例: ~CSS)に依存する。 ◎ Many of the selectors depend on the semantics of the document language (i.e. the language and semantics of the document tree) and/or the semantics of the host language (i.e. the language that is using selectors syntax). For example, the :lang() selector depends on the document language (e.g. HTML) to define how an element is associated with a language. As a slightly different example, the ::first-line pseudo-element depends on the host language (e.g. CSS) to define what a ::first-line pseudo-element represents and what it can do.
3.2.1. 無特能な要素
個々の要素には、 上に挙げた特能のうち一部を欠くものもある中で, `無特能@ ( `featureless^en )なもの — どの特能も備えないもの — もある。 `無特能$な要素に合致することが許容される選択子 — 以下, “許容されるもの” と略記する — は、 次に挙げるものに限られる: ◎ While individual elements may lack any of the above features, some elements are featureless. A featureless element does not match any selector at all, except:
- `単純-選択子$のうち,許容されるものとして明示的に定義されたもの。 ◎ simple selectors it is explicitly defined to match
- 次を満たす`複合-選択子$ ⇒ それが包含する`単純-選択子$は、 いずれも,許容されるものである。 ◎ compound selectors, if all contained simple selectors are allowed to match it
- 次を満たす`複階-選択子$ ⇒ `~subject$を~targetにする【すなわち,末尾の】`複合-選択子$は、 許容されるものである。 ◎ complex selectors, if the compound selector targeting the subject is allowed to match it
- 次を満たす`選択子~list$ ⇒ 当の~list内に,許容されるものが在る。 ◎ selector lists, if at least one selector in the list is allowed to match it
- 次を満たす`論理-組合n疑似類$ ⇒ その選択子~引数は、 許容されるものである。 ◎ logical combination pseudo-classes, if their argument selector is allowed to match it
- 次を満たす `has()$ps 疑似類 ⇒ 次を満たす`複合-選択子$の一部を成している ⇒ それを成す`他の^em`単純-選択子$として,許容されるものが在る。 ◎ the :has() pseudo-class, if and only if the compound selector it’s part of contains at least one other simple selector that’s allowed to match it.
ある選択子が`既定の名前空間$ `CSS3NAMESPACE$r 【!`CSS-NAMESPACES-3$r 】以外に関しては,ある`無特能$な要素に合致する場合 (無特能な要素は、 他が定義されない限り,どの名前空間にも属さないので)、 既定の名前空間は,合致することを防止しない。 ◎ If a selector would otherwise match a featureless element, except for the existence of the default namespace [CSS-NAMESPACES-3] (because featureless elements do not have a namespace unless otherwise defined), the default namespace does not prevent the match.
例えば,`~shadow~tree$における`~shadow~host$は、 `無特能$である — `host$ps, `host-context()$ps (および、 `:is(:host, :root)^css など,それらを含んでいる組合n) を除く,`どの^em`疑似類$にも合致しない。 ◎ For example, the shadow host in a shadow tree is featureless, and can’t be matched by any pseudo-class except for :host and :host-context() (or combinations including those, such as :is(:host, :root)).
`:not(.foo:host)^css の様な`論理-組合n疑似類$は、 `~shadow~host$【!~host要素】には決して合致しない (それが `foo^v ~classを有していない場合でも) — `.foo:host^css には、 `無特能$な要素に合致することは許容されない`単純-選択子$( `.foo^css )が在るので。 ◎ Logical combinations like :not(.foo:host) will never match the host element (even if it doesn’t have a "foo" class), because not all of the simple selectors in .foo:host are allowed to match the shadow host.
類似に, `:not(:host > .foo)^css は、 `~shadow~host$には決して合致しない (`~shadow~host$は自身の子孫ではないが/ それが `foo^v ~classを有していない場合でも) — 当の複階-選択子~引数の~subject( `.foo^css )は、 `~shadow~host$に合致することは許容されないので。 【`not()^ps は否定を意味するが、それでも。】 ◎ Similarly, :not(:host > .foo) will never match the shadow host, even tho the shadow host is indeed *not* a descendant of itself and doesn’t have the "foo" class, because the subject of the complex selector argument (.foo) isn’t allowed to match the shadow host.
不用意に選択することを避けるため、 一般に,`無特能$な要素には、[ それに合致することが許容される`単純-選択子$ ]を明示的に利用しない限り,合致し得ない 【!(which are otherwise intentionally easy to not think about)】。 例えば,`全称~選択子$は、 `無特能$な要素には決して合致しない。 ◎ In general, you can’t match a featureless element without explicitly using one of the simple selectors it’s allowed to match, to avoid accidentally selecting one of these elements (which are otherwise intentionally easy to not think about). For example, * will never match a featureless element.
`has()$ps 用の規則は、 上と類似に働く。 ある`~shadow~host$が `.foo^css に合致する子孫を包含する場合でも、 `:has(.foo)^css は,合致しないことになる — それは、 それ自身のみからなる複合-選択子であり, ~shadow~hostに合致することが許容される`単純-選択子$は無いので。 ~shadow~host【!~host要素】に合致させるためには、 `:host:has(.foo)^css と書く必要がある。 ◎ The rule for :has(), above, works similarly. Even if a shadow host contains a .foo descendant, :has(.foo) will not match it, because the rest of the compound selector (empty) doesn’t contain a simple selector that can match the host. You have to write :host:has(.foo) in order to match the host element.
3.3. 視野~付き選択子
~host~appは、 選択子の視野を[ 文書の特定0の下位tree, あるいは文書の一片 ]†に絞ることもある。 そのような選択子は, `視野~付き選択子@ ( `scoped selector^en )と呼ばれ、 この下位treeの根は `視野ng根@ ( `scoping root^en )と呼ばれる††。 ◎ Some host applications may choose to scope selectors to a particular subtree or fragment of the document, The root of the scoping subtree is called the scoping root.
【† `文書$の下位treeでないもの(`文書片$)も含め,根が `root$ps に合致しない要素~tree 】【†† すなわち,視野を見渡している “視点” 】
`視野~付き$にされた選択子は、 その`視野ng根$の子孫である要素のみに合致する (選択子を成す残りの部分†に対する照合は制約されない — 視野に入る必要があるのは、 当の選択子の`~subject$を成す要素たちに限られる††)。 ◎ When a selector is scoped, it matches an element only if the element is a descendant of the scoping root. (The rest of the selector can match unrestricted; it’s only the final matched elements that must be within the scope.)
【† “残りの部分( `the rest^en )” とは、 当の選択子(`複階-選択子$)を成す最後の “単位” — 要素に直に合致する`複合-選択子$ (`~subject$が疑似要素である場合は`疑似-複合-選択子$も含む) — 以外を指す。 例えば,選択子 "`a > b^css" を成す “残り” は、 "`a >^css" ( `b^css 以外)を指す。 】【†† 言い換えれば、 視野~付きでない下で合致した要素たちを`視野ng根$の子孫のみを残すよう絞込む。 】
例えば, `DOM$r にて定義される `querySelector()$c ~methodでは、[ 選択子を当の要素による`視野~付き$にして評価する ]ことを作者に許容する。 ◎ For example, the querySelector() method defined in [DOM] allows the author to evaluate a scoped selector relative to the element it’s called on.
`widget.querySelector("a")^c の様な~callは、 `widget^e 要素の内側に在る `a^e 要素のみを見出すことになる — 文書~内に散らばっている他の `a^e 要素は無視して。 ◎ A call like widget.querySelector("a") will thus only find a elements inside of the widget element, ignoring any other as that might be scattered throughout the document.
3.4. 相対~選択子
ある種の文脈は、 `相対~選択子@ ( `relative selector^en ) を受容し得る。 それは、[ 1 個~以上の `~anchor要素@ に相対的な要素を表現する選択子 ]用の略式である。 相対~選択子は、 `結合子$から始まる — 結合子が無い場合,暗黙な`子孫~結合子$が先頭に在る。 加えて、 当の選択子の先頭には,`~anchor要素$を表現している暗黙な選択子が在る。 ◎ Certain contexts may accept relative selectors, which are a shorthand for selectors that represent elements relative to one or more relative selector anchor elements. Relative selectors begin with a combinator, with a selector representing the anchor element implied at the start of the selector. (If no combinator is present, the descendant combinator is implied.)
【 “相対” は、 `構造と各種用語§ にて定義される各種~選択子の階層関係とは別々な,それらを拡張する概念である。 】【 暗黙な`子孫~結合子$を伴う相対~選択子は、 構文上は,通常の選択子と判別し得ない。 相対~選択子を利用できるのは、 それを明示的に期待する所に限られよう。 】【 通常の選択子は、 “先頭に[ `~anchor要素$として `root$ps, 暗黙な`子孫~結合子$ ]を伴う`相対~選択子$である” と解釈することもできる。 】
`文法$においては、 `相対~選択子$は `relative-selector$t により表現され, それらが成す~listは `relative-selector-list$t により表現される。 ◎ Relative selectors are represented by <relative-selector> in the selectors grammar, and lists of them by <relative-selector-list>.
3.5. 疑似類
`疑似類@ ( `pseudo-class^en )は、 文書~treeの外側にある情報に基づく選択を, あるいは 他の`単純-選択子$を利用して表出するには不便または不可能な選択を許可するような,`単純-選択子$である。 疑似類は、 文書~自身は変化しなくとも,[ 利用者が文書とヤリトリする間に,要素は疑似類を獲得したり, 失ったりし得る ]イミで動的でもある。 `疑似類$は、[ 文書~source/文書~tree ]に現れたり,それを改変することはない。 ◎ Pseudo-classes are simple selectors that permit selection based on information that lies outside of the document tree or that can be awkward or impossible to express using the other simple selectors. They can also be dynamic, in the sense that an element can acquire or lose a pseudo-class while a user interacts with the document, without the document itself changing. Pseudo-classes do not appear in or modify the document source or document tree.
`疑似類$の構文は、 次が成す並びとして与えられる:
- ~colon( `003A^U )
- `疑似類$の名前を表す`~CSS識別子$
- `関数形~疑似類@ ( `functional pseudo-class^en )である場合に限り ⇒ 丸括弧で括られた 0 個以上の引数
例えば、 `valid$ps は定例の疑似類であり, `lang()$ps は`関数形~疑似類$である。 ◎ For example, :valid is a regular pseudo-class, and :lang() is a functional pseudo-class.
すべての~CSS~keywordと同様に、 `疑似類$の名前は `~ASCII大小無視$である。 ~colonと`疑似類$の名前の間には,`空白$は許容されない。 また,通例の~CSS構文と同様、 関数の名前と後続の開き丸括弧の間にも`空白$は許容されない (しがたって, ~CSS `function-token$t を形成する)。 通例の~CSS構文と同様、 他から指定されない限り,`関数形~疑似類$の各~引数の周囲には,`空白$は許容される。 ◎ Like all CSS keywords, pseudo-class names are ASCII case-insensitive. No white space is allowed between the colon and the name of the pseudo-class, nor, as usual for CSS syntax, between a functional pseudo-class’s name and its opening parenthesis (which thus form a CSS function token). Also as usual, white space is allowed around the arguments inside the parentheses of a functional pseudo-class unless otherwise specified.
`疑似類$は、 他の`単純-選択子$と同様に,選択子に包含されるすべての`複合-選択子$において許容されるが、 `型~選択子$, または`全称~選択子$(もし在れば)に後続しなければナラナイ。 ◎ Like other simple selectors, pseudo-classes are allowed in all compound selectors contained in a selector, and must follow the type selector or universal selector, if present.
注記: `疑似類$には、 両立し得ないものもある (それらを包含している`複合-選択子$は、 妥当であるが,何にも合致しないことになる)。 他のものは、 同じ要素に同時に適用し得る。 ◎ Note: Some pseudo-classes are mutually exclusive (such that a compound selector containing them, while valid, will never match anything), while others can apply simultaneously to the same element.
3.6. 疑似要素
`疑似要素@ ( `pseudo-element^en )は, 文書~tree内には直に現れない “`要素^em” を表現する — ある種の`疑似類$が[ 文書~treeには直に現れない追加的な状態~情報 ]を表現するのと類似に。 `疑似要素$は、[ 文書~言語が供するものを超える,文書~treeについての抽象-化 ]を創出するために利用される — 例えば、[ 文書~言語の要素に対応しない,文書を成すある部位 ](要素~境界と揃わない範囲, 文書の~tree構造に収まらないものも含む) を選択するために利用され得る。 そのような部位は,例えば、[ 文書~treeに含まれない内容/ 文書~treeを別形へ投影した内容 ]を表現したり,[ ~style付け/ ~layout/ 利用者-ヤリトリ/ その他,文書~treeに反映されない処理n ]により供される情報に依拠する。 ◎ Similar to how certain pseudo-classes represent additional state information not directly present in the document tree, a pseudo-element represents an element not directly present in the document tree. They are used to create abstractions about the document tree beyond those provided by the document tree. For example, pseudo-elements can be used to select portions of the document that do not correspond to a document-language element (including such ranges as don’t align to element boundaries or fit within its tree structure); that represent content not in the document tree or in an alternate projection of the document tree; or that rely on information provided by styling, layout, user interaction, and other processes that are not reflected in the document tree.
【 “疑似要素” という語は、 この種の “要素” を`~subject$とする選択子を意味することもある — それは、 実際には, “疑似要素~選択子” の略称である。 】
例えば,文書~言語は[ 要素~内容を成す最初の行l, それを成す最初の字l ]に~accessする仕組みを提供しないが、 それを~styleすることを許容する`疑似要素$ ( `first-line$pe, `first-letter$pe ) はある。 とりわけ, `first-line$pe の事例では、[ 当の疑似要素が内容を成す どの部位を表現するか ]は,[ 文書~treeからは推定し得ない~layout情報 ]に依存することに注意。 ◎ For instance, document languages do not offer mechanisms to access the first letter or first line of an element’s content, but there exist pseudo-elements (::first-letter and ::first-line) that allow those things to be styled. Notice especially that in the case of ::first-line, which portion of content is represented by the pseudo-element depends on layout information that cannot be inferred from the document tree.
`疑似要素$には、 文書に元から存在しない内容を表現するものもある — 要素の[ 前/後 ]に追加的な内容を挿入する[ `before$pe / `after$pe ]疑似要素など。 ◎ Pseudo-elements can also represent content that doesn’t exist in the source document at all, such as the ::before and ::after pseudo-elements which allow additional content to be inserted before or after the contents of any element.
`疑似類$と同様に、 `疑似要素$も,[ 文書~source/文書~tree ]内には現れず, それを改変することもない。 したがって疑似要素は、 `構造上の疑似類$の解釈にも,[ その`出自の要素$や その【子孫や先祖たちが成す】~tree ]に関わる他の選択子の解釈にも影響しない。 ◎ Like pseudo-classes pseudo-elements do not appear in or modify the document source or document tree. Accordingly, they also do not affect the interpretation of structural pseudo-classes or other selectors pertaining to their originating element or its tree.
[ どの疑似要素が存在し, その型は何で, どのような能があるか ]は、 ~host言語が定義する。 ~CSSに存在する疑似要素は、 `CSS-PSEUDO-4$r にて定義される — うち一部は、 `~level 2$, `~level 3$ においても定義される。 【網羅的ではない — 疑似要素を定義する~CSS~moduleは他にもある。】 ◎ The host language defines which pseudo-elements exist, their type, and their abilities. Pseudo-elements that exist in CSS are defined in [CSS21] (Level 2), [SELECT] (Level 3), and [CSS-PSEUDO-4] (Level 4).
3.6.1. 構文
`疑似要素$の構文は、 次が成す並びとして与えられる:
- "`::^css" ( 2 個の `003A^U 並び)
- `疑似要素$の名前を表す`~CSS識別子$
- `関数形~疑似要素@ の事例では、 丸括弧で括られた引数~群
`疑似要素$の名前は、 `~ASCII大小無視$である。 [ 2 個の~colonの合間/~colonと`疑似要素$の名前の合間 ]には、 `空白$は許容されない。
◎ The syntax of a pseudo-element is "::" (two U+003A COLON characters) followed by the name of the pseudo-element as an identifier, and, in the case of a functional pseudo-element, a pair of parentheses containing its arguments. Pseudo-element names are ASCII case-insensitive. No white space is allowed between the two colons, or between the colons and the name.疑似要素と疑似類は、 `~level 2$ までは, ともに 1 個の~colonによる構文で一緒くたにされていた。 なので,~UAは、 ~level 2 までの疑似要素 — `before$pe, `after$pe, `first-line$pe, `first-letter$pe — 用には,~colon 1 個による記法も受容するモノトスル。 この[ 互換性を得るための記法 ]は、 他の疑似要素には許容されない。 この構文は,非推奨にされたので、 作者は,これらの疑似要素にも`~level 3$ 以上の二重~colon構文を利用するベキである。 ◎ Because CSS Level 1 and CSS Level 2 conflated pseudo-elements and pseudo-classes by sharing a single-colon syntax for both, user agents must also accept the previous one-colon notation for the Level 1 & 2 pseudo-elements (::before, ::after, ::first-line, and ::first-letter). This compatibility notation is not allowed for any other pseudo-elements. However, as this syntax is deprecated, authors should use the Level 3+ double-colon syntax for these pseudo-elements.
`疑似要素$は、 `無特能$であり,他のどの選択子にも合致し得ない。 ◎ Pseudo-elements are featureless, and so can’t be matched by any other selector.
3.6.2. 文書~treeへの束縛-法
`疑似要素$は,~tree内に独立に存在することはない — それは常に、 その `出自の要素@ ( `originating element^en )と呼ばれる,~page上の別の要素に束縛される。 構文上は、 `疑似要素$は,その`出自の要素$を表現している`複合-選択子$の直後に続く。 この`複合-選択子$が省略された場合、 それは,`全称~選択子$ `*^css であるものと見做される。 ◎ Pseudo-elements do not exist independently in the tree: they are always bound to another element on the page, called their originating element. Syntactically, a pseudo-element immediately follows the compound selector representing its originating element. If this compound selector is omitted, it is assumed to be the universal selector *.
【 `出自の要素$は,`出自の疑似要素$の概念も包摂するが、 この段落は,そのことを織り込んでいない。 】
例えば、 選択子 `div a::before^css において,頭部の選択子に合致する `a^e 要素は、 ~~付随する `before$pe 疑似要素~用の`出自の要素$になる。 ◎ For example, in the selector div a::before, the a elements matched by the selector are the originating elements for the ::before pseudo-elements attached to them.
選択子 `::first-line^css は,`*::first-line^css と等価であり、 文書~内の各 要素`ごとに^em,その `first-line$pe 疑似要素を選択する。 ◎ The selector ::first-line is equivalent to *::first-line, which selects the ::first-line pseudo-element on every element in the document.
`疑似要素$ %S を含んでいる選択子においては、 選択子の中の %S より前を成す部分が %S 用の`出自の要素$を選択し, %S より後を成す部分は(もしあれば) %S 自身に適用される(次節を見よ)。 ◎ When a pseudo-element is encountered in a selector, the part of the selector before the pseudo-element selects the originating element for the pseudo-element; the part of the selector after it, if any, applies to the pseudo-element itself. (See below.)
3.6.3. 疑似要素に対する疑似類による絞り込み
ある種の`疑似要素$には、 その直後に,ある種の`疑似類$の任意の組合nが後続してもヨイ 【`疑似-複合-選択子$を見よ】 — その事例では、 当の`疑似要素$は,それらの疑似類に対応する状態にあるときに限り表現される。 この仕様は、 どの`疑似要素$にも,各種[ `論理-組合n疑似類$, `利用者~動作~疑似類$ ]からなる任意の組合nが後続することを許容する。 他の仕様は、 特定0の`疑似要素$に追加的な`疑似類$が~~付随することを許容してもヨイ。 明示的に許容されたものでない組合nは、 `無効な選択子$になる。 ◎ Certain pseudo-elements may be immediately followed by any combination of certain pseudo-classes, in which case the pseudo-element is represented only when it is in the corresponding state. This specification allows any pseudo-element to be followed by any combination of the logical combination pseudo-classes and the user action pseudo-classes. Other specifications may allow additional pseudo-classes to be attached to particular pseudo-elements. Combinations that are not explicitly allowed are invalid selectors.
注記: `論理-組合n疑似類$は、 それが置かれた位置における[ 選択子の妥当性 ]に対する制約を,その引数へ引き継ぐ。 ◎ Note: The logical combination pseudo-classes pass any restrictions on validity of selectors at their position to their arguments.
例えば, `hover$ps 疑似類は どの`疑似要素$にも適用し得るものと指定されているので、 `::first-line:hover^css は,最初の行l~上に~hoverされたときに合致することになる。 一方で,[ `focus$ps, `first-line$pe ]は いずれも[ `first-line$pe に `focus$ps を適用し得る ]ものとは定義されていないので、 選択子 `::first-line:focus^css に合致するものは,決してないことになる。 ◎ For example, since the :hover pseudo-class specifies that it can apply to any pseudo-element, ::first-line:hover will match when the first line is hovered. However, since neither :focus nor ::first-line define that :focus can apply to ::first-line, the selector ::first-line:focus will never match anything.
`::first-line:hover^css と `:hover::first-line^css とは、 かなり異なることに注意。 後者は、 ~hoverされた どの`出自の要素$に対しても,その最初の行lに合致する。 例えば, `:hover::first-line^css は、 段落を成す どの行lに~hoverされたときでも,段落を成す最初の行lに合致する。 一方で, `::first-line:hover^css が合致するのは、 最初の行lに~hoverされたときに限られる。 ◎ Notice that ::first-line:hover is very different from :hover::first-line, which matches the first line of any originating element that is hovered! For example, :hover::first-line also matches the first line of a paragraph when the second line of the paragraph is hovered, whereas ::first-line:hover only matches if the first line itself is hovered.
3.6.4. 下位-疑似要素
`疑似要素$には、 他の`疑似要素$の`出自の要素$になり得るものもある — 前者は後者の `出自の疑似要素@ ( `originating pseudo-element^en ) と称され,後者は前者の `下位-疑似要素@ ( `sub-pseudo-element^en )として定義される。 例えば, `list-item$v `表示~型$に `before$pe が与えられたとき、 それは,その`下位-疑似要素$ `::before::marker^css の`出自の疑似要素$になる。 ◎ Some pseudo-elements are able to be the originating element of other pseudo-elements, which are defined as the sub-pseudo-elements of this originating pseudo-element. For example, when ::before is given a list-item display type, it becomes the originating pseudo-element of its ::before::marker sub-pseudo-element.
`出自の要素$が本物の(疑似要素でない)要素であることを一義化する必要があるときは、 `最終的な出自の要素@ ( `ultimate originating element^en )と称される。 ◎ Where disambiguation is needed, the term ultimate originating element refers to the real (non-pseudo) element from which a pseudo-element originates.
【 “最終的” とは、 `出自の要素$を本物の要素に達するまで遡ることを意味する — すなわち、 所与の`疑似要素$ %E に対し, %E の`最終的な出自の要素$は、 %E の`出自の要素$ %F に応じて[ 疑似要素であるならば %F の`最終的な出自の要素$/ (本物の)要素であるならば %F ]として定義される。 】
別の仕様にて,対応している`下位-疑似要素$が存在するものと明示的に定義されない限り、 疑似要素~選択子は,別の疑似要素~選択子と複合されたときには無効になる。 例えば、 `::before::before^css は`無効な選択子$になるが, `::before::marker^css は ( `::before::marker^css `下位-疑似要素$を~supportする実装においては) 妥当になる。 ◎ Unless the corresponding sub-pseudo-element is explicitly defined to exist in another specification, pseudo-element selectors are not valid when compounded to another pseudo-element selector. So, for example, ::before::before is an invalid selector, but ::before::marker is valid (in implementations that support the ::before::marker sub-pseudo-element).
【 構文上は`疑似-複合-選択子$の形をとり、 順序も有意になる (順序を逆にした `::marker::before^css は、[ `marker^pe の`下位-疑似要素$として `before^pe が存在する ]ものと定義されない限り,無効になる)。 】
3.6.5. 内部~構造
一部の`疑似要素$は、 内部~構造を持つものと定義されている。 その種の`疑似要素$には,その関係性を表出するために[ `子~結合子$/`子孫~結合子$ ]が後続していてもよい。 他の疑似要素については、 `結合子$が後続する場合,`無効な選択子$になる。 ◎ Some pseudo-elements are defined to have internal structure. These pseudo-elements may be followed by child/descendant combinators to express those relationships. Selectors containing combinators after the pseudo-element are otherwise invalid.
例えば,[ `::first-letter + span^css / `::first-letter em^css ]は、 無効な選択子になる。 しかしながら, 新たな `shadow$pe 疑似要素が内部~構造を持つものと定義されていたなら、 `::shadow > p^css は,選択子として妥当になろう。 【 `shadow^pe は(現在の編集者草案においては)廃された。】 ◎ For example, ::first-letter + span and ::first-letter em are invalid selectors. However, if a new ::shadow pseudo-element were defined to have internal structure, ::shadow > p would be a valid selector.
注記: 既存の疑似要素の能力は,将来の仕様により拡げられることもあるので、 現在は無効でも (例 `::first-line :any-link^css ), 未来には妥当になり得る。 ◎ Note: A future specification may expand the capabilities of existing pseudo-elements, so some of these currently-invalid selectors (e.g. ::first-line :any-link) may become valid in the future.
そのような`疑似要素$の子は、 同時に他の要素の子にもなり得る。 しかしながら、 少なくとも~CSSにおける それらの具現化は, `~box~tree$の~tree構造たる部分は保守される様に定義されなければナラナイ。 ◎ The children of such pseudo-elements can simultaneously be children of other elements, too. However, at least in CSS, their rendering must be defined so as to maintain the tree-ness of the box tree.
3.7. 文字大小比較
すべての~Selectors構文は、 その制御~下にない部分を除いて,`~ASCII大小無視$である (すなわち, [a-z] と [A-Z] は等価と見なされる) — 特定的には、 文書~言語の[ 要素~名, 属性~名, 属性~値 ]における文字大小比較は,文書~言語に依存する。 ◎ All Selectors syntax is ASCII case-insensitive (i.e. [a-z] and [A-Z] are equivalent), except for the parts that are not under the control of Selectors: specifically, the case-sensitivity of document language element names, attribute names, and attribute values depends on the document language.
例えば、 ~HTMLにおいては,[ 要素~名, 属性~名 ]は`~ASCII大小無視@~HTMLselectors#case-sensitivity-of-selectors$であるが、 ~XMLにおいては,文字大小は区別される。 ◎ For example, in HTML, element and attribute names are ASCII case-insensitive, but in XML, they are case-sensitive.
名前空間~接頭辞の文字大小比較は、 `CSS3NAMESPACE$r にて定義される。 `言語~範囲$の文字大小比較は、 `lang()$PS にて定義される。 ◎ Case sensitivity of namespace prefixes is defined in [CSS3NAMESPACE]. Case sensitivity of language ranges is defined in the :lang() section.
~Selectorsにおける `空白@ は、 次に挙げる符号位置のみからなる ⇒# `0020^U0 `SPACE^cn, `0009^U0 `TAB^cn, `000A^U0 `LINE FEED^cn, `000D^U0 `CARRIAGE RETURN^cn, `000C^U0 `FORM FEED^cn
空白に似た他の符号位置 (例: `2003^U0 `EM SPACE^cn, `3000^U0 `IDEOGRAPHIC SPACE^cn ) は、 構文上は,`空白$を成すものとは決して見なされない。
◎ White space in Selectors consists of the code points SPACE (U+0020), TAB (U+0009), LINE FEED (U+000A), CARRIAGE RETURN (U+000D), and FORM FEED (U+000C). Other space-like code points, such as EM SPACE (U+2003) and IDEOGRAPHIC SPACE (U+3000), are never considered syntactic white space.~Selectorsにおける符号位置は、 `~escape法$【! CSS2 の`~escape法~規則$ `CSS21$r 】に則って,~backslash `005C^U により~escapeできる。 文字~escape法は,~Selectorsの中でその文字が持ち得る特別な意味を “取り消す”ことに注意。 例えば,選択子 `#foo>a^css は`結合子$を包含しているが、 `#foo\>a^css は 代わりに~ID `foo>a^l を伴う要素を選択する。 ◎ Code points in Selectors can be escaped with a backslash according to the same escaping rules as CSS. [CSS21] Note that escaping a code point “cancels out” any special meaning it may have in Selectors. For example, the selector #foo>a contains a combinator, but #foo\>a instead selects an element with the id foo>a.
3.8. 名前空間~接頭辞の宣言-法
一部の選択子は、 名前空間~接頭辞を~supportする。 名前空間~接頭辞を `宣言-@ する仕組みは、 ~Selectorsを利用する言語により指定されるベキである。 言語が名前空間~接頭辞の宣言の仕組みを指定しない場合、 いかなる接頭辞も宣言されない。 ~CSSにおいては、 名前空間~接頭辞は `namespace$at 規則 `CSS3NAMESPACE$r により宣言される。 ◎ Certain selectors support namespace prefixes. The mechanism by which namespace prefixes are declared should be specified by the language that uses Selectors. If the language does not specify a namespace prefix declaration mechanism, then no prefixes are declared. In CSS, namespace prefixes are declared with the @namespace rule. [CSS3NAMESPACE]
3.9. 無効な選択子と~errorの取扱い
次に挙げるものは、 `無効な選択子@ ( `invalid selector^en, 妥当でない選択子) になる — ~UAは、 それらの取扱い規則に従うモノトスル: ◎ User agents must observe the rules for handling invalid selectors:
- 選択子の構文解析-時に~errorになるもの — 例:認識できない~tokenや, 構文解析のある地点にて許容されない~tokenを含むもの (【!overall】`文法§, 選択子ごとの構文~定義を見よ) ◎ a parsing error in a selector, e.g. an unrecognized token or a token which is not allowed at the current parsing point (see overall § 18 Grammar and per-selector syntax definitions), causes that selector to be invalid.
- `宣言-済み$でない名前空間~接頭辞を包含している`単純-選択子$ ◎ a simple selector containing an undeclared namespace prefix is invalid
- 無効な[ `単純-選択子$/`結合子$/~token ]を包含している選択子 ◎ a selector containing an invalid simple selector, an invalid combinator or an invalid token is invalid.
- 無効な選択子を包含している`選択子~list$ ◎ a selector list containing an invalid selector is invalid.
- 空な選択子 — すなわち,`複合-選択子$を包含しないもの ◎ an empty selector, i.e. one that contains no compound selector, is invalid.
注記: ~CSSの構文解析における前方-互換な原則と整合するよう、 ~UAは,自身が実用~levelで~supportしない[ 疑似類/疑似要素/結合子/その他の構文-構成子 ]を`無効な選択子$として扱うモノトスル。 `部分的な実装@~CSSSNAPSHOT#conform-partial$を見よ。 ◎ Note: Consistent with CSS’s forwards-compatible parsing principle, UAs must treat as invalid any pseudo-classes, pseudo-elements, combinators, or other syntactic constructs for which they have no usable level of support. See Partial implementations.
`無効な選択子$は、 空集合を表現するので,何にも合致しない。 ◎ An invalid selector represents, and therefore matches, nothing.
3.10. 旧来の別名
一部の選択子には、 `旧来の別名@sel ( `legacy selector alias^en ) がある†。 これは、 構文解析-時点に標準な名前に変換される名前である (したがって、 当の選択子を表現している~obj~modelにおいては,どこにも現れない)。 ◎ Some selectors have a legacy selector alias. This is a name which, at parse time, is converted to the standard name (and thus does not appear anywhere in any object model representing the selector).
【† `selector^en を外さずに訳すなら、 “ある旧来の選択子の名前であって,当の標準な選択子の旧来の別名とされるもの” のようになろう。 】
4. 論理的な組合n
選択子の論理は、[ `複合-選択子$(論理- AND ), `選択子~list$(論理- OR ), `論理-組合n疑似類$ ]により操作できる。 `論理-組合n疑似類@ ( `logical combination pseudo-classes^en )は,[ `is()$ps, `where()$ps, `not()$ps ]の総称であり、 他の`疑似類$が許容される どこでも許容されるが,そこでの制約を その引数へ引き継ぐ (例えば,`複合-選択子$しか許容されない所に置かれた場合、 `is()$ps の中で妥当になるのは`複合-選択子$に限られる)。 ◎ Selector logic can be manipulated by compounding (logical AND), selector lists (logical OR), and the logical combination pseudo-classes :is(), :where(), and :not(). The logical combination pseudo-classes are allowed anywhere that any other pseudo-classes are allowed, but pass any restrictions to their arguments. (For example, if only compound selectors are allowed, then only compound selectors are valid within an :is().)
注記: [ `is()$ps / `where()$ps ]の内側では妥当でない引数は, 当の`疑似類$を無効~化することなく落とされるので、 文脈に応じた制約により無効~化される選択子~引数も, 同様に `is()$ps 疑似類~自体を無効~化することはない。 ◎ Note: Since inside :is() and :where() invalid arguments are dropped without invaliding the pseudo-class itself, selector arguments that are invalidated by contextual restrictions likewise do not invalidate the :is() pseudo-class itself.
4.1. 選択子~list
~comma( `002C^U )で分離された選択子たちが成す~list — `選択子~list$ — は、[ それを成す各`複階-選択子$により個別に選択された要素 ]すべての和集合を表現する。 例えば,~CSSにおいては、 いくつかの選択子が同じ宣言を共有するときは, それらを~commaで分離された~listに~group化してもよい。 ~commaの前後には,`空白$が現れてもよい。 ◎ A comma-separated list of selectors represents the union of all elements selected by each of the individual selectors in the selector list. (A comma is U+002C.) For example, in CSS when several selectors share the same declarations, they may be grouped into a comma-separated list. White space may appear before and/or after the comma.
【 “選択子~list( `selector list^en )” は、 `~level 3$ までは “選択子たちが成す~group ( `groups of selectors^en )” と称されていた (順序を含意する “~list” に改称されたのは、 CSSOM などの仕様にて選択子の処理~model(直列化)を定義する際に, この名称の方が適切になるからと思われる)。 】
宣言が互いに一致する 3 つの規則を一つにまとめることを~~考える: ◎ CSS example: In this example, we condense three rules with identical declarations into one. Thus,
h1 { font-family: sans-serif } h2 { font-family: sans-serif } h3 { font-family: sans-serif }
これは、 次と等価になる: ◎ is equivalent to:
h1, h2, h3 { font-family: sans-serif }
注意: この例では,すべての選択子が妥当なので等価性が成り立つが、 これらのうち一つでも無効なものがあった場合,`選択子~list$全体が無効になる。 後者の書き方では, 3 個の~~見出し要素すべてに対する規則が無効~化されることになる一方、 前者の書き方では,個別に無効~化されることになる。 ◎ Warning: the equivalence is true in this example because all the selectors are valid selectors. If just one of these selectors were invalid, the entire selector list would be invalid. This would invalidate the rule for all three heading elements, whereas in the former case only one of the three individual heading rules would be invalidated.
無効な~CSSの例: ◎ Invalid CSS example:
h1 { font-family: sans-serif } h2..foo { font-family: sans-serif } h3 { font-family: sans-serif }
は、次と等価ではない: ◎ is not equivalent to:
h1, h2..foo, h3 { font-family: sans-serif }
上の選択子( `h1, h2..foo, h3^css )は全体として無効であり,~style規則~全体が落とされるので。 (選択子が~group化されていなければ、 `h2..foo^css 用の規則のみが落とされる。) ◎ because the above selector (h1, h2..foo, h3) is entirely invalid and the entire style rule is dropped. (When the selectors are not grouped, only the rule for h2..foo is dropped.)
4.2. 論理和: `is()^ps 疑似類
論理和( `matches-any^en ) 疑似類 `is()@ps は、 `forgiving-selector-list$t を唯一の引数にとる`関数形~疑似類$である。 ◎ The matches-any pseudo-class, :is(), is a functional pseudo-class taking a <forgiving-selector-list> as its sole argument.
この疑似類は、[ 引数を構文解析した結果の~list ]を成す[ いずれかの選択子に合致する要素 ]に合致する。 結果の~listが空な場合でも、 この疑似類は — 妥当であるが — 何にも合致しないことになる。 ◎ If the argument, after parsing, is an empty list, the pseudo-class is valid but matches nothing. Otherwise, the pseudo-class matches any element that matches any of the selectors in the list.
注記: `is()$ps 疑似類の詳細度は、 引数のうち最も詳細度が高いものに置換される。 したがって, `is()$ps で書かれた選択子の詳細度は、 `is()$ps を外して~~展開したものと等価になるとは限らない。 例えば,次に挙げる 2 つの選択子があるとき:
- `:is(ul, ol, .list) > [hidden]^css
- `ul > [hidden], ol > [hidden], .list > [hidden]^css
`ol$e の子のうち `hidden^a を有するものは、 前者の選択子には詳細度 (0,2,0) で合致する一方で, 後者の選択子には詳細度 (0,1,1) で合致する。 `選択子の詳細度の計算-法§を見よ。
◎ Note: The specificity of the :is() pseudo-class is replaced by the specificity of its most specific argument. Thus, a selector written with :is() does not necessarily have equivalent specificity to the equivalent selector written without :is() For example, if we have :is(ul, ol, .list) > [hidden] and ul > [hidden], ol > [hidden], .list > [hidden] a [hidden] child of an ol matches the first selector with a specificity of (0,2,0) whereas it matches the second selector with a specificity of (0,1,1). See § 17 Calculating a selector’s specificity.疑似要素は,論理和 疑似類では表現し得ない — それらは `is()$ps の中では妥当でない。 ◎ Pseudo-elements cannot be represented by the matches-any pseudo-class; they are not valid within :is().
既定の名前空間~宣言は、 `is()$ps 疑似類の引数を成す どの選択子に対しても, その`~subject$を表現している`複合-選択子$には — それが明示的に[ `全称~選択子$ / `型~選択子$ ]を包含している場合を除き — 影響しない。 ◎ Default namespace declarations do not affect the compound selector representing the subject of any selector within a :is() pseudo-class, unless that compound selector contains an explicit universal selector or type selector.
例えば,次の選択子は、 名前空間を問わず,[ ~hover/~focus ]された任意の要素に合致する。 したがって、 それが合致するものは,既定の名前空間に属する要素のみに制限されない。 ◎ For example, the following selector matches any element that is being hovered or focused, regardless of its namespace. In particular, it is not limited to only matching elements in the default namespace that are being hovered or focused.
*|*:is(:hover, :focus)
一方で,次の選択子は、[ ~hover/~focus ]された要素のうち,既定の名前空間に属するもののみを表現する 【既定の名前空間は宣言-済みと見做すなら】。 `is()$ps 記法の中で明示的に`全称~選択子$が利用されているので: ◎ The following selector, however, represents only hovered or focused elements that are in the default namespace, because it uses an explicit universal selector within the :is() notation:
*|*:is(*:hover, *:focus)
この仕様の以前の草案では、 この疑似類~用の名前に `matches()@ps を利用していた。 ~UAは、 後方-互換性に必要なら, この廃用にされた名前を `is()$ps 用の`旧来の別名$selとして追加的に実装してもヨイ。 ◎ As previous drafts of this specification used the name :matches() for this pseudo-class, UAs may additionally implement this obsolete name as a legacy selector alias for :is() if needed for backwards-compatibility.
4.3. 否定: `not()^ps 疑似類
否定~疑似類 `not()@ps は、 `complex-real-selector-list$t を引数にとる`関数形~疑似類$である。 それは,その引数で表現されない要素を表現する。 ◎ The negation pseudo-class, :not(), is a functional pseudo-class taking a <complex-real-selector-list> as an argument. It represents an element that is not represented by its argument.
注記: `~level 3$ においては、 1 個の`単純-選択子$に限り, `not()$ps の引数に許容されていた。 ◎ Note: In Selectors Level 3, only a single simple selector was allowed as the argument to :not().
注記: `not()$ps 疑似類の詳細度は、[ その~list引数を成す各`複階-選択子$の詳細度 ]のうち最も高いものに置換される — したがって,その挙動は、 `:not(:is(引数))^css と正確に同じになる。 `選択子の詳細度の計算-法§を見よ。 ◎ Note: The specificity of the :not() pseudo-class is replaced by the specificity of the most specific selector in its argument; thus it has the exact behavior of :not(:is(argument)). See § 17 Calculating a selector’s specificity.
`疑似要素$は、 否定~疑似類では表現し得ない — それらは `not()$ps の中では妥当でない。 ◎ Pseudo-elements cannot be represented by the negation pseudo-class; they are not valid within :not().
次の選択子は、 ~HTML文書の中で不能化されていないすべての `button$e 要素に合致する。 ◎ For example, the following selector matches all button elements in an HTML document that are not disabled.
button:not([DISABLED])
次の選択子は、 `FOO^e 要素~以外のすべてを表現する: ◎ The following selector represents all but FOO elements.
*:not(FOO)
次の`複合-選択子$は、 ~link以外のすべての~HTML要素【 ~HTML名前空間に属する要素】を表現する。 ◎ The following compound selector represents all HTML elements except links.
html|*:not(:link):not(:visited)
`is()$ps のときと同じく,既定の名前空間~宣言は、 `not()$ps 疑似類の引数を成す どの選択子に対しても, その`~subject$を表現している`複合-選択子$には — それが明示的に[ `全称~選択子$ / `型~選択子$ ]を包含している場合を除き — 影響しない( `is()$ps の例を見よ)。 ◎ As with :is(), default namespace declarations do not affect the compound selector representing the subject of any selector within a :not() pseudo-class, unless that compound selector contains an explicit universal selector or type selector. (See :is() for examples.)
注記: `not()$ps 疑似類は、 “無用な” 選択子を書くことも許容する。 例えば, `:not(*|*)^css は、 どの要素も表現しない。 あるいは, `div:not(span)^css は、 `詳細度$がより高くなることを除いて, `div^css と等価になる。 ◎ Note: The :not() pseudo-class allows useless selectors to be written. For instance :not(*|*), which represents no element at all, or div:not(span), which is equivalent to div but with a higher specificity.
4.4. 詳細度~調整: `where()^ps 疑似類
詳細度~調整 疑似類 `where()@ps は、 `is()$ps と同じ[ 構文, 機能性 ]を備える`関数形~疑似類$であるが、 `is()$ps と違って,選択子の`詳細度$には寄与しない(その引数も含めて) — `where()$ps の`詳細度$は、 常に 0 になる。 ◎ The Specificity-adjustment pseudo-class, :where(), is a functional pseudo-class with the same syntax and functionality as :is(). Unlike :is(), neither the :where() pseudo-class, nor any of its arguments, contribute to the specificity of the selector—its specificity is always zero.
これは、 選択子~内に~filterを導入しつつ,それに結付けられた~style宣言も上書きし易く保つときに有用になる。 ◎ This is useful for introducing filters in a selector while keeping the associated style declarations easy to override.
経験的な詳細度が作者の期待に沿わないような,共通的な例: ◎ Below is a common example where the specificity heuristic fails to match author expectations:
a:not(:hover) {
text-decoration: none;
}
nav a {
/*
効果なし
◎
Has no effect
*/
text-decoration: underline;
}
しかしながら, `where()$ps を利用すれば、 作者は,自身の意図を明示的に宣言できる: ◎ However, by using :where() the author can explicitly declare their intent:
a:where(:not(:hover)) {
text-decoration: none;
}
nav a {
/*
今度は働く
◎
Works now!
*/
text-decoration: underline;
}
注記: ~Selectorsの将来~levelでは、[ この疑似類の~instanceに明示的に詳細度を設定する ]ための追加的な引数を導入するかもしれない。 ◎ Note: Future levels of Selectors may introduce an additional argument to explicitly set the specificity of that instance of the pseudo-class.
4.5. 関係上の: `has()^ps 疑似類
関係上の疑似類 `has()@ps は、 `relative-selector-list$t を引数にとる`関数形~疑似類$である。 それは、 次を満たす要素 %E を表現する ⇒ 引数を成すいずれかの`相対~選択子$ %S は、 次を満たす ⇒ `~anchor要素$として %E を与える下で %S を評価したとき,合致する要素がある。 ◎ The relational pseudo-class, :has(), is a functional pseudo-class taking a <relative-selector-list> as an argument. It represents an element if any of the relative selectors would match at least one element when anchored against this element.
`has()$ps 疑似類は,入子にできない — `has()$ps の中の `has()$ps は妥当でない。 `疑似要素$も、 `has()^ps の中で許容される ものと明示的に定義されない限り, `has()$ps の中では妥当な選択子でない (そのような疑似要素は、 この仕様では定義されないが,他の仕様にて定義され得る)。 ◎ The :has() pseudo-class cannot be nested; :has() is not valid within :has(). Also, unless explicitly defined as a :has-allowed pseudo-element, pseudo-elements are not valid selectors within :has(). (This specification does not define any :has-allowed pseudo-elements, but other specifications may do so.)
注記: 疑似要素は、 一般に `has()$ps から除外される — それらの多くは,その先祖の~style付けに基づいて条件付きで存在するので、 それらを `has()$ps により~queryすることを許容すると, 循環依存を導入することになるので。 ◎ Note: Pseudo-elements are generally excluded from :has() because many of them exist conditionally, based on the styling of their ancestors, so allowing these to be queried by :has() would introduce cycles.
注記: `has()$ps が引数にとる `relative-selector-list$t は、 `内来的^emに`複階-選択子$になる (それは、 たぶん暗黙的に,結合子から開始するので)。 このことは、 `複階-選択子$を許容しない文脈には `has()$ps を利用し得ないことを意味する — 利用しても引数は無効になることが保証される。 ◎ Note: Since :has() takes a <relative-selector-list>, its arguments are inherently complex selectors (because they start, perhaps implicitly, with a combinator). This means :has() cannot be used in contexts that don’t allow complex selectors; its arguments will be guaranteed to be invalid.
例えば,次に挙げる選択子に合致するものは: ◎ For example,\
- `a:has(> img)^css ⇒ `a^e 要素のうち,子として `img^e 要素が在るもの。 ◎ the following selector matches only <a> elements that contain an <img> child: • a:has(> img)
- `dt:has(+ dt)^css ⇒ `dt^e 要素のうち,直後に別の `dt^e 要素が在るもの。 ◎ The following selector matches a <dt> element immediately followed by another <dt> element: • dt:has(+ dt)
-
`section:not(:has(h1, h2, h3, h4, h5, h6))^css ⇒ `section^e 要素のうち,~~見出し要素を包含しないもの。 ◎ The following selector matches <section> elements that don’t contain any heading elements:
この選択子における疑似類の入子ng順序は重要であることに注意 — 逆順にした選択子 `section:has(:not(h1, h2, h3, h4, h5, h6))^css に合致するものは ⇒ `section^e 要素のうち, ~~見出し要素でない何らかの要素を包含するもの。 ◎ Note that ordering matters in the above selector. Swapping the nesting of the two pseudo-classes, like: • section:has(:not(h1, h2, h3, h4, h5, h6)) ◎ ...would result in matching any <section> element which contains anything that’s not a heading element.
5. 元素的な選択子
5.1. 型(~tag名)選択子
`型~選択子@ ( `type selector^en )は、 文書~言語の要素~型の名前であり, 文書~treeにおける その要素~型の~instanceを表現する。 ◎ A type selector is the name of a document language element type, and represents an instance of that element type in the document tree.
例えば 選択子 `h1^css は、 文書~内の `h1^e 要素を表現する。 ◎ For example, the selector h1 represents an h1 element in the document.
`型~選択子$は、 `~CSS有修飾~名$ — 省略可能な名前空間~接頭辞を伴う`~CSS識別子$ — として書かれる。 `CSS3NAMESPACE$r (`元素的な選択子における名前空間§を見よ。) ◎ A type selector is written as a CSS qualified name: an identifier with an optional namespace prefix. [CSS3NAMESPACE] (See § 5.3 Namespaces in Elemental Selectors.)
5.2. 全称~選択子
`全称~選択子@ ( `universal selector^en )は、 特別な`型~選択子$であり,どの要素~型の要素も表現する。 ◎ The universal selector is a special type selector, that represents an element of any element type.
それは、 局所~名として 1 個の~asterisk ( `002A^U )を伴う`~CSS有修飾~名$として書かれる。 `型~選択子$と同様に,`全称~選択子$も、 ある名前空間に属する要素のみに制約するよう,名前空間で修飾でき、 `元素的な選択子における名前空間§にて定義されるとおり,既定の名前空間に影響される。 ◎ It is written as a CSS qualified name with an asterisk (* U+002A) as the local name. Like a type selector, the universal selector can be qualified by a namespace, restricting it to only elements belonging to that namespace, and is affected by a default namespace as defined in § 5.3 Namespaces in Elemental Selectors.
選択子における`全称~選択子$の有無は、 `無特能$な要素を除き,[ 当の選択子が要素に合致するかどうか ]に効果を及ぼすことはない (`無特能$な要素は、 どの選択子†にも合致しない — `全称~選択子$も含めて††,)。 ◎ Unless an element is featureless, the presence of a universal selector has no effect on whether the element matches the selector. (Featureless elements do not match any selector, including the universal selector.)
【† `無特能$な要素に合致するものと明示的に定義されたものを除く — †† そのような選択子に`全称~選択子$も~~付された場合、 合致しなくなることになる。 】【 `全称~選択子$を表す~wildcard `002A^U は、 (名前空間は脇に置くなら)[ ある要素~型で代用したとき合致するならば,合致する ]ことを表す。 】
- `*[hreflang|=en]^css と `[hreflang|=en]^css は等価。 ◎ *[hreflang|=en] and [hreflang|=en] are equivalent,
- `*.warning^css と `.warning^css は等価。 ◎ *.warning and .warning are equivalent,
- `*#myid^css と `#myid^css は等価。 ◎ *#myid and #myid are equivalent.
`全称~選択子$は、 他の`型~選択子$と同じ構文~規則に従う — `複合-選択子$においては、 それは,高々 1 回まで, かつ最初の`単純-選択子$として現れなければナラナイ。 ◎ The universal selector follows the same syntax rules as other type selectors: only one can appear per compound selector, and it must be the first simple selector in the compound selector.
注記: 照合の挙動には効果がなくとも、 `全称~選択子$を追加すれば,選択子は読み易くなることがある。 例えば `div :first-child^css は `div:first-child^css に見誤り易い。 `div *:first-child^css の方が違いが明白になる。 ◎ Note: In some cases, adding a universal selector can make a selector easier to read, even though it has no effect on the matching behavior. For example, div :first-child and div:first-child are somewhat difficult to tell apart at a quick glance, but writing the former as div *:first-child makes the difference obvious.
5.3. 元素的な選択子における名前空間
[ `型~選択子$/`全称~選択子$ ]には,省略可能な名前空間~成分も許容される。 すなわち,要素~名には、 `宣言-済み$な名前空間~接頭辞が — 名前空間~分離子 `007C^U で分離して — 前置されてよい。 それは、 各~形に応じて,次の意味を持つ: ◎ Type selectors and universal selectors allow an optional namespace component: a namespace prefix that has been previously declared may be prepended to the element name separated by the namespace separator “vertical bar” (| U+007C). (See, e.g., [XML-NAMES] for the use of namespaces in XML.) It has the following meaning in each form:
- `%ns|%E^css
- 名前空間 %ns に属する,名前 %E の要素 ◎ elements with name E in namespace ns
- 【 %ns が`~NULL名前空間$を表現する場合、 `|%E^css と等価になる。 】
- `*|%E^css
- 属する名前空間を問わず,名前 %E の要素 — どの名前空間にも属さないものも含めて ◎ elements with name E in any namespace, including those without a namespace
- `|%E^css
- どの名前空間にも属さない【言い換えれば、`~NULL名前空間$に属する】,名前 %E の要素 ◎ elements with name E without a namespace
- `%E^css
- `既定の名前空間$が`宣言-済み$でない場合、 `*|%E^css と等価になる。 他の場合、[ %ns を既定の名前空間とするときの `%ns|%E^css ]と等価になる。 ◎ if no default namespace has been declared for selectors, this is equivalent to *|E. Otherwise it is equivalent to ns|E where ns is the default namespace.
次の~CSSにおいて: ◎ CSS examples:
@namespace foo url(http://www.example.com); foo|h1 { color: blue } /* 規則 1 */ foo|* { color: yellow } /* 規則 2 */ |h1 { color: red } /* 規則 3 */ *|h1 { color: green } /* 規則 4 */ h1 { color: green } /* 規則 5 */
規則 1 【!?(not counting the @namespace at-rule)】は、 名前空間 `http://www.example.com^l に属する `h1^e 要素のみに合致することになる。 ◎ The first rule (not counting the @namespace at-rule) will match only h1 elements in the "http://www.example.com" namespace.
規則 2 は、 名前空間 `http://www.example.com^l に属する どの要素にも合致することになる。 ◎ The second rule will match all elements in the "http://www.example.com" namespace.
規則 3 は、 どの名前空間にも属さない `h1^e 要素のみに合致することになる。 ◎ The third rule will match only h1 elements with no namespace.
規則 4 は、 名前空間を問わず(属さないものも含め),どの `h1^e 要素にも合致することになる。 ◎ The fourth rule will match h1 elements in any namespace (including those without any namespace).
規則 5 は、 既定の名前空間が定義されていないので,規則 4 と等価になる。 ◎ The last rule is equivalent to the fourth rule because no default namespace has been defined.
`型~選択子$を含まない`複合-選択子$は、 `既定の名前空間$が宣言されている下では,依然として 既定の名前空間に属する要素のみに合致する。 ◎ If a default namespace is declared, compound selectors without type selectors in them still only match elements in that default namespace.
例えば,次の~stylesheetに対しては: ◎ For example, in the following style sheet:
@namespace url("http://example.com/foo"); .special { ... }
選択子 `.special^css は、 (~DOMにおいては名前空間と対にされる) 型~名への参照が現れていないが, 名前空間 `http://example.com/foo^l に属する要素にのみ合致する。 ◎ The .special selector only matches elements in the "http://example.com/foo" namespace, even though no reference to the type name (which is paired with the namespace in the DOM) appeared.
[ `型~選択子$/`全称~選択子$ ]のうち,`宣言-済み$でない名前空間~接頭辞を伴うものは、 `無効な選択子$である。 ◎ A type selector or universal selector containing a namespace prefix that has not been previously declared is an invalid selector.
5.4. 定義-済み: `defined^ps 疑似類
~host言語によっては、 要素には[ “定義-済み” / “構築-済み” ]かそうでないかの区別がある。 `defined@ps `疑似類$は、[ ~host言語により,全部的に定義-済みな要素であると規定されるもの ]に合致する。 ◎ In some host languages, elements can have a distinction between being “defined”/“constructed” or not. The :defined pseudo-class matches elements that are fully defined, as dictated by the host language.
~host言語にこの類の区別は無い場合、 それに属するすべての要素は `defined$ps に合致する。 ◎ If the host language does not have this sort of distinction, all elements in it match :defined.
~HTMLにおいては、 組込みの要素はすべて常に定義-済みと見なされるので,次の例は常に合致することになる: ◎ In HTML, all built-in elements are always considered to be defined, so the following example will always match:
p:defined { ... }
他方,`~custom要素$は、 始めから定義-済み`ではなく^em,`定義-済み$になるのは `適正に登録された@~HEcustom#element-definition$ときに限られる。 このことは、 ~custom要素を登録されるまで隠すためとして, `defined$ps 疑似類を利用できることを意味する: ◎ Custom elements, on the other hand, start out undefined, and only become defined when properly registered. This means the :defined pseudo-class can be used to hide a custom element until it has been registered:
custom-element { visibility: hidden } custom-element:defined { visibility: visible }
6. 属性~選択子
~Selectorsでは,要素の属性の表現も許容される。 選択子が要素に対し合致する式として利用されるとき、 `属性~選択子@ ( `attribute selector^en )は,[ その要素がその属性~選択子で表現される属性に合致する属性を有するとき,その要素に合致する ]ものと見なすモノトスル。 ◎ Selectors allow the representation of an element’s attributes. When a selector is used as an expression to match against an element, an attribute selector must be considered to match an element if that element has an attribute that matches the attribute represented by the attribute selector.
`複数個の値の照合@https://lists.w3.org/Archives/Public/www-style/2011Mar/0215.html$ 用に,~commaで分離された構文を追加するか? — 例: `[rel ~=next, prev, up, first, last]^css ◎ Add comma-separated syntax for multiple-value matching? e.g. [rel ~= next, prev, up, first, last]
【 以下、 この節に現れる “%att 属性” は, 名前 %att を伴う内容~属性を表す。 】
6.1. 属性~存在p/属性~値 選択子
CSS2 では 4 種の`属性~選択子$が導入されている: ◎ CSS2 introduced four attribute selectors:
- `[%att]^css
- 次を満たす要素を表現する ⇒ %att 属性を有する ◎ Represents an element with the att attribute,\
- 属性の値は問わない。 ◎ whatever the value of the attribute.
- `[%att=%val]^css
- 次を満たす要素を表現する ⇒ %att 属性を有していて,その値は %val 【が表現する文字列】に等しい ◎ Represents an element with the att attribute whose value is exactly "val".
- `[%att~=%val]^css
- 次を満たす要素を表現する ⇒ %att 属性を有していて,[ その値を`空白$で分離して得られる単語~listを成すいずれかの単語 ]は %val に等しい ◎ Represents an element with the att attribute whose value is a whitespace-separated list of words, one of which is exactly "val".\
- %val に`空白$が含まれている場合、 何も表現しないことになる (単語は`空白$で`分離される^emので)。 %val が空~文字列の場合も,何も表現しないことになる。 ◎ If "val" contains whitespace, it will never represent anything (since the words are separated by spaces). Also if "val" is the empty string, it will never represent anything.
- `[%att|=%val]^css
- 次を満たす要素を表現する ⇒ %att 属性を有していて,その値は次を満たす ⇒ %val に等しいか, [ %val, `002D^U ]並びで始まる ◎ Represents an element with the att attribute, its value either being exactly "val" or beginning with "val" immediately followed by "-" (U+002D).\
- これは首に[ `BCP47$r またはその後継版 ]の言語 `subcode^en †と照合する用途が意図されている (例:~HTMLの `a$e 要素の `hreflang^a 属性)。 `lang^a 属性 (または `xml:lang^a 属性)用の言語 `subcode^en 照合については `lang()$ps を見よ。 【† `subcode^en は、いわゆる下位tag( `subtag^en )と同義と思われる。】 ◎ This is primarily intended to allow language subcode matches (e.g., the hreflang attribute on the a element in HTML) as described in BCP 47 ([BCP47]) or its successor. For lang (or xml:lang) language subcode matching, please see the :lang() pseudo-class.
属性~値に照合される %val は、[ `ident-token$t / `string-token$t ]として与えられなければナラナイ。 `CSS3SYN$r ◎ Attribute values must be <ident-token>s or <string-token>s. [CSS3SYN]
【 `~CSS識別子$でない(前者に合致しない)文字列は、 引用符で括る(後者として与える)必要がある。 】
次の`属性~選択子$は、 `h1^e 要素のうち[ `title^a 属性を有するもの ]を表現する — 属性の値は問わない: ◎ The following attribute selector represents an h1 element that carries the title attribute, whatever its value:
h1[`title^a]
次の選択子は、 `span$e 要素のうち[ `class^a 属性の値が `example^l に等しいもの ]を表現する: ◎ In the following example, the selector represents a span element whose class attribute has exactly the value "example":
span[`class^a="example"]
複数の`属性~選択子$を利用すれば、 要素の複数の属性, あるいは同じ属性に対する複数の条件を表現できる。 次の選択子は、 `span$e 要素のうち[ `hello^a 属性の値が `Cleveland^l に等しい, かつ `goodbye^a 属性の値が `Columbus^l に等しいもの ]を表現する: ◎ Multiple attribute selectors can be used to represent several attributes of an element, or several conditions on the same attribute. Here, the selector represents a span element whose hello attribute has exactly the value "Cleveland" and whose goodbye attribute has exactly the value "Columbus":
span[`hello^a="Cleveland"][`goodbye^a="Columbus"]
次の~CSS規則は、 "`=^css" と "`~=^css" の相違を示す: 1 個目の選択子は、 `a^e 要素のうち[ `rel^a 属性の値が,例えば `copyright copyleft copyeditor^l に等しいもの ]にも合致することになる。 2 個目の選択子は、 `a^e 要素のうち[ `href^a 属性の値が `http://www.w3.org/^l に等しいもの ]に限り合致することになる。 ◎ The following CSS rules illustrate the differences between "=" and "~=". The first selector would match, for example, an a element with the value "copyright copyleft copyeditor" on a rel attribute. The second selector would only match an a element with an href attribute having the exact value "http://www.w3.org/".
a[`rel^a~="copyright"] { ... } a[`href^a="http://www.w3.org/"] { ... }
次の選択子は、 `a^e 要素のうち[ `hreflang^a 属性が `fr^l に等しいもの ]を表現する: ◎ The following selector represents an a element whose hreflang attribute is exactly "fr".
a[`hreflang^a=fr]
次の選択子は、 `a^e 要素のうち[ `hreflang^a 属性の値が `en^l から始まるもの ]を表現する — すなわち, `en^l, `en-US^l, `en-scouse^l なども含まれる: ◎ The following selector represents an a element for which the value of the hreflang attribute begins with "en", including "en", "en-US", and "en-scouse":
a[`hreflang^a|="en"]
次の 2 つの選択子は、 `character^a 属性がそれぞれ別の値をとる, `DIALOGUE^e 要素を表現する ◎ The following selectors represent a DIALOGUE element whenever it has one of two different values for an attribute character:
DIALOGUE[`character^a=romeo] DIALOGUE[`character^a=juliet]
6.2. 部分照合 属性~選択子
属性~値の一部を成す文字列との照合~用に,次の 3 種の`属性~選択子$が供される: ◎ Three additional attribute selectors are provided for matching substrings in the value of an attribute:
[%att^=%val]
- 次を満たす要素を表現する ⇒ %att 属性を有していて,その値は “接頭辞” %val から始まる ◎ Represents an element with the att attribute whose value begins with the prefix "val".\
- %val が空~文字列である場合、 この選択子は何も表現しない。 ◎ If "val" is the empty string then the selector does not represent anything.
[%att$=%val]
- 次を満たす要素を表現する ⇒ %att 属性を有していて,その値は “接尾辞” %val で終端する ◎ Represents an element with the att attribute whose value ends with the suffix "val".\
- %val が空~文字列である場合、 この選択子は何も表現しない。 ◎ If "val" is the empty string then the selector does not represent anything.
- `[%att*=%val]^css
- 次を満たす要素を表現する ⇒ %att 属性を有していて,その値は どこかに文字列 %val を包含している ◎ Represents an element with the att attribute whose value contains at least one instance of the substring "val".\
- %val が空~文字列である場合、 この選択子は何も表現しない。 ◎ If "val" is the empty string then the selector does not represent anything.
属性~値に照合される %val は、 `ident-token$t または `string-token$t として与えられなければナラナイ。 ◎ Attribute values must be <ident-token>s or <string-token>s.
次の選択子は、 ~HTML `object$e 要素のうち[ 画像を参照しているもの ]を表現する: ◎ Examples: The following selector represents an HTML object element, referencing an image:
object[`type^a^="image/"]
次の選択子は、 ~HTML `a$e 要素のうち[ `href^a 属性の値が `.html^l で終端しているもの ]を表現する: ◎ The following selector represents an HTML a element with an href attribute whose value ends with ".html".
a[`href^a$=".html"]
次の選択子は、 ~HTML `p^e 要素のうち[ `title^a 属性の値が部分文字列として `hello^l を包含するもの ]を表現する: ◎ The following selector represents an HTML paragraph with a title attribute whose value contains the substring "hello"
p[`title^a*="hello"]
6.3. 属性~値の文字大小比較
既定では、 選択子の中の 属性~名や属性~値 の文字大小が区別されるかどうかは,文書~言語に依存する。 ◎ By default case-sensitivity of attribute names and values in selectors depends on the document language.
文書~言語に関わらず,属性~値を`~ASCII大小無視$で照合するため、 `属性~選択子$の閉じ角括弧 `005D^U の直前に,識別子 `0069^U を含ませる方法が用意されている。 この~flagが在るときは、 ~UAは,属性の値を`~ASCII大小無視$の下で照合するモノトスル (すなわち, [a-z] と [A-Z] は等価と見なされる)。 ◎ To match attribute values ASCII case-insensitively regardless of document language rules, the attribute selector may include the identifier i before the closing bracket (]). When this flag is present, UAs must match the attribute’s value ASCII case-insensitively (i.e. [a-z] and [A-Z] are considered equivalent).
別法として、 `属性~選択子$の閉じ角括弧 `005D^U の直前に識別子 `0073^U を含めてもヨイ。 この事例では、 ~UAは — 文書~言語に関わらず — `一致-$するかどうか `INFRA$r の下で照合するモノトスル。 ◎ Alternately, the attribute selector may include the identifier s before the closing bracket (]); in this case the UA must match the value case-sensitively, with “identical to” semantics [INFRA], regardless of document language rules.
他の~Selectors構文と同様、 識別子[ `0069^U / `0073^U ]自身も`~ASCII大小無視$である。 ◎ Like the rest of Selectors syntax, the i and s identifiers themselves are ASCII case-insensitive.
次の規則は、 属性~値の文字大小が区別される~XML環境の下でも, `frame^a 属性の値が `hsides^l, `HSIDES^l, `hSides^l, 等々として表現される値 `hsides^v をとるとき,~styleすることになる。 ◎ The following rule will style the frame attribute when it has a value of hsides, whether that value is represented as hsides, HSIDES, hSides, etc. even in an XML environment where attribute values are case-sensitive.
[`frame^a=hsides i] { border-style: solid none; }
次の規則は、 `type^a 属性の値が[ `a^l のとき, `A^l のとき ]とで異なる~styleをあてがうことになる — ~HTMLが `type^a 属性の値を大小無視と定義していても。 ◎ The following rule will style lists with type="a" attributes differently than type="A" even though HTML defines the type attribute to be case-insensitive.
[type="a" s] { list-style: lower-alpha; } [type="A" s] { list-style: upper-alpha; }
注記: 一部の文書~modelは、 大小無視とされる属性~値を正規化して,構文解析-時に[ 文字列が別の文字列に文字大小区別で合致するか検査する ]ことを不可能にする。 "`s^css" ~flagを介した文字大小区別による照合がアリになるのは、 元の文字大小を保全する~systemに限られる。 ◎ Note: Some document models normalize case-insensitive attribute values at parse time such that checking if a string is case-sensitive matching is impossible. Case-sensitive matching via s flags is only possible in systems that preserve the original case.
6.4. 属性~選択子と名前空間
`属性~選択子$の中の属性~名は、 `~CSS有修飾~名$として与えられる: ◎ The attribute name in an attribute selector is given as a CSS qualified name:\
- 属性~名には、 `宣言-済み$な名前空間~接頭辞を — 名前空間~分離子 `007C^U で分離した上で — 前置してもヨイ。 ◎ a namespace prefix that has been previously declared may be prepended to the attribute name separated by the namespace separator "vertical bar" (|).\
- `XML-NAMES$r に倣い、 `既定の名前空間$は,属性には適用されない。 したがって、 名前空間~成分を伴わない`属性~選択子$の対象になる属性は, どの名前空間にも属さないものに限られる ( `|%att^css【!%attr】 と等価になる)。 ◎ In keeping with the Namespaces in the XML recommendation, default namespaces do not apply to attributes, therefore attribute selectors without a namespace component apply only to attributes that have no namespace (equivalent to |attr).\
- 名前空間~接頭辞として、 ~asterisk( `*^css )を利用してもヨイ。 これは、 属性が属する名前空間を問わず,選択子を合致させることを指示する。 ◎ An asterisk may be used for the namespace prefix indicating that the selector is to match all attribute names without regard to the attribute’s namespace.
`属性~選択子$のうち,属性~名に`宣言-済み$でない名前空間~接頭辞を伴うものは、 `無効な選択子$である。 ◎ An attribute selector with an attribute name containing a namespace prefix that has not been previously declared is an invalid selector.
次の~CSSにおいて: ◎ CSS examples:
@namespace foo "http://www.example.com"; [foo|att=val] { color: blue } /* 規則 1 */ [*|att] { color: yellow } /* 規則 2 */ [|att] { color: green } /* 規則 3 */ [att] { color: green } /* 規則 4 */
規則 1 は、[ `http://www.example.com^l 名前空間に属する `att^a 属性であって,値 `val^l をとるもの ]を有する要素に限り,合致することになる。 ◎ The first rule will match only elements with the attribute att in the "http://www.example.com" namespace with the value "val".
規則 2 は、 `att^a 属性を有する要素に限り — 属性が属する名前空間を問わず (どの名前空間にも属さないものも含め) — 合致することになる。 ◎ The second rule will match only elements with the attribute att regardless of the namespace of the attribute (including no namespace).
規則 3, 規則 4 は等価であり、どちらも[ どの名前空間にも属さない `att^a 属性 ]を有する要素に限り,合致することになる。 ◎ The last two rules are equivalent and will match only elements with the attribute att where the attribute is not in a namespace.
6.5. ~DTD内で与えられる属性の既定~値
`属性~選択子$は、 文書~treeの中の属性~値を表現する。 文書~treeがどう構築されるかは、 ~Selectorsの視野から外れる。 一部の文書~形式では,~DTDや他所で属性の既定~値が定義されることもあるが、 それらは,文書~treeに現れない限り `属性~選択子$により選択されることはない。 選択子は、[ 既定~値が文書~tree内で定義される【!included】か否かを問わず,働く ]ように設計されるベキである。 ◎ Attribute selectors represent attribute values in the document tree. How that document tree is constructed is outside the scope of Selectors. In some document formats default attribute values can be defined in a DTD or elsewhere, but these can only be selected by attribute selectors if they appear in the document tree. Selectors should be designed so that they work whether or not the default values are included in the document tree.
例えば、 ~XML~UAは,~DTDの “外部~subset” を読取ってもヨイとされているが、 `要求されてはいない^em。 一方で、 文書の “内部~subset” の中で与えられる[ 属性の既定~値 ]については,その~~検索が`要求されている^em。 (これらの~subsetの定義については,例えば `XML10$r を見よ。) ~DTDの外部~subsetにて定義される[ 属性の既定~値 ]が,文書~treeの中に現れるかどうかは、 ~UAに依存する。 ◎ For example, a XML UA may, but is not required to, read an “external subset” of the DTD, but is required to look for default attribute values in the document’s “internal subset”. (See, e.g., [XML10] for definitions of these subsets.) Depending on the UA, a default attribute value defined in the external subset of the DTD might or might not appear in the document tree.
~XML名前空間を認識する~UAは、[ その名前空間の知識を利用して,属性の既定~値が文書~内に在ったかのように扱ってもヨイ ]とされているが,要求されてはいない。 (例えば、 ~XHTML~UAには,[ 組込みの~XHTML~DTDについての知識を利用する ]ことは要求されていない。 XML 1.0 名前空間の詳細は、 例えば `XML-NAMES$r を見よ。) ◎ A UA that recognizes an XML namespace may, but is not required to use its knowledge of that namespace to treat default attribute values as if they were present in the document. (For example, an XHTML UA is not required to use its built-in knowledge of the XHTML DTD. See, e.g., [XML-NAMES] for details on namespaces in XML 1.0.)
注記: 実装は、 概して,外部~subsetを無視する。 これは、 ~XML仕様にて定義される[ 妥当性を~~検証しない処理器 ]の挙動に対応する。 ◎ Note: Typically, implementations choose to ignore external subsets. This corresponds to the behavior of non-validating processors as defined by the XML specification.
既定~値に `decimal^l をとる `radix^a 属性を有する `EXAMPLE^e 要素を考える。 ~DTD片が次の様になっているとして: ◎ Consider an element EXAMPLE with an attribute radix that has a default value of "decimal". The DTD fragment might be
<!ATTLIST EXAMPLE radix (decimal,octal) "decimal">
~stylesheetが次の~CSS規則を包含する場合: ◎ If the style sheet contains the rules
EXAMPLE[`radix^a=decimal] { /* …既定の~prop設定… */ } EXAMPLE[`radix^a=octal] { /* …他の設定… */ } ◎ EXAMPLE[radix=decimal] { /* ... default property settings ... */ } EXAMPLE[radix=octal] { /* ... other settings... */ }
1 個目の規則は、 `radix^a 属性が既定を通して設定される要素 — すなわち,明示的には設定されない要素 — には合致しないかもしれない。 すべての事例に対応するためには、 既定~値~用の`属性~選択子$を落とす必要がある: ◎ the first rule might not match elements whose radix attribute is set by default, i.e. not set explicitly. To catch all cases, the attribute selector for the default value must be dropped:
EXAMPLE { /* …既定の~prop設定… */ } EXAMPLE[`radix^a=octal] { /* …他の設定… */ } ◎ EXAMPLE { /* ... default property settings ... */ } EXAMPLE[radix=octal] { /* ... other settings... */ }
ここでは、 選択子 `EXAMPLE[radix=octal]^css は,`型~選択子$のみ よりも`詳細度$が高いので、 2 個目の規則の~style宣言は,[ `radix^a 属性~値が `octal^l に等しい要素 ]も対象にする 1 個目の規則を上書きすることになる。 既定の事例に限り適用される~prop宣言は、 すべて,既定でない事例に適用される~style規則で上書きされるよう,~careする必要がある。 ◎ Here, because the selector EXAMPLE[radix=octal] is more specific than the type selector alone, the style declarations in the second rule will override those in the first for elements that have a radix attribute value of "octal". Care has to be taken that all property declarations that are to apply only to the default case are overridden in the non-default cases' style rules.
6.6. ~class選択子
`~class選択子@ ( `class selector^en )は[ “終止符” `002E^U, 識別子 ]並びとして与えられる。 それは、 識別子により識別される “~class” に `属する^em要素を表現する†。 ~classは文書~言語が定義する。 例えば `HTML$r, `SVG11$r, `MATHML$r における~classへの所属は, `class^a 属性により与えられる: これらの言語では、 `local^en ††な `class^a 属性に適用される `~=^css 記法 (すなわち, `[class~=%identifier]^css ) と等価になる。 ◎ The class selector is given as a full stop (. U+002E) immediately followed by an identifier. It represents an element belonging to the class identified by the identifier, as defined by the document language. For example, in [HTML5], [SVG11], and [MATHML] membership in a class is given by the class attribute: in these languages it is equivalent to the ~= notation applied to the local class attribute (i.e. [class~=identifier]).
【† 下の例に見られるとおり, 要素は同時に複数の “~class” に属し得る。 】【†† “`local^en” とは、 “~XML名前空間の文脈で要素に局所的” を意味すると思われる。 】
~CSS例をいくつか示す: ◎ CSS examples:
次の様にすれば、 `class~="pastoral"^a を伴う† すべての要素に~style情報をアテガえる: ◎ We can assign style information to all elements with class~="pastoral" as follows:
【† `class^a 属性の値を成す ある~tokenは `pastoral^l に等しい (選択子 `[class~=pastoral]^css に合致する) 】
*.pastoral { color: green } /* all elements with class~=pastoral */
または単に: ◎ or just
.pastoral { color: green } /* all elements with class~=pastoral */
次のものは、 `class~="pastoral"^a を伴う `h1^e 要素にのみ~styleをアテガう: ◎ The following assigns style only to H1 elements with class~="pastoral":
h1.pastoral { color: green } /* H1 elements with class~=pastoral */
これらの規則の下では、 下の 1 個目の `h1^e 要素【!H1 instance】の~text色は `green^v にならない一方, 2 個目の `h1^e はそうなる: ◎ Given these rules, the first H1 instance below would not have green text, while the second would:
<h1>Not green</h1> <h1 class="pastoral">Very green</h1>
次の規則は、 `p^e 要素のうち,その `class^a 属性に[ `pastoral^l, `marine^l の両方を含む,`空白$で分離された値たちが成す~list ]がアテガわれたものすべてに合致する: ◎ The following rule matches any P element whose class attribute has been assigned a list of whitespace-separated values that includes both pastoral and marine:
p.pastoral.marine { color: green }
この規則は、 `class="pastoral blue aqua marine"^a には合致するが, `class="pastoral blue"^a には合致しない。 ◎ This rule matches when class="pastoral blue aqua marine" but does not match for class="pastoral blue".
注記: ~CSSは “class” 属性に かなりの力を与えているので、 作者は,[ 結付けられた呈示が ほとんどない要素 (~HTMLの `div$e や `span$e 要素など) に基づいて自前の “文書~言語” を設計した上で、 “class” 属性を通して~style情報をアテガう ]こともできるが、 この実施は避けるベキである。 文書~言語の構造上の要素は,広く[ 認識されて/受容されて ]いる意味を有することが多い一方で、 作者が定義する~classはそうでないであろうから。 ◎ Note: Because CSS gives considerable power to the "class" attribute, authors could conceivably design their own "document language" based on elements with almost no associated presentation (such as div and span in HTML) and assigning style information through the "class" attribute. Authors should avoid this practice since the structural elements of a document language often have recognized and accepted meanings and author-defined classes may not.
注記: 【文書~言語に複数種の[ ~classの意味論を有する属性]が定義されている下で,】 要素が複数の~class属性を有する場合、 ~classを探索する前に,それらの値を~spaceで連結するモノトスル。 しかしながら、 現時点では,~WGはこのような状況があり得るものと考えていない。 したがって,この挙動は、 この仕様においては規範的とされない。 ◎ Note: If an element has multiple class attributes, their values must be concatenated with spaces between the values before searching for the class. As of this time the working group is not aware of any manner in which this situation can be reached, however, so this behavior is explicitly non-normative in this specification.
`過去互換~mode$の文書に対しては、 ~class名は,`~ASCII大小無視$で照合するモノトスル — 他所における`~class選択子$は,文字大小区別であり、 ~class名が`一致-$しない限り合致しない。 `INFRA$r ◎ When matching against a document which is in quirks mode, class names must be matched ASCII case-insensitively; class selectors are otherwise case-sensitive, only matching class names they are identical to. [INFRA]
6.7. ~ID選択子
文書~言語には、 ~ID型であるものと宣言された属性を包含するものもある。 ~ID型の属性は、 それを有する要素の型を問わず,同じ文書の中で — その文書が文書~言語に適合する限り — 複数のそれが同じ値をとり得ない点で、 特別な~~地位にある。 文書~言語が何であれ、 ~ID型とされた属性は,要素を一意に識別する目的に利用できる。 ~HTMLにおいては、 すべての~ID型の属性は `id^a と命名されている。 ~XML~appは~ID型の属性を異なるものに命名し得るが、 同じ制約が適用される。 要素のどの属性が “~ID属性である” とされるかは,文書~言語が定義する。 ◎ Document languages may contain attributes that are declared to be of type ID. What makes attributes of type ID special is that no two such attributes can have the same value in a conformant document, regardless of the type of the elements that carry them; whatever the document language, an ID typed attribute can be used to uniquely identify its element. In HTML all ID attributes are named id; XML applications may name ID attributes differently, but the same restriction applies. Which attribute on an element is considered the “ID attribute“ is defined by the document language.
`~ID選択子@ ( `ID selector^en )は[ “番号記号” `0023^U, ~ID値 ]並びで記される。 ~ID値は `~CSS識別子$でなければナラナイ。 ~ID選択子は、 その中の識別子に合致する~IDを有する要素~instanceを表現する。 (適合しない文書においては、 同じ~ID選択子に複数の要素が合致することもあり得る。) ◎ An ID selector consists of a “number sign” (U+0023, #) immediately followed by the ID value, which must be a CSS identifier. An ID selector represents an element instance that has an identifier that matches the identifier in the ID selector. (It is possible in non-conforming documents for multiple elements to match a single ID selector.)
次の~ID選択子は、 `h1^e 要素のうち[ その~ID型の属性~値が `chapter1^l に等しいもの ]を表現する: ◎ Examples: The following ID selector represents an h1 element whose ID-typed attribute has the value "chapter1":
h1#chapter1
次の~ID選択子は、 すべての要素のうち[ その~ID型の属性~値が `chapter1^l に等しいもの ]を表現する: ◎ The following ID selector represents any element whose ID-typed attribute has the value "chapter1":
#chapter1
次の選択子は、 すべての要素のうち[ その~ID型の属性~値が `z98y^l に等しいもの ]を表現する: ◎ The following selector represents any element whose ID-typed attribute has the value "z98y".
*#z98y
注記: XML 1.0 `XML10$rにおいては、 どの属性が要素の~IDを包含するかについての情報は,[ ~DTDあるいは~schema ]内に包含される。 ~UAは[ ~XMLを構文解析する際に,常に~DTDを読取るとは限らない ]ので、 何が要素~IDを与えるか知り得ないこともある (~UAは,名前空間に特有な知識を有することもあるので、 その場合,どれが当の名前空間~用の~ID属性になるか決定できるが)。 ~stylesheet作者は、 そのような場合もあることが判っているか疑わしいときには, 代わりに通常の`属性~選択子$を利用するベキである — `#p371^css の代わりに `[name=p371]^css 等々。 ◎ Note: In XML 1.0 [XML10], the information about which attribute contains an element’s IDs is contained in a DTD or a schema. When parsing XML, UAs do not always read the DTD, and thus may not know what the ID of an element is (though a UA may have namespace-specific knowledge that allows it to determine which attribute is the ID attribute for that namespace). If a style sheet author knows or suspects that a UA may not know what the ID of an element is, they should use normal attribute selectors instead: [name=p371] instead of #p371.
【文書~言語にて複数種の[~IDの意味論を有する属性]が定義されている下で,】 要素が複数の~ID属性を有する場合、 ~ID選択子の目的においては,それらすべてを当の要素の~IDとして扱うモノトスル。 その種の状況は[ `xml:id^a, DOM3 Core, ~XML~DTD, 名前空間に特有な知識 ]の混成により生じ得る。 ◎ If an element has multiple ID attributes, all of them must be treated as IDs for that element for the purposes of the ID selector. Such a situation could be reached using mixtures of xml:id, DOM3 Core, XML DTDs, and namespace-specific knowledge.
`過去互換~mode$の文書に対しては、 ~IDは,`~ASCII大小無視$で照合するモノトスル — 他所における`~ID選択子$は,文字大小区別であり、 ~IDが`一致-$しない限り,合致しない。 `INFRA$r ◎ When matching against a document which is in quirks mode, IDs must be matched ASCII case-insensitively; ID selectors are otherwise case-sensitive, only matching IDs they are identical to. [INFRA]
7. 自然言語に関する疑似類
7.1. 方向性: `dir()^ps 疑似類
`dir()@ps 疑似類は、[ `文書~言語$から決定される 【`内容~言語$の】 方向性【書字~方向】に基づいて,要素を表現する選択子 ]を書くことを作者に許容する。 例えば, `HTML$r は、[ `dir^a 属性, 周囲の~text, その他の要因 ]の組合nに基づいて`要素の方向性を決定する方法@~HTMLdom#the-directionality$を定義している。 別の例として, `ITS20$r の `its:dir^a 属性や `its:dirRule^e 要素は、 `XML10$r における要素の方向性を定義-可能にする。 ◎ The :dir() pseudo-class allows the author to write selectors that represent an element based on its directionality as determined by the document language. For example, [HTML5] defines how to determine the directionality of an element, based on a combination of the dir attribute, the surrounding text, and other factors. As another example, the its:dir and dirRule element of the Internationalization Tag Set [ITS20] are able to define the directionality of an element in [XML10].
`dir()$ps 疑似類による選択-は、 ~style付け状態に基づかない — 例えば, `direction$p ~propは、 その照合に影響しない。 ◎ The :dir() pseudo-class does not select based on stylistic states—for example, the CSS direction property does not affect whether it matches.
疑似類 `dir(ltr)$ps0 は、 左横書き( `left-to-right^en )の方向性 ( `ltr^v )を備える要素を表現する。 疑似類 `dir(rtl)$ps0 は、 右横書き( `right-to-left^en )の方向性 ( `rtl^v )を備える要素を表現する。 `dir()$ps がとる引数は、 単独の識別子でなければナラナイ。 他の場合、 選択子は無効になる。 識別子と丸括弧の間に`空白$が挟まれていてもよい。 `ltr^v, `rtl^v 以外の値も無効ではないが、 【現時点では】何にも合致しない。 (将来の~markup仕様が他の種類の方向性を定義した場合、 対応する値が許容されるよう,~Selectorsも拡張されるであろう。) ◎ The pseudo-class :dir(ltr) represents an element that has a directionality of left-to-right (ltr). The pseudo-class :dir(rtl) represents an element that has a directionality of right-to-left (rtl). The argument to :dir() must be a single identifier, otherwise the selector is invalid. White space is optionally allowed between the identifier and the parentheses. Values other than ltr and rtl are not invalid, but do not match anything. (If a future markup spec defines other directionalities, then Selectors may be extended to allow corresponding values.)
`:dir(…)^css と `[dir=…]^css の相違は、 後者が遂行する比較は,要素~上の所与の属性に限られる一方で、 `:dir(…)^css 疑似類は,比較を遂行する際に[ 文書の意味論について,~UAが有する知識 ]が利用されることにある。 例えば,~HTMLにおける要素の方向性は、 当の要素が `dir^a 属性を有さない場合でも,[ 妥当な `dir^a 属性を有する先祖が在るならば,それらのうち最も近いもの ]に備わる方向性を継承する。 別の例として, `[dir=auto]^css に合致する~HTMLの要素は、 その内容から解決される方向性に依存して, `dir(ltr)$ps0 または `dir(rtl)$ps0 に合致することになる。 `HTML$r ◎ The difference between :dir(C) and [dir=C] is that [dir=C] only performs a comparison against a given attribute on the element, while the :dir(C) pseudo-class uses the UAs knowledge of the document’s semantics to perform the comparison. For example, in HTML, the directionality of an element inherits so that a child without a dir attribute will have the same directionality as its closest ancestor with a valid dir attribute. As another example, in HTML, an element that matches [dir=auto] will match either :dir(ltr) or :dir(rtl) depending on the resolved directionality of the elements as determined by its contents. [HTML5]
7.2. 自然言語: `lang()^ps 疑似類
文書~言語において,要素の`内容~言語$(~~自然言語, ヒトが話す言語)を決定する方法が指定されている場合、 その`内容~言語$に基づく要素を表現する選択子を書くこともアリになる。 `lang()@ps 疑似類は、 その引数として[ 1 個以上の`言語~範囲$たちが成す~commaで分離された~list ]を受容し,要素のうち[ その`内容~言語$が,この~listを成す いずれかの言語~範囲に合致するもの ]を表現する。 `lang()$ps の中の各 `言語~範囲@ ( `language range^en )は、 妥当な[ `ident$t / `string$t ]でなければナラナイ (したがって、 例えば,~asteriskを包含する言語~範囲は、 正しく~escapeする(例: `:lang(\*-Latn)^css)か, 文字列として引用符で括る(例: `:lang("*-Latn")^css ) ことが要求される【!must】。 ◎ If the document language specifies how the (human) content language of an element is determined, it is possible to write selectors that represent an element based on its content language. The :lang() pseudo-class, which accepts a comma-separated list of one or more language ranges, represents an element whose content language is one of the languages listed in its argument. Each language range in :lang() must be a valid CSS <ident> or <string>. (Thus language ranges containing asterisks, for example, must be either correctly escaped or quoted as strings, e.g. :lang(\*-Latn) or :lang("*-Latn").)
注記: 要素の`内容~言語$は、 文書~言語が定義する。 ◎ Note: The content language of an element is defined by the document language.
例えば,~HTML `HTML$r においては、 `内容~言語$は[ `lang@~HTMLdom#attr-lang$a 属性, `meta$e 要素からの情報, 場合によっては~protocolからの情報(例:~HTTP~headerからの) ]の組合nから決定される 【`参照@~HTMLdom#language$】。 ~XML言語 `XML10$r においては、 `xml:lang^a 属性を利用して,要素の言語~情報を指示できる。 ◎ For example, in HTML [HTML5], the content language is determined by a combination of the lang attribute, information from meta elements, and possibly also the protocol (e.g. from HTTP headers). XML languages can use the xml:lang attribute to indicate language information for an element. [XML10]
要素の`内容~言語$ %言語 が`言語~範囲$ %範囲 に合致するとは、 %言語 を `BCP47$r 構文として表現する下で, `RFC4647$r `§ 拡張d~filter法@~RFCx/rfc4647#section-3.3.2$ による演算において %言語 が %範囲 に合致することをいう: ◎ The element’s content language matches a language range if its content language, as represented in BCP 47 syntax, matches the given language range in an extended filtering operation per [RFC4647] Matching of Language Tags (section 3.3.2).\
- この演算に先立って、[ %言語, %範囲 ]どちらも, `RFC5646$r `§ 言語~tagの正準-化@~RFCx/rfc5646#section-4.5$ に従って正準-化された `extlang^P 形へ変換するモノトスル。 ◎ Both the content language and the language range must be canonicalized and converted to extlang form as per section 4.5 of [RFC5646] prior to the extended filtering operation.\
- この照合は、 ~ASCII範囲の中で文字大小無視で遂行される。 ◎ The matching is performed case-insensitively within the ASCII range.
- この比較を遂行する際には、 %範囲 は妥当な言語~codeである必要は無い。 ◎ The language range does not need to be a valid language code to perform this comparison.
-
%範囲 ~EQ 空~文字列の場合( `:lang("")^css )、 要素のうち言語~tagを伴わない†ものに(限り)合致することになる。 ◎ A language range consisting of an empty string (:lang("")) matches (only) elements whose language is not tagged.
【† ~HTMLにおいては、[ 要素の`言語を決定-@~HTMLdom#language$した結果 ~EQ 空~文字列 ]を意味する (要素が `lang^a 属性を有さないこととは同義でないことに注意)。 】
注記: [ 文書/~protocol ]は、 `BCP47$r またはその後継版の~codeを利用して — 当の形式が~XML `XML10$r に基づく事例では、 `xml:lang^a 属性により — 言語を指示することが推奨される。 “`FAQ: 2 文字または 3 文字の言語~code@https://www.w3.org/International/questions/qa-lang-2or3.html$” を見よ。 ◎ Note: It is recommended that documents and protocols indicate language using codes from [BCP47] or its successor, and in the case of XML-based formats, by means of xml:lang attributes. [XML10] See “FAQ: Two-letter or three-letter language codes.”
次に挙げる選択子のうち,[ 1 個目はベルギー・フランス語/ 2 個目はドイツ語 ]で書かれた~HTML文書を表現する。 [ 3 個目は 1 個目と同じ言語/ 4 個目は 2 個目と同じ言語 ]に属する任意な要素の子である `q$e 要素を表現する: ◎ Examples: The two following selectors represent an HTML document that is in Belgian French or German. The two next selectors represent q quotations in an arbitrary element in Belgian French or German.
html:lang(fr-be) html:lang(de) :lang(fr-be) > q :lang(de) > q
`:lang(%C)^css と `|=^css 演算子との相違は、 `|=^css 演算子が遂行する比較は,要素~上の所与の属性に限られる一方、 `:lang(%C)^css 疑似類は,比較を遂行する際に[ 文書の意味論について,~UAが有する知識 ]が利用されることにある。 ◎ Note: One difference between :lang(C) and the |= operator is that the |= operator only performs a comparison against a given attribute on the element, while the :lang(C) pseudo-class uses the UAs knowledge of the document’s semantics to perform the comparison.
次の~HTML例では、 `[lang|=fr]^css には,( `lang^a 属性を有する) `body$e のみが合致する一方で、 `:lang(fr)^css には `body$e と `p$e どちらも合致する (どちらもフランス語に属するものとされるので)。 `p$e は `lang^a 属性を有さないので, `[lang|=fr]^css に合致しない。 ◎ In this HTML example, only the BODY matches [lang|=fr] (because it has a LANG attribute) but both the BODY and the P match :lang(fr) (because both are in French). The P does not match the [lang|=fr] because it does not have a LANG attribute.
<body lang=fr> <p>Je suis français.</p> </body>
`:lang(%C)^css と `|=^css 演算子のもう一つの相違は、 `:lang(%C)^css が暗黙的に~wildcard照合を遂行することにある。 ◎ Another difference between :lang(C) and the |= operator is that :lang(C) performs implicit wildcard matching.
例えば, `:lang(de-DE)^css は、 次に挙げる すべてに合致することになる ⇒# `de-DE^l, `de-DE-1996^l, `de-Latn-DE^l, `de-Latf-DE^l, `de-Latn-DE-1996^l ◎ For example, :lang(de-DE) will match all of de-DE, de-DE-1996, de-Latn-DE, de-Latf-DE, de-Latn-DE-1996,\
一方で, `[lang|=de-DE]^css は、 これらのうち[ `de-DE^l, `de-DE-1996^l ]のみに合致することになる。 ◎ whereas of those [lang|=de-DE] will only match de-DE and de-DE-1996.
最初の下位tag(首な言語)に対しては,~wildcardによる照合を遂行させるためには、 ~asteriskを利用しなければならない: 例えば, `*-CH^css は、[ `de-CH^l, `it-CH^l, `fr-CH^l, `rm-CH^l ]すべてに合致することになる。 ◎ To perform wildcard matching on the first subtag (the primary language), an asterisk must be used: *-CH will match all of de-CH, it-CH, fr-CH, and rm-CH.
`lang^a 属性を有する要素を対象に,`言語~範囲$を利用して照合するためには、[ `属性~選択子§, `自然言語 疑似類§ ]を併用する — 例: `[lang]:lang(de-DE)^css ◎ To select against an element’s lang attribute value using this type of language range match, use both the attribute selector and language pseudo-class together, e.g. [lang]:lang(de-DE).
注記: ~wildcard言語~照合と~commaで分離された~listは、 ~level 4 にて新たに~~導入された。 ◎ Note: Wildcard language matching and comma-separated lists are new in Level 4.
8. 所在 疑似類
8.1. ~hyperlink: `any-link^ps 疑似類
`any-link@ps 疑似類は、 ~hyperlinkの~source~anchorとして動作する要素を表現する。 例えば `HTML$r においては、 `href$a 属性を伴う どの[ `a$e / `area$e ]要素も~hyperlinkであり, `any-link$ps に合致する。 それは、[ `link$ps, `visited$ps ]いずれかに合致する要素に合致し, `:is(:link, :visited)^css と等価になる。 ◎ The :any-link pseudo-class represents an element that acts as the source anchor of a hyperlink. For example, in [HTML5], any a or area elements with an href attribute are hyperlinks, and thus match :any-link. It matches an element if the element would match either :link or :visited, and is equivalent to :is(:link, :visited).
8.2. ~link履歴: `link^ps, `visited^ps 疑似類
~UAは、 共通的に,未訪問な`~hyperlink@#the-any-link-pseudo$を訪問-済みなそれと異なる表示にする。 ~Selectorsは、 それらを判別する疑似類 `link@ps および `visited@ps を供する: ◎ User agents commonly display unvisited hyperlinks differently from previously visited ones. Selectors provides the pseudo-classes :link and :visited to distinguish them:
- `link$ps 疑似類は、 まだ訪問されてない~linkを対象にする。 ◎ The :link pseudo-class applies to links that have not yet been visited.
- `visited$ps 疑似類は、 利用者により訪問-済みな~linkを対象にする。 ◎ The :visited pseudo-class applies once the link has been visited by the user.
~UAは、 一定期間が経過した訪問-済み~linkを未訪問な `link$ps 状態に戻してもヨイ。 ◎ After some amount of time, user agents may choose to return a visited link to the (unvisited) :link state.
2 つの状態は両立し得ない。 ◎ The two states are mutually exclusive.
次の選択子は、 `footnote^css ~classに属していて, かつ すでに訪問-済みな~linkを表現する: ◎ The following selector represents links carrying class footnote and already visited:
.footnote:visited
~stylesheet作者が[ 利用者の同意を得ずに利用者が訪問した~siteを調べる目的 ]に[ `link$ps / `visited$ps ]疑似類を濫用することもアリなので、 ~UAは,[ ~linkの具現化を訪問-済みか未訪問かに応じて違える ]一方で[ 利用者の~privacyを保全するための措置 ] — すべての~linkを未訪問な~linkとして扱う, その他の措置 — を実装してもヨイ。 ◎ Since it is possible for style sheet authors to abuse the :link and :visited pseudo-classes to determine which sites a user has visited without the user’s consent, UAs may treat all links as unvisited links or implement other measures to preserve the user’s privacy while rendering visited and unvisited links differently.
【 例えば,現代のほとんどの~browserにおいては、 `visited^ps に適用し得る~styleは, 他のどの状態にも影響しないもの(色のみ)に限られている (`~~参考@https://developer.mozilla.org/ja/docs/Web/CSS/Privacy_and_the_:visited_selector$)。 】
8.3. 局所~link: `local-link^ps 疑似類
`local-link@ps 疑似類は、[ ~siteの中での利用者の現在の所在に基づいて,~hyperlinkを~styleする ]ことを作者に許容する。 それは、 `any-link$ps に合致する要素のうち[ その~target~URL — 要素による~hyperlinkの~targetの絶対~URL — は,現在の~URL — 要素が属する文書の~URL — に合致するもの ]を表現する。 ~target~URLが素片を含む場合、 現在の~URLの素片も照合するモノトスル — 含まない場合、 現在の~URLの素片~部位は,この比較に織り込まないとする。 ◎ The :local-link pseudo-class allows authors to style hyperlinks based on the users current location within a site. It represents an element that is the source anchor of a hyperlink whose target’s absolute URL matches the element’s own document URL. If the hyperlink’s target includes a fragment URL, then the fragment URL of the current URL must also match; if it does not, then the fragment URL portion of the current URL is not taken into account in the comparison.
例えば,次の規則は、 現在の~pageを~targetにしている~linkが~navi~list `nav^e の一部を成すときに, 下線が引かれないようにする: ◎ For example, the following rule prevents links targeting the current page from being underlined when they are part of the navigation list:
nav :local-link { text-decoration: none; }
注記: ~pageの現在の~URLを変化させ得るものには、 次が挙げられる:
- 利用者-動作の結果として、 同じ~pageの中で異なる素片を~targetにしている~linkが作動化されたとき
- `pushState@~WINDOW#dom-history-pushstate$c ~APIの利用
- あるいは、 もっと明白な動作 — 異なる~pageへ~navigateしたり,~redirectに追従するなど ([ ~HTTPなどの~protocol/ `<meta http-equiv="...">^c などの~markupによる指示書き/ ~scriptingの指示書き ]などにより起動され得る)。
~UAは、 そのような どの状態~変化に対しても,[ `local-link$ps / `target$ps / `target-within$ps ]疑似類が正しく応答することを確保するモノトスル。
◎ Note: The current URL of a page can change as a result of user actions such as activating a link targeting a different fragment within the same page; or by use of the pushState API; as well as by the more obvious actions of navigating to a different page or following a redirect (which could be initiated by protocols such as HTTP, markup instructions such as <meta http-equiv="...">, or scripting instructions ). UAs must ensure that :local-link, as well as the :target and :target-within pseudo-classes below, respond correctly to all such changes in state.8.4. ~target: `target^ps 疑似類
文書~言語によっては、 文書の~URLは、 文書~自体のみならず,~URLの`素片$を介して文書の`中の^em特定の要素を指す。 この仕方で指される要素は、 文書の~target要素とされる。 【例: `HTML$r における`~target要素@~HTMLnav#target-element$】 ◎ In some document languages, the document’s URL can further point to specific elements within the document via the URL’s fragment. The elements pointed to in this way are the target elements of the document.
~HTMLにおける素片は、 ~page内で同じ~IDを有する要素を指す。 例えば,~URL `https://example.com/index.html#section2^l は、 `https://example.com/index.html^l に在る文書を成す要素のうち[ `id^a 属性に `section2^l を伴うもの ]【のうち最初のもの】を指す。 ◎ In HTML the fragment points to the element in the page with the same ID. The url https://example.com/index.html#section2, for example, points to the element with id="section2" in the document at https://example.com/index.html.
`target@ps 疑似類は、 文書の~target要素に合致する。 文書の~URLが素片~識別子を伴わない場合、 文書には~target要素は無い。 ◎ The :target pseudo-class matches the document’s target elements. If the document’s URL has no fragment identifier, then the document has no target elements.
次の選択子は、 参照元~URLの~target要素であって, `note^l ~classに属する `p^e 要素を表現する:
p.note:target◎ p.note:target ◎ This selector represents a p element of class note that is the target element of the referring URL.
次の規則たちは、 `target$ps 疑似類を利用して, ~target要素の色を `red^v にするとともに, その先頭に画像を配置する: ◎ CSS example: Here, the :target pseudo-class is used to make the target element red and place an image before it, if there is one:
:target { color : red } :target::before { content : url(target.png) }
8.5. ~target容器: `target-within^ps 疑似類
`target-within@ps 疑似類は、 次を満たす要素に合致する【!適用される】 ⇒ 自身または[ `平坦~tree$における,その ある子孫(~text~nodeなどの非~要素~nodeも含む) ]は、[ `target$ps 疑似類に合致するための条件 ]を満たす ◎ The :target-within pseudo-class applies to any element to which the :target pseudo class applies as well as to any element whose descendant in the flat tree (including non-element nodes, such as text nodes) matches the conditions for matching :target.
8.6. 視野ng根: `scope^ps 疑似類
一部の文脈 — `DOM$r における `querySelector()$c ~methodを~callするときなど — においては、 選択子は 1 個~以上の`視野ng根$に基づいて照合される。 `scope@ps 疑似類は、 この`視野ng根$を表現し,[ “真の” 要素, “~virtualな” もの(`文書片$など) ]どちらにもなり得る。 ◎ In some contexts, selectors are matched with respect to one or more scoping roots, such as when calling the querySelector() method in [DOM]. The :scope pseudo-class represents this scoping root, and may be either a true element or a virtual one (such as a DocumentFragment).
`視野ng根$が無い場合、 `scope$ps は,`根~要素$【!当の文書の根】を表現する( `root$ps と等価になる)。 仕様は、 この疑似類が[ `根~要素$ではない,特定の要素 ]に合致することを意図する場合には, `視野ng根$(たち)を定義しなけれナラナイ。 ◎ If there is no scoping root then :scope represents the root of the document (equivalent to :root). Specifications intending for this pseudo-class to match specific elements rather than the document’s root element must define their scoping root(s).
~virtualな`視野ng根$は、 `文書片$の根を表現している何らかの~objであり, それが表現する`文書片$内の根~要素の親として動作する 【文書片に代わって,その内容が成す~node~treeの根として動作する】 — それは、 この`視野ng根$と他の要素との関係性を表現するよう,選択子~pattern内で利用できる。 ~virtualな`視野ng根$は`無特能$であり,当の選択子の`~subject$にはなり得ない。 ◎ A virtual scoping root is some object representing the root of a document fragment, and can be used in selector patterns to represent other elements’ relationships to this scoping root, acting as the parent of any root elements in the document fragment it represents. A virtual scoping root is featureless and cannot be the subject of the selector.
例えば,所与の`文書片$ %df に対し、 %df`.querySelectorAll(":scope > .foo")^c は, すべての `.foo^css 要素のうち %df 内の “~top-level” にあるもの (その`親$ ~EQ %df を満たすもの)に合致する。 ◎ For example, if you have a DocumentFragment df, then df.querySelectorAll(":scope > .foo") matches all the .foo elements that are "top-level" in the document fragment (those that have the document fragment as their parentNode).
しかしながら, %df`.querySelector(":scope")^c に合致するものは無い — %df は`文書片$であり,当の選択子の`~subject$になり得ないので。 ◎ However, df.querySelector(":scope") will not match anything, as the document fragment itself can’t be the subject of the selector.
9. 利用者~動作 疑似類
対話的な~UIは、 利用者-動作に呼応して,具現化を変更することがある。 ~Selectorsは、 利用者が動作している要素を選択するためとして,数種の `利用者~動作~疑似類@ ( `user action pseudo-class^en )を供する。 (対話的でない~UAにおいても、 これらの`疑似類$は妥当であるが,どの要素にも決して合致しない。) ◎ Interactive user interfaces sometimes change the rendering in response to user actions. Selectors provides several user action pseudo-classes for the selection of an element the user is acting on. (In non-interactive user agents, these pseudo-classes are valid, but never match any element.)
これらの疑似類は,両立し得る。 要素は,そのような複数の疑似類に同時に合致し得る。 ◎ These pseudo-classes are not mutually exclusive. An element can match several such pseudo-classes at the same time.
利用者~動作~疑似類の例: ◎ Examples:
a:hover /* 利用者が~link上を~hoverしている ◎ user hovers over the link */ a:focus /* 利用者が~linkに~focusしている ◎ user focuses the link */ a:focus:hover /* ~linkが~focusされている間に,利用者が当の~link上を~hoverしている ◎ user hovers over the link while it’s focused */
注記: この節にて定義される一部の疑似類をいつ適用するか知るために必要yな接触判定については、 まだ定義されてないが,将来に定義されることになる。 ◎ Note: The specifics of hit-testing, necessary to know when several of the pseudo-classes defined in this section apply, are not yet defined, but will be in the future.
9.1. ~pointer~hover: `hover^ps 疑似類
`hover@ps 疑似類は、[ 利用者が~pointing装置で[ 要素/疑似要素 ]を指していて,実際に作動化させる必要はない間 ]に適用される。 例えば,視覚的な~UAにおいては、 ~cursor(~mouse~pointer)が[ 要素により生成された`~box$ ]上を~hoverしたとき,この疑似類を適用することもできる。 ~hardware制限に因り(例:~pen装置),~hoverを検出できない対話的~UAは、 この機能を~supportしなくとも,`適合性§には反しない — そのような~UAにおいては、 単純に,その種の選択子が何かに合致することは決してないことになる。 ◎ The :hover pseudo-class applies while the user designates an element (or pseudo-element) with a pointing device, but does not necessarily activate it. For example, a visual user agent could apply this pseudo-class when the cursor (mouse pointer) hovers over a box generated by the element. Interactive user agents that cannot detect hovering due to hardware limitations (e.g., a pen device that does not detect hovering) are still conforming; the selector will simply never match in such a UA.
`平坦~tree$における要素の ある子孫(~text~nodeなどの非~要素~nodeも含む)が,上の条件に合致するならば、 要素も `hover$ps に合致する。 ◎ An element also matches :hover if one of its descendants in the flat tree (including non-element nodes, such as text nodes) matches the above conditions.
文書~言語は、 要素が `hover$ps に合致し得る追加的な仕方を定義してヨイ。 例えば `HTML$r は、 ~labelが付与された~control要素は,その~labelを与えている `label$e 要素が~hoverされたとき, `hover$ps に合致するものと定義している (`~~参照@~HTMLselectors#selector-hover$)。 ◎ Document languages may define additional ways in which an element can match :hover. For example, [HTML5] defines a labeled control element as matching :hover when its label is hovered.
注記: `hover$ps の状態は、 要素の【! 子 】子孫が~pointing装置で指されたときにも適用し得るので、 ~pointing装置の直下にない要素に `hover$ps が適用されることも起こり得る。 ◎ Note: Since the :hover state can apply to an element because its child is designated by a pointing device, it is possible for :hover to apply to an element that is not underneath the pointing device.
9.2. 作動化: `active^ps 疑似類
`active@ps 疑似類は、 ~host言語により定義されるとおり[ 利用者により “作動化された” 要素 ]に適用される。 例えば、 ~hyperlinkが誘発されている間。 ◎ The :active pseudo-class applies while an element is being “activated” by the user, as defined by the host language; for example, while a hyperlink is being triggered.
加えて, `active$ps 疑似類は、 ~boxが~pointing装置により能動的に指示されている間にも — それを生成した[ 要素/疑似要素 ]を`問わず^em — 適用される。 能動的とは、 例えば,次のようなときである ⇒# 利用者が~mouseの首~buttonを押してから離すまでの間/ 利用者の手指が~touchscreenを押している間【おそらく、一定時間以上,触れている間】。 ◎ In addition, the :active pseudo-class applies while any generated box of any element (or pseudo-element) is being actively indicated by a pointing device (in the “down” state), e.g. between the time the user presses the primary mouse button and releases it, or while a finger is pressing on a touchscreen.
注記: `HTML$r 【![HTML5]】は、 `~HTML要素が作動化されるための特有な条件@~HTMLselectors#selector-active$を定義する。 ◎ Note: [HTML5] defines specific conditions for HTML elements to be activated .
`平坦~tree$における 要素のある子孫(~text~nodeなどの非~要素~nodeも含む)が,上の条件に合致するならば、 要素も `active$ps に合致する。 ◎ An element also matches :active if one of its descendants in the flat tree (including non-element nodes, such as text nodes) matches the above conditions.
9.3. 入力~focus: `focus^ps 疑似類
`focus@ps 疑似類は、[ 要素/疑似要素 ]が~focusを得ている (~keyboard~event, あるいは他の形による入力を受容する) 間だけ,適用される。 ◎ The :focus pseudo-class applies while an element (or pseudo-element) has the focus (accepts keyboard or other forms of input).
~focusを獲得できる要素には、[ 文書~言語/実装 ]に特有な制限sがあり得る。 例えば `HTML$r は、 いくつかの`~focus可能な区画$を定義している。 ◎ There may be document language or implementation specific limits on which elements can acquire :focus. For example, [HTML] defines a list of focusable areas.
文書~言語は、 要素が `focus$ps に合致し得る追加的な仕方を定義してヨイが、 `focus$ps 疑似類は,要素の親へ自動的には伝播しないモノトスル — 親への合致-が欲される場合は `focus-within$ps を見よ (他の仕組みに因り伝播される結果, `focus$ps が親~要素に適用されることはあってもよいが、 単に親であるだけでは,そうならないことに注意)。 ◎ Document languages may define additional ways in which an element can match :focus, except that the :focus pseudo class must not automatically propagate to the parent element—see :focus-within if matching on the parent is desired. (:focus may still apply to the parent element if made to propagate due to other mechanisms, but not merely due to being the parent.)
一部の作者からは、 `focus$ps が[ ~form~controlから,それに結付けられた `label$e 要素へ伝播する ]ことが欲されている。 それに対する主な異議は、 実装の困難さに見受けられる。 `397$issue, ~HTMLの`課題 #1632@~HTMLissue/1632$ を見よ。 ◎ There’s a desire from authors to propagate :focus from a form control to its associated label element; the main objection seems to be implementation difficulty. See CSSWG issue (CSS) and WHATWG issue (HTML).
9.4. ~focus指示-先: `focus-visible^ps 疑似類
`focus$ps `疑似類$は、 常に,現在~focusを得ている要素に合致するが、 ~UAが可視になるよう( “~focus環” を描くなどにより) `~focusを指示-@ するのは、 様々な経験則を利用して,利用者にとって最も助けになると~~決定したときに限られる。 `focus-visible@ps 疑似類は、 これらの状況に限り,~focusを得ている[ 要素/疑似要素 ]に合致する — それは、 ~focus指示子が`いつ^em現れるかを変更することなく, 当の~focus指示子の外観を変更することを作者に許容する。 ◎ While the :focus pseudo-class always matches the currently-focused element, UAs only sometimes visibly indicate focus (such as by drawing a “focus ring”), instead using a variety of heuristics to visibly indicate the focus only when it would be most helpful to the user. The :focus-visible pseudo-class matches a focused element (or pseudo-element) in these situations only, allowing authors to change the appearance of the focus indicator without changing when a focus indicator appears.
この例では、 ~focus可能な どの要素も[ `focus-visible$ps に合致するときは,~~太く黄色い外形線を取得する ]ことに加え、 特に~linkは,黄色い背景も取得する。 これらの~styleは、[ ~pageを全体を通して一貫する ]かつ[ ~~太くされた~style付けに因り容易に可視になる ]が,[ ~page~focusが どこに在るか利用者が理解する必要がある ]と見込まれない限り現れない。 ◎ In this example, all focusable elements get a strong yellow outline on :focus-visible, and links get both a yellow outline and a yellow background on :focus-visible. These styles are consistent throughout the page and are easily visible due to their bold styling, but do not appear unless the user is likely to need to understand where page focus is.
:root { --focus-gold: #ffbf47; } :focus-visible { outline: 3px solid var(--focus-gold); } a:focus-visible { background-color: var(--focus-gold); }
~UAは、[ 現在~focusを得ている要素が,いつ`~focusを指示-$するか ]を自前の経験則により選べる。 しかしながら、 それに関して,次に挙げる(規範的でない)示唆を出発点として利用できる: ◎ User agents can choose their own heuristics for when to indicate focus; however, the following (non-normative) suggestions can be used as a starting point for when to indicate focus on the currently focused element:
- 利用者は[ 可視な~focus指示子を常に見る選好 ]を表出した場合 (~system選好や~browser設定を介するなどして) ⇒ 他の要因に関わらず,`~focusを指示-$する (~UAには、 作者~styleに関わらず自前の~focus指示子を示す~optionもある)。 ◎ If the user has expressed a preference (such as via a system preference or a browser setting) to always see a visible focus indicator, indicate focus regardless of any other factors. (Another option may be for the user agent to show its own focus indicator regardless of author styles.)
- 当の要素は~keyboard入力を~supportする場合 ( `input$e 要素~その他の[ 物理的な~keyboardが無いときには、 ~focusに対し~virtual~keyboardを示すよう誘発する要素 ]など) ⇒ `~focusを指示-$する。 ◎ If the element which supports keyboard input (such as an input element, or any other element that would triggers a virtual keyboard to be shown on focus if a physical keyboard were not present), indicate focus.
-
利用者は[ ~keyboardその他の~pointing装置でない何か ]を介して~pageとヤリトリしている場合 ⇒ `~focusを指示-$する。 ◎ If the user interacts with the page via keyboard or some other non-pointing device, indicate focus.\
(すなわち, 当の要素が この疑似類に合致するかどうかは、 ~keyboardの利用有無に応じて変化し得る — `focus$ps には影響しない場合でも)。 ◎ (This means keyboard usage may change whether this pseudo-class matches even if it doesn’t affect :focus).
- 利用者は~pointing装置(~mouse, ~touch~screen, 等々)を介して~pageとヤリトリしていて、 当の要素は~keyboard入力を~supportしない場合 ⇒ `~focusを指示-$しない。 ◎ If the user interacts with the page via a pointing device (mouse, touchscreen, etc.) and the focused element does not support keyboard input, don’t indicate focus.
- ~scriptが~focusを移動した場合 ⇒ 新たに~focusを得た要素は、 それまで~focusを得ていた要素が`~focusを指示-$して ⇒# いたならば,`~focusを指示-$する/ いなかったならば,`~focusを指示-$しない ◎ If the previously-focused element indicated focus, and a script causes focus to move elsewhere, indicate focus on the newly focused element. ◎ Conversely, if the previously-focused element did not indicate focus, and a script causes focus to move elsewhere, don’t indicate focus on the newly focused element.
- 新たに表示された要素が~focusを自動的に得るようになる場合 (新規に開いた~dialog内の動作~buttonなど)、 当の要素は,`~focusを指示-$するべきである。 ◎ If a newly-displayed element automatically gains focus (such as an action button in a freshly opened dialog), that element should indicate focus.
~UAは、 既定の~focus~styleを指定するときも `focus-visible$ps を利用するベキである — `focus-visible^ps を利用している作者が既定の `focus$ps ~styleも不能化する必要がなくなるよう。 ◎ User agents should also use :focus-visible to specify the default focus style, so that authors using :focus-visible will not also need to disable the default :focus style.
9.5. ~focus容器: `focus-within^ps 疑似類
`focus-within@ps 疑似類は、 次を満たす[ 要素/疑似要素 ]に合致する【!適用される】 ⇒ 自身または[ `平坦~tree$における,その ある子孫(~text~nodeなどの非~要素~nodeも含む) ]は、[ `focus$ps 疑似類に合致するための条件 ]を満たす ◎ The :focus-within pseudo-class applies to any element (or pseudo-element) for which the :focus pseudo class applies, as well as to an element (or pseudo-element) whose descendant in the flat tree (including non-element nodes, such as text nodes) matches the conditions for matching :focus.
10. 時系列 疑似類
この節の疑似類は、[ 現在~表示-中かどうか, あるいは何らかの時列線における作動中な期間 ]に基づいて,要素を分類する。 文書を発話として具現化するときや, ~WebVTTを利用して動画を表示する間に字幕を描画するなどの用途がある。 ◎ These pseudo-classes classify elements with respect to the currently-displayed or active position in some timeline, such as during speech rendering of a document, or during the display of a video using WebVTT to render subtitles.
~CSSは、 この時列線を定義しない。 それは~host言語が定義しなければナラナイ。 これらの疑似類は、 時列線が定義されていない要素には合致しないモノトスル。 ◎ CSS does not define this timeline; the host language must do so. If there is no timeline defined for an element, these pseudo-classes must not match the element.
注記: `current$ps 要素の先祖もまた `current$ps になるが、 `future$ps 要素の先祖も `future$ps になる必要はない。 所与の要素は、 少なくとも[ `current$ps, `past$ps, `future$ps ]のうちいずれかに合致する。 ◎ Note: Ancestors of a :current element are also :current, but ancestors of a :past or :future element are not necessarily :past or :future as well. A given element matches at most one of :current, :past, or :future.
10.1. 現在-要素: `current^ps 疑似類
`current@ps 疑似類は、 次に該当する要素を表現する ⇒ 現在~表示されている要素, または【および?】その先祖である ◎ The :current pseudo-class represents the element, or an ancestor of the element, that is currently being displayed.
関数-形の `current()@ps 疑似類もあり、 `is()$ps と同様に,`複合-選択子$たちが`成す~list$を引数にとる。 この場合、 %E を `current$ps 要素とするとき, %E が引数にも合致するならば %E 自身を表現し、 合致しない場合は[ %E の先祖であって, 引数に合致する要素のうち %E に最も近い先祖 ]を表現する(どれにも合致しない場合は何も表現しない)。 ◎ Its alternate form :current(), like :is(), takes a list of compound selectors as its argument: it represents the :current element that matches the argument or, if that does not match, the innermost ancestor of the :current element that does. (If neither the :current element nor its ancestors match the argument, then the selector does not represent anything.)
【 `current$ps 要素 — 例えば `elem:current(…)^css の様に記されているとき,“最も近い先祖” は `elem^css 型でもなければならないのか? それとも `elem^css 型の `current^ps 要素の先祖のうち引数に合致するような “最も近い先祖” なのかどっち? 】
例えば 次の規則は、 文書を発話として具現化するときに,読み上げられる段落, または~list~itemを強調することになる: ◎ For example, the following rule will highlight whichever paragraph or list item is being read aloud in a speech rendering of the document:
:current(p, li, dt, dd) { background: yellow; }
10.2. 過去-要素: `past^ps 疑似類
`past@ps 疑似類は、 次に該当する要素を表現する ⇒ 要素~全体が `current$ps 要素より先に生じるものと定義されているもの。 例えば、 ~WebVTT仕様は, `past$ps 疑似類を 【!http://dev.w3.org/html5/webvtt/】 `~media要素の現在の再生~位置に相対的@https://w3c.github.io/webvtt/#the-past-and-future-pseudo-classes$であるものと定義する。 ◎ The :past pseudo-class represents any element that is defined to occur entirely prior to a :current element.\ For example, the WebVTT spec defines the :past pseudo-class relative to the current playback position of a media element.\
文書~言語に要素の時系列順が定義されていない場合、 これは `current$ps 要素に先行するすべての同胞~要素を表現する。 ◎ If a time-based order of elements is not defined by the document language, then this represents any element that is a (possibly indirect) previous sibling of a :current element.
10.3. 未来-要素: `future^ps 疑似類
`future@ps 疑似類は、 次に該当する要素を表現する ⇒ 要素~全体が `current$ps 要素より後に生じるものと定義されているもの。 例えば、 ~WebVTT仕様は, `future$ps 疑似類を `~media要素の現在の再生~位置に相対的@https://w3c.github.io/webvtt/#the-past-and-future-pseudo-classes$であるものと定義する。 ◎ The :future pseudo-class represents any element that is defined to occur entirely after a :current element.\ For example, the WebVTT spec defines the :future pseudo-class relative to the current playback position of a media element.\
文書~言語により要素の時系列順が定義されていない場合、 これは `current$ps 要素に後続するすべての同胞~要素を表現する。 ◎ If a time-based order of elements is not defined by the document language, then this represents any element that is a (possibly indirect) next sibling of a :current element.
11. 資源~状態 疑似類
この節の疑似類は、 特に画像や動画【/音声】など,読込まれた資源を表現する要素に適用され、 それらを[ それらの状態の何らかの性質に基づいて選択する ]ことを作者に許容する。 ◎ The pseudo-classes in this section apply to elements that represent loaded resources, particularly images/videos, and allow authors to select them based on some quality of their state.
11.1. ~media再生-状態: `playing^ps, `paused^ps, `seeking^ps 疑似類
`playing@ps 疑似類は、 次に該当する要素を表現する ⇒ [ “再生する”, “静止する” ]能力を有していて, “再生している” もの (これには、 明示的に “再生されている” 状態の他にも,[ “~bufferしている”, “停滞した” ]など、[ 利用者の意図によらない何らかの事由 ]で一時的に停止されていて,[ その事由が解決された時点で自動的に再開する状態 ]も含まれる。) ◎ The :playing pseudo-class represents an element that is capable of being “played” or “paused”, when that element is “playing”. (This includes both when the element is explicitly playing, and when it’s temporarily stopped for some reason not connected to user intent, but will automatically resume when that reason is resolved, such as a “buffering” or “stalled” state.)
`paused@ps 疑似類は、 次に該当する要素を表現する ⇒ [ “再生する”, “静止する” ]能力を有していて, “静止している” もの (これには、 明示的に “静止された” 状態の他にも,[ “読込まれたが、 まだ作動化されていない” ことにより,再生していない状態 ]も含まれる)。 ◎ The :paused pseudo-class represents an element that is capable of being “played” or “paused”, when that element is “paused” (i.e. not ”playing”). (This includes both an explicit “paused” state, and other non-playing states like “loaded, hasn’t been activated yet”, etc.)
`seeking@ps 疑似類は、 次に該当する要素を表現する ⇒ “~seekする” 能力を有していて,~seekしているもの。 ( ~HTMLの[ `audio$e / `video$e ]要素に対しては、 `HTML$r `§ ~seek法@~HEmedia#seeking$ を見よ。) ◎ The :seeking pseudo-class represents an element that is capable of ”seeking” when that element is ”seeking”. (For the audio and video elements of HTML, see HTML § 4.8.11.9 Seeking.)
11.2. ~media読込ng状態: `buffering^ps, `stalled^ps 疑似類
`buffering@ps 疑似類は、 次に該当する要素を表現する ⇒ [ “再生する”, “静止する” ]能力を有していて,`~media~data$を得するよう能動的に試みているが、 再生を再開するに十分な~dataを得していないので,再生し続けられないもの。 (要素は、 “~bufferしている” ときでも, “再生している” ものと見なされることに注意。 `buffering$ps に合致する要素は `playing$ps にも合致する。) ◎ The :buffering pseudo-class represents an element that is capable of being “played” or “paused”, when that element cannot continue playing because it is actively attempting to obtain media data but has not yet obtained enough data to resume playback. (Note that the element is still considered to be “playing” when it is “buffering”. Whenever :buffering matches an element, :playing also matches the element.)
`stalled@ps 疑似類は、 次に該当する要素を表現する ⇒ “再生する” 能力を有していて, `~media~data$を得するよう能動的に試みているが、 ある量の時間~内に~dataを受信するのに失敗したので,再生し続けられないもの。 (~HTMLの[ `audio$e / `video$e ]要素に対しては、 この時間~量は `~media要素の停滞-制限時間$と称される `HTML$r 。) ( `buffering$ps 疑似類と同様に,要素は、 “停滞している” ときでも, “再生している” ものと見なされることに注意。 `stalled$ps に合致する要素は `playing$ps にも合致する。) ◎ The :stalled pseudo-class represents an element when that element cannot continue playing because it is actively attempting to obtain media data but it has failed to receive any data for some amount of time. For the audio and video elements of HTML, this amount of time is the media element stall timeout. [HTML] (Note that, like with the :buffering pseudo-class, the element is still considered to be “playing” when it is “stalled”. Whenever :stalled matches an element, :playing also matches the element.)
11.3. 音響~状態: `muted^ps, `volume-locked^ps 疑似類
`muted@ps 疑似類は、 次に該当する要素を表現する ⇒ 音響を鳴らす能力を有しているが、 現在 “消音されて” 【!(forced silent)】いるもの。 (~HTMLの[ `audio$e / `video$e ]要素~用には、 `消音-@~HEmedia#concept-media-muted$ `HTML$r を見よ。) ◎ The :muted pseudo-class represents an element that is capable of making sound, but is currently “muted“ (forced silent). (For the audio and video elements of HTML, see muted. [HTML])
`volume-locked@ps 疑似類は、 次に該当する要素を表現する ⇒ 音響を鳴らす能力を有しているが、 現在は[ ~UA/利用者 ]により音量は “~lockされて” いるので,~page作者は それを変更できないもの。 (~HTMLの[ `audio$e / `video$e ]要素~用には,要素の`実効~media音量$を設定する~algo `HTML$r を見よ。) ◎ The :volume-locked pseudo-class represents an element that is capable of making sound, and currently has its volume "locked" by the UA or the user, so the page author cannot change it. (For the audio and video elements of HTML, see the algorithm for setting the element’s effective media volume. [HTML])
12. 要素~表示~状態 疑似類
12.1. 開閉~状態: `open^ps, `closed^ps 疑似類
`open@ps 疑似類は、 次に該当する要素を表現する ⇒ [ “開な”, “閉な” ]両~状態をとり得るが, 現在は “開な” 状態にあるもの。 ◎ The :open pseudo-class represents an element that has both “open” and “closed” states, and which is currently in the “open” state.
`closed@ps 疑似類は、 次に該当する要素を表現する ⇒ [ “開な”, “閉な” ]両~状態をとり得るが, 現在は “閉な” 状態にあるもの。 ◎ The :closed pseudo-class represents an element that has both “open” and “closed” states, and which is currently in the closed state.
[ “開な”, “閉な” ]が正確に何を意味するかは,~host言語に特有であるが、 例えば~HTMLの[ `details$e, `select$e, `dialog$e ]などの要素は,もっと内容を表示するよう “開な” 状態に~toggleできる ( `dialog$e の事例では、 内容~すべてが,表示されるかされないか)。 ◎ Exactly what “open” and “closed” mean is host-language specific, but exemplified by elements such as HTML’s details, select, and dialog elements, all of which can be toggled “open” to display more content (or any content at all, in the case of dialog).
注記: [ “開な” / “閉な” ]は、 意味論上の状態である。 現在~表示されてない要素 (例: `visibility$p が `collapse^v にされたもの/ `display$p が `none^v にされた下位treeに属するもの) であっても、 “開な” 状態になり得る — その場合、 `open$ps に合致することになる。 ◎ Note: Being “open” or “closed” is a semantic state. An element not currently being displayed (for example, one that has visibility: collapse, or belongs to a display: none subtree) can still be “open” and will match :open.
12.2. ~modal(排他的なヤリトリ)状態: `modal^ps 疑似類
`modal@ps 疑似類は、 次に該当する要素を表現する ⇒ 要素が退けられるまでは、 要素の外側における すべてのヤリトリを除外する状態にある。 ◎ The :modal pseudo-class represents an element which is in a state that excludes all interaction with elements outside it until it has been dismissed.\
`modal$ps には複数の要素が同時に合致し得るが、 作動中にある(入力を受取れる)ものは,それらのうち 1 つに限られる。 ◎ Multiple elements can be :modal simultaneously, with only one of them active (able to receive input).
- `dialog$e 要素は、 `showModal()@~HEinteractive#dom-dialog-showmodal$c ~APIで開かれたとき, `modal$ps に合致する。
- `fullscreen$ps に合致する要素は、 `requestFullscreen()@~FULLSCREEN#dom-element-requestfullscreen$c ~APIで開かれたとき, `modal$ps に合致する — これは、 当の~pageを成す残りの部分とのヤリトリを防止するので。
12.3. ~fullscreen呈示~状態: `fullscreen^ps 疑似類
`fullscreen@ps 疑似類は、 次に該当する要素を表現する ⇒ 要素は,~screenのほとんど(通例的には すべて)を占める~modeで表示されている — 例えば、 `FULLSCREEN$r ~APIにて定義されるものなど。 ◎ The :fullscreen pseudo-class represents an element which is displayed in a mode that takes up most (usually all) of the screen, such as that defined by the Fullscreen API. [FULLSCREEN]
12.4. ~picture-in-picture呈示~状態: `picture-in-picture^ps 疑似類
`picture-in-picture@ps 疑似類は、 次に該当する要素を表現する ⇒ 要素は,表示域のほとんど(通例的には すべて)を占める~modeで表示されていて、 要素が他の内容~越しに表示されている間, 表示域は~screenの一部に限定されている — 例えば、 `picture-in-picture$r ~API を利用しているとき。 ◎ The :picture-in-picture pseudo-class represents an element which is displayed in a mode that takes up most (usually all) of the viewport, and whose viewport is confined to part of the screen while being displayed over other content, for example when using the Picture-in-Picture API. [picture-in-picture]
13. 入力 疑似類
この節の疑似類のほとんどは、 ~HTMLの `input$e 要素など,利用者からの入力をとる要素を対象にする。 ◎ The pseudo-classes in this section mostly apply to elements that take user input, such as HTML’s input element.
13.1. 入力~controlの状態
13.1.1. 操作可否: `enabled^ps, `disabled^ps 疑似類
[ `enabled@ps / `disabled@ps ]疑似類は、[ 可能化-/不能化- ]された~UI要素を表現する。 その種の要素は、 対応する[ 不能化/可能化 ]状態も備えるモノトスル。 ◎ The :enabled pseudo-class represents user interface elements that are in an enabled state; such elements must have a corresponding disabled state. ◎ Conversely, the :disabled pseudo-class represents user interface elements that are in a disabled state; such elements must have a corresponding enabled state.
何が~UI要素とされ,何が[ 可能化/不能化 ]状態を成すかは、 ~host言語に依存する。 大概の文書では、 ほとんどの要素は[ `enabled$ps / `disabled$ps ]の対象にならない。 例えば `HTML$r では、 対話的な要素のうち,不能化されていないものが `enabled^ps であるとされ (`~~参照@~HTMLselectors#selector-enabled$), 明示的に不能化されている要素が `disabled^ps であるとされている (`~~参照@~HTMLselectors#selector-disabled$)。 ◎ What constitutes an enabled state, a disabled state, and a user interface element is host-language-dependent. In a typical document most elements will be neither :enabled nor :disabled. For example, [HTML5] defines non-disabled interactive elements to be :enabled, and any such elements that are explicitly disabled to be :disabled.
注記: 利用者が所与の~UI要素とヤリトリできるかどうかに影響する~CSS~propは、 それが[ `enabled$ps / `disabled$ps ]に合致するかどうかに影響しない。 例えば, `display$p や `visibility$p ~propには、 要素の[ 可能化/不能化 ]の状態に対する効果は無い。 ◎ Note: CSS properties that might affect a user’s ability to interact with a given user interface element do not affect whether it matches :enabled or :disabled; e.g., the display and visibility properties have no effect on the enabled/disabled state of an element.
13.1.2. 変異能: `read-only^ps, `read-write^ps 疑似類
`read-write@ps は、 文書~言語により[ 利用者が内容を改めれる ]ものと定義される要素に合致する。 他のものは、 `read-only@ps に合致する。 ◎ An element matches :read-write if it is user-alterable, as defined by the document language. Otherwise, it is :read-only.
例えば `HTML$r では、 次に挙げるものが `read-write^ps であるとされる (`~~参照@~HTMLselectors#selector-read-write$):
- `input$e 要素のうち,次を満たすもの ⇒ [ 不能化されていない ]~AND[ 読専でない ]
- 次を満たす要素 ⇒ `contenteditable@~HTMLinteraction#attr-contenteditable$a 属性の状態 ~EQ `true@~HTMLinteraction#attr-contenteditable-true-state$st
13.1.3. 仮入力例示: `placeholder-shown^ps 疑似類
入力~要素は、 利用者~向けの~hintとして仮入力~textを例示することがある。 例えば `HTML$r の `placeholder^a 属性 (`~~参照@~HTMLselectors#selector-placeholder-shown$)。 `placeholder-shown@ps 疑似類は、 そのような仮入力~text — ~DOM内の属性や要素から与えられているか,あるいは~UAにより黙示される~text — を例示している入力~要素に合致する。 ◎ Input elements can sometimes show placeholder text as a hint to the user on what to type in. See, for example, the placeholder attribute in [HTML5]. The :placeholder-shown pseudo-class matches an input element that is showing such placeholder text, whether that text is given by an attribute or a real element, or is otherwise implied by the UA.
例えば,[ `input$e / `textarea$e ]要素~上の `placeholder^a 属性は、 `HTML$r の意味論に則って,仮入力~textを供する。 したがって `placeholder-shown^ps 疑似類は、 そのような仮入力~textが示されているときに適用される。 ◎ For example, according to the semantics of [HTML] the placeholder attribute on the input and textarea elements provide placeholder text. The :placeholder-shown class thus applies whenever such placeholder text is shown.
13.1.4. 自動的~入力: `autofill^ps 疑似類
`autofill@ps 疑似類は、 ~UAにより自動的に埋められる入力~要素のうち, 後続して利用者により改められてないものを表現する。 ◎ The :autofill pseudo-class represents input elements that have been automatically filled by the user agent, and have not been subsequently altered by the user.
13.1.5. 既定の~option: `default^ps 疑似類
`default@ps 疑似類は、 ~UI要素のうち[ 一連の類似な要素の中で,既定の選択肢にされたものたち ]を対象にする。 概して, 文脈~menu~item, ~button, ~select~list, ~select~menu が対象になる。 ◎ The :default pseudo-class applies to the one or more UI elements that are the default among a set of similar elements. Typically applies to context menu items, buttons and select lists/menus.
例えば、 一連の~buttonの中の既定の提出-~buttonや, ~popup~menuの中の既定の~optionなど。 多数の選択肢がある~groupの中では【! (such as for pizza toppings)】,複数の要素が `default$ps に合致し得る。 例えば `HTML$r では、[ ~formの中の “既定の” ~button, `select$e 要素のうち初期~時に選択-済みな `option$e 要素(複数も可), その他の少数の要素 ]が, `default$ps に合致するものとされている (`~~参照@~HTMLselectors#selector-default$)。 ◎ One example is the default submit button among a set of buttons. Another example is the default option from a popup menu. In a select-many group (such as for pizza toppings), multiple elements can match :default. For example, [HTML5] defines that :default matches the “default button” in a form, the initially-selected <option>(s) in a <select>, and a few other elements.
13.2. 入力~値の状態
13.2.1. 選択-済み~option: `checked^ps 疑似類
~radio~buttonや~checkboxは、 利用者により~toggleされ得る。 また,一部の~menu~itemは、 利用者がそれを選択したとき “~checkされた状態” になる。 その種の要素は、 “~on” に~toggleされたとき `checked@ps 疑似類の対象になる。 例えば `HTML$r では、[ ~checkされている[ ~checkbox / ~radio~button ] / 選択されている `option$e 要素 ]が `checked^ps に合致するものと定義されている (`~~参照@~HTMLselectors#selector-checked$)。 ◎ Radio and checkbox elements can be toggled by the user. Some menu items are “checked” when the user selects them. When such elements are toggled “on” the :checked pseudo-class applies. For example, [HTML5] defines that checked checkboxes, radio buttons, and selected <option> elements match :checked.
`checked$ps 疑似類は生来的に動的であり,利用者-動作により改められ得るものであるが、 文書~内に意味論上の属性 ( `HTML$r の[ `selected@~HEforms#attr-option-selected$a, `checked@~HEinput#attr-input-checked$a ]属性など) が在るか否かに基づくものでもあるので,【静的~媒体も含む】すべての媒体に適用される。 ◎ While the :checked pseudo-class is dynamic in nature, and can altered by user action, since it can also be based on the presence of semantic attributes in the document (such as the selected and checked attributes in [HTML5]), it applies to all media.
否定~疑似類を利用すれば、 ~checkされていない~checkboxも選択できる: ◎ An unchecked checkbox can be selected by using the negation pseudo-class:
input[type=checkbox]:not(:checked)
13.2.2. 不定な値: `indeterminate^ps 疑似類
`indeterminate@ps 疑似類は、 値が不定~状態にある~UI要素を対象にする。 例えば,[ ~radio~button/~checkbox ]は、 ~checkの有無が~toggleされ得るが, そのどちらでもない不定~状態をとることもある。 類似に,進捗計は、 完了~~率が未知なとき,不定~状態をとり得る。 例えば `HTML$r は、 ~checkboxが どのようなとき `indeterminate^ps に合致するかを定義する (`~~参照@~HTMLselectors#selector-indeterminate$)。 ◎ The :indeterminate pseudo-class applies to UI elements whose value is in an indeterminate state. For example, radio and checkbox elements can be toggled between checked and unchecked states, but are sometimes in an indeterminate state, neither checked nor unchecked. Similarly a progress meter can be in an indeterminate state when the percent completion is unknown. For example, [HTML5] defines how checkboxes can be made to match :indeterminate.
`checked$ps 疑似類と同様に、 `indeterminate$ps も すべての媒体に適用される。 例えば,初期~時に選択-済みなものがない~radio~groupを成す各~部品は、 静的~表示の下でも `indeterminate$ps に合致する。 ◎ Like the :checked pseudo-class, :indeterminate applies to all media. Components of a radio-group initialized with no pre-selected choice, for example, would be :indeterminate even in a static display.
13.3. 入力~値の検査-法
13.3.1. 空な値: `blank^ps 疑似類
`blank@ps 疑似類は、 利用者~入力~要素のうち,入力~値は空であるもの (入力が空~文字列あるいは “無い” もの) に適用される。 ◎ The :blank pseudo-class applies to user-input elements whose input value is empty (consists of the empty string or otherwise null input).
注記: 大雑把に言えば、 ヒトが印刷された~formを見て空欄と~~認識する場合, それは `blank$ps に合致する。 ◎ Roughly speaking, if a human looked at a printout of the form and would say it’s blank, it matches :blank.
~form~controlに対し `blank$ps を解釈する~~経験則として,次が挙げられる: ◎ A rule of thumb for interpreting :blank on form controls is:
- 当の~controlは 常に提出されるものであって, 空~文字列を伴って提出されることになる場合、 `blank$ps に合致する。 (例:~HTMLにおける[ `Text$st 状態にある `input$e 要素 ]のうち,その値が空なもの。) ◎ If the control always submits, and would do so with an empty string, it matches :blank. (Such as HTML’s <input type=text> when its value is empty.)
- 当の~controlは ときには提出されるものであって, 提出しないよう設定されている場合、 `blank$ps に合致する。 (例:~HTMLにおける[ `Checkbox$st 状態にある `input$e 要素 ]のうち,~checkされてないもの。) ◎ If it sometimes submits, and is set to not submit, it matches :blank. (Such as HTML’s <input type=checkbox> when not checked.)
- 当の~controlは “動作~button” である場合 (状態を表現する “~toggle~button” ではなく)、 `blank$ps には決して合致しない (例: `button$e 要素, `Submit$st 状態にある `input$e 要素, 等々)。 ◎ If it’s an “action button” (rather than a “toggle button” that represents a state) such as <button>, <input type=submit>, etc., it never matches :blank.
`~host言語$は、 各種~form~controlが いつ `blank$ps 合致するかについて, もっと精確な規則を指定し得る。 ◎ Host languages can specify more precise rules for when form controls match :blank.
注記: この選択子は~risk下にある。 ◎ Note: This selector is at-risk.
13.3.2. 妥当性: `valid^ps, `invalid^ps 疑似類
要素は,その内容や値【概ね,入力された値】が`文書~言語$ (例: `XFORMS11$r や `HTML$r ) が定義する~data妥当性~意味論に則って 妥当であるかどうかに従って, `valid@ps (妥当である)/ `invalid@ps (妥当でない) とされる。 ~data妥当性~意味論を欠く要素は、 これらの疑似類の対象にならない。 ◎ An element is :valid or :invalid when its contents or value is, respectively, valid or invalid with respect to data validity semantics defined by the document language (e.g. [XFORMS11] or [HTML5]). An element which lacks data validity semantics is neither :valid nor :invalid.
注記: [ 拘束がないことから,常に `valid$ps になる要素 ]と[ ~data妥当性~意味論をまったく備えないことから, `valid$ps にも `invalid$ps にもならない要素 ]は、 別物であることに注意。 例えば~HTMLにおいては、 `Text$st 状態にある `input$e 要素は,拘束がないものになり得るが、 `p$e 要素は,~data妥当性~意味論を備えないので これらの疑似類に合致することは決してない。 ◎ Note: There is a difference between an element which has no constraints, and thus would always be :valid, and one which has no data validity semantics at all, and thus is neither :valid nor :invalid. In HTML, for example, an <input type="text"> element may have no constraints, but a p element has no validity semantics at all, and so it never matches either of these pseudo-classes.
13.3.3. 範囲: `in-range^ps, `out-of-range^ps 疑似類
[ `in-range@ps / `out-of-range@ps ]疑似類が適用されるのは、 範囲に制限がある要素に限られる。 要素は、[ 自身に束縛されている値 ]が[ 文書~言語が定義する範囲 ]に[ 入るならば `in-range$ps / 入らないならば `out-of-range$ps ]に合致する。 [ ~data範囲が制限されない要素/~form~controlでない要素 ]は、 これらの疑似類の対象にならない。 ◎ The :in-range and :out-of-range pseudo-classes apply only to elements that have range limitations. An element is :in-range or :out-of-range when the value that the element is bound to is in range or out of range with respect to its range limits as defined by the document language. An element that lacks data range limits or is not a form control is neither :in-range nor :out-of-range.\
例えば,次のような要素は、 `out-of-range$ps になる:
- 1 から 10 までの値のみを表現する~slider~controlとして呈示されている `slider^e 要素の値が 11 であるとき。
- 選択肢として[ "A", "B", "C" ]のみが在る~popup~menuとして呈示されている `menu$e 要素の値が "E" であるとき。
13.3.4. 必須随意: `required^ps, `optional^ps 疑似類
~form要素【~form部品の総称】は、 それが属する~formが妥当なものとして提出-可能になるために,その値が[ 必須( `required^en )なのか/随意( `optional^en )なのか ]に応じて[ `required@ps / `optional@ps ]の対象になる。 ~form要素でない要素は、 これらの対象にならない。 ◎ A form element is :required or :optional if a value for it is, respectively, required or optional before the form it belongs to can be validly submitted. Elements that are not form elements are neither required nor optional.
【 文面からは、[ ~HTML `form$e 要素の外にある `input$e 要素などの~form部品は, “~form要素でない” ]かのようにも解釈できそうだが, そうでもないようだ (`~HTML仕様の該当する記述@~HTMLselectors#selector-required$)。 】
13.3.5. 利用者~対話: `user-valid^ps, `user-invalid^ps 疑似類
[ `user-invalid@ps / `user-valid@ps ]疑似類は、[ 不正な/正しい ]値が入力された要素のうち[ 利用者が有意にヤリトリしたもの ]に`限り^em,表現する。 これらの目的は、 利用者が自身の入力における過ちを識別し易くすることにある。 ◎ The :user-invalid and the :user-valid pseudo-classes represent an element with incorrect or correct input, respectively, but only after the user has significantly interacted with it. Their purpose is to help the user identify mistakes in their input.
これらの疑似類は、 少なくとも[ 利用者が~formを提出するよう試みた時点 ]から[ 利用者が入力~要素と再びヤリトリするか~formを再設定する時点 ]までは,対応する要素 【 `invalid$ps / `valid$ps に合致する要素】 に合致するモノトスル — 他のときでも、 利用者~向けに~errorを強調する方が適切になるならば,合致させてヨイ。 `user-invalid$ps は,例えば、 利用者が入力~値を変更して~focusを別の要素へ移動した時点から, `invalid$ps な入力~要素に合致させ、 利用者が入力を成功裡に正したなら,その時点から合致させなくすることもできる。 ◎ These pseudo-classes must at least match their respective elements after the user has attempted to submit the form and before the user has interacted again with the input element or reset the form. They may also match at other times, as would be appropriate for highlighting an error to the user. For example, :user-invalid could start matching an :invalid input element once the user has changed its value and focus has moved to another element; or stop matching only after the user has successfully corrected the input.
~host言語は、 合致するための規則をより精確に定義しても,~platform規約へ先送りしてもヨイ — 他の場合、 正確な挙動は~UAにより定義される。 いずれにせよ、[ `user-invalid$ps / `user-valid$ps ]疑似類は[ `invalid$ps / `valid$ps ]に合致する要素に限り合致するモノトスル。 ~HTML要素に係わる特有な規則は、 `~HTML仕様@~HTMLselectors#selector-user-invalid$を見よ。 `HTML$r ◎ Host languages may define more precise matching rules or defer to platform conventions; otherwise the exact behavior is UA-defined. Regardless, the :user-invalid pseudo-class must only match :invalid elements; and the :user-valid pseudo-class must only match :valid elements. See the HTML specification for the specific rules pertaining to HTML elements. [HTML]
例えば,次の文書~片における `input$e 要素は、 ~pageが読込まれた時点では ( `input$e の初期~値( `value=11^a )が最大( `max=10^a )による拘束に違反するので), `invalid$ps に合致することになるが、 利用者が[ 当の入力~fieldと有意にヤリトリするか,それを所有している~formを提出するよう試みる ]までは, `user-invalid$ps に合致しない。 ◎ For example, the input element in the following document fragment would match :invalid as soon as the page is loaded (because the input's initial value violates its max constraint) but it won’t match :user-invalid until the user significantly interacts with the input field or attempts to submit the form it’s part of.
<form> <label> Volume: <input name='vol' type=number min=0 max=10 value=11> </label> ... </form>
14. ~tree構造上の疑似類
`構造上の疑似類@ ( `structural pseudo-class^en )は、[ 文書~tree内にある何かを表すが,他の`単純-選択子$や`結合子$では表現し得ない~~追加~情報 ]に基づく選択を許可するために導入された概念である。 ◎ Selectors introduces the concept of structural pseudo-classes to permit selection based on extra information that lies in the document tree but cannot be represented by other simple selectors or combinators.
~text~nodeなどの非~要素~nodeは、 親の中での子の位置( “付番” )を計算するときには数えられない。 この付番は 1 から開始される。 ◎ Standalone text and other non-element nodes are not counted when calculating the position of an element in the list of children of its parent. When calculating the position of an element in the list of children of its parent, the index numbering starts at 1.
`構造上の疑似類$は、 文書~tree内の要素のみに適用される — それらは、 `疑似要素$には決して合致しないモノトスル。 ◎ The structural pseudo-classes only apply to elements in the document tree; they must never match pseudo-elements.
14.1. `root^ps 疑似類
`root@ps 疑似類は、 `根~要素$を表現する。 例えば,~DOM文書においては、 `文書~要素$に合致する。 ◎ The :root pseudo-class represents an element that is the root of the document. ◎ For example, in a DOM document, the :root pseudo-class matches the document element. In HTML, this will be the html element (unless scripting has been used to modify the document).
14.2. `empty^ps 疑似類
`empty@ps 疑似類は、 `文書~空白~文字$を除き, “空” な(子が無い)要素を表現する。 文書~treeの用語で言えば、 要素が “空” かどうかに影響するものは,要素~nodeおよび[ 内容~node(~text~nodeや実体~参照など)のうち長さ 0 でない~dataを含むもの ]に限られ, 他の~node(~commentや処理命令など)は影響しないモノトスル。 `DOM$r ◎ The :empty pseudo-class represents an element that has no children except, optionally, document white space characters. In terms of the document tree, only element nodes and content nodes (such as [DOM] text nodes, and entity references) whose data has a non-zero length must be considered as affecting emptiness; comments, processing instructions, and other nodes must not affect whether an element is considered empty or not.
【 現代の~DOM(すなわち `DOM$r )においては, 実体~参照( `EntityReference$I )は廃されたので、 影響するものは[ 要素( `Element$I ), ~text( `Text$I ) ]に限られる (実体参照を利用する~XML文書においては、 置換-後の状態に基づいて解釈されることになろう)。 また, “他の~node” に該当するものは、[ ~comment( `Comment$I ), 処理命令( `ProcessingInstruction$I ), 文書( `Document$I ), 文書片( `DocumentFragment$I ), ~doctype( `DocumentType$I ) ]に限られる。 】
`p:empty^css は、 次の~HTML片においては, `p^e 要素~用の妥当な表現になる: ◎ Examples: p:empty is a valid representation of the p elements in the following HTML fragment:
<p></p> <p> <p> </p> <p></p>
`div:empty^css は、 次の~HTML片においては, `div^e 要素~用の妥当な表現にならない: ◎ div:empty is not a valid representation of the <div> elements in the following fragment:
<div>text</div> <div><p></p></div> <div> </div> <div><p>bla</p></div> <div>this is not <p>:empty</p></div>
注記: `~level 2$, `~level 3$ では、 `empty^ps は,空白のみを包含する要素には合致していなかった。 これは、変更された: ~HTMLにおいては、 空白は広く縮約-可能であり,~source~codeの整形~用に利用される — とりわけ,終了~tagが省略された要素は、 そのような空白を およそ~DOM~text内容に吸収する。 そのため、[ 作者が空と知覚する多くの要素は、 期待されるとおり,この選択子で選択できる ]よう変更された。 ◎ Note: In Level 2 and Level 3 of Selectors, :empty did not match elements that contained only white space. This was changed so that that—given white space is largely collapsible in HTML and is therefore used for source code formatting, and especially because elements with omitted end tags are likely to absorb such white space into their DOM text contents—elements which authors perceive of as empty can be selected by this selector, as they expect.
14.3. 子付番 疑似類
この節にて定義される疑似類は、 要素の`同胞~群$における付番 【要素はその同胞~群の中で何個目に~~位置するか】 に基づいて選択する。 ◎ The pseudo-classes defined in this section select elements based on their index amongst their inclusive siblings.
注記: `~level 3$ では、 これらの選択子を,[[[ 要素の親の,子~list ]における,要素の付番 ]に基づいて要素を選択するもの ]として述べていた (この記述は、 この節~自体, および いくつかの疑似類の下でも,生き残る)。 が、 要素の親が無いあるいは要素でない場合を除外する理由はないので、 `同胞~群$の中での要素の相対的な付番と言い換えられた。 ◎ Note: Selectors 3 described these selectors as selecting elements based on their index in the child list of their parents. (This description survives in the name of this very section, and the names of several of the pseudo-classes.) As there was no reason to exclude them from matching elements without parents, or with non-element parents, they have been rephrased to refer to an element’s relative index amongst its siblings.
要素 %E の `同胞~群@ とは、 %E と`広義-同胞$の関係にある要素たちが成す,`~tree順序$による集合である ( %E 自身は常に含まれる)。 単に “同胞~群” と記されたときは、 文書~tree内のある要素の`同胞~群$を意味する。
【 この用語は、 以下を簡潔に述べるために,この訳に導入している。 定義により、 親が要素でない要素であっても,その`同胞~群$は要素を含む (例:`文書~要素$の同胞~群は、それ自身のみからなる)。 】
14.3.1. `nth-child()^ps 疑似類
疑似類~記法 `nth-child(~AnB [of ~varS]? )@ps は、 `選択子~list$ %S として `complex-real-selector-list$t をとり, 各 `同胞~群$ごとに[ その中で %S に合致するもののうち,~AnBthの要素 ]を表現する。 `of %S^css が省略された場合の既定の %S は、 `*|*^css になる。 ◎ The :nth-child(An+B [of S]? ) pseudo-class notation represents elements that are among An+Bth elements from the list composed of their inclusive siblings that match the selector list S, which is a <complex-real-selector-list>. If S is omitted, it defaults to *|*.
この節, および後続の節に現れる ~AnB 記法 とその解釈は、 `CSS3SYN$r `§ ~AnB 小構文@~CSSSYN#anb-microsyntax$ にて定義される。 ◎ The An+B notation and its interpretation are defined in CSS Syntax 3 § 6 The An+B microsyntax; it represents any index i = An + B for any non-negative integer n.
注記: この目的においては、 要素たちが成す~listは 1 から数えることに注意。 例えば、 要素の最初の子は `nth-child(2n+1)$ps に合致することになる — %n ~EQ 0 のときの式は 1 に評価されるので。 ◎ Note: For these purposes, the list of elements is 1-indexed; that is, the first child of an element has index 1, and will be matched by :nth-child(2n+1), because when n=0 the expression evaluates to 1.
この選択子は、 例えば, ~table内の~rowを飛び飛びに選択したり, 段落の~text色を一定周期で順繰りに変えていく用途に利用できる。 ◎ For example, this selector could address every other row in a table, and could be used to alternate the color of paragraph text in a cycle of four.
:nth-child(even) /* 2, 4, 6, … 個目の要素を表現する */ :nth-child(10n-1) /* 9, 19, 29, … 個目の要素を表現する */ :nth-child(10n+9) /* 同じ */ :nth-child(10n+-1) /* 構文が妥当でないので無視される */◎ :nth-child(even) /* represents the 2nd, 4th, 6th, etc elements :nth-child(10n-1) /* represents the 9th, 19th, 29th, etc elements */ :nth-child(10n+9) /* Same */ :nth-child(10n+-1) /* Syntactically invalid, and would be ignored */
注記: `nth-child()$ps 疑似類の詳細度は、 疑似類 1 個の詳細度, および[ 選択子~list引数を成す各`複階-選択子$の詳細度のうち最も高いもの (引数が無ければ 0 ) ]を足した結果になる。 `選択子の詳細度の計算-法§を見よ。 したがって, `:nth-child(~AnB of %S)^css の詳細度は、 `%S:nth-child(~AnB)^css と正確に同じになる — 挙動においては相違するが (下の例を見よ)。 ◎ Note: The specificity of the :nth-child() pseudo-class is the specificity of a single pseudo-class plus, if S is specified, the specificity of the most specific complex selector in S. See § 17 Calculating a selector’s specificity. Thus S:nth-child(An+B) and :nth-child(An+B of S) have the exact same specificity, although they do differ in behavior (see example below).
引数に選択子も渡せば、 その選択子に合致するものから, N 個目の要素を選択できる。 例えば,次の選択子は、 `important^l ~classに属する~list~itemのうち,最初の 3 個に合致する: ◎ By passing a selector argument, we can select the Nth element that matches that selector. For example, the following selector matches the first three “important” list items, denoted by the .important class:
:nth-child(-n+3 of li.important)
これは、 引数に与えた選択子を,次の様に関数の外側に出したものとは異なることに注意: ◎ Note that this is different from moving the selector outside of the function, like:
li.important:nth-child(-n+3)
この選択子は、 単に最初の 3 個の~list~itemのうち, `important^l ~classに属するものを選択する。 ◎ This selector instead just selects the first three children if they also happen to be "important" list items.
引数に選択子を利用して、 ~tableを正しく縞模様にする例を示す。 ◎ Here’s another example of using the selector argument, to ensure that zebra-striping a table works correctly.
通常は,~tableの~rowを縞模様にするときは、 次に類似な~CSSを利用することになろう: ◎ Normally, to zebra-stripe a table’s rows, an author would use CSS similar to the following:
tr { background: white; } tr:nth-child(even) { background: silver; }
しかしながら,いずれかの~rowが隠されて表示されなくなった場合、 それを挟む同じ背景~色の~rowが隣り合い,~patternが崩れる。 ~rowが~HTMLの `hidden^a 属性により隠されるとするなら、 次の~CSSにより,どの~rowが隠されようが,背景は適正に交替し、 一連の~rowは~~安定的に縞模様になる: ◎ However, if some of the rows are hidden and not displayed, this can break up the pattern, causing multiple adjacent rows to have the same background color. Assuming that rows are hidden with the [hidden] attribute in HTML, the following CSS would zebra-stripe the table rows robustly, maintaining a proper alternating background regardless of which rows are hidden:
tr { background: white; } tr:nth-child(even of :not([hidden])) { background: silver; }
14.3.2. `nth-last-child()^ps 疑似類
疑似類~記法 `nth-last-child(~AnB [of ~varS]? )@ps は、 `選択子~list$ %S として `complex-real-selector-list$t をとり, 各 `同胞~群$ごとに[ その中で %S に合致するもののうち,最後から~AnBthの要素 ]を表現する。 `of %S^css が省略された場合の既定の %S は、 `*|*^css になる。 ◎ The :nth-last-child(An+B [of S]? ) pseudo-class notation represents elements that are among An+Bth elements from the list composed of their inclusive siblings that match the selector list S, counting backwards from the end. S is <complex-real-selector-list>. If S is omitted, it defaults to *|*.
注記: `nth-last-child()$ps 疑似類の詳細度は、 `nth-child()$ps 疑似類と同様に,定例の疑似類の詳細度に その選択子~引数 %S の詳細度を足した結果になる。 `選択子の詳細度の計算-法§を見よ。 ◎ Note: The specificity of the :nth-last-child() pseudo-class, like the :nth-child() pseudo-class, combines the specificity of a regular pseudo-class with that of its selector argument S. See § 17 Calculating a selector’s specificity. ◎ ↑↑The CSS Syntax Module [CSS3SYN] defines the An+B notation.
tr:nth-last-child(-n+2) /* ~HTML~table内の最後の 2 本の~rowを表現する ◎ represents the two last rows of an HTML table */ foo:nth-last-child(odd) /* `同胞~群$の中で,最後から数えて,奇数~個目に在る `foo^e 要素を表現する ◎ represents all odd foo elements in their parent element, counting from the last one */
14.3.3. `first-child^ps 疑似類
`first-child@ps 疑似類は、 各 `同胞~群$ごとに,その中の最初の要素を表現する。 これは `:nth-child(1)^css と同じである。 ◎ The :first-child pseudo-class represents an element that if first among its inclusive siblings. Same as :nth-child(1).
次の選択子は、 `div^e 要素の最初の子である `p^e 要素を表現する: ◎ Examples: The following selector represents a p element that is the first child of a div element:
div > p:first-child
この選択子は、 次の片の `div^e 要素の内側の `p^e 要素を表現する: ◎ This selector can represent the p inside the div of the following fragment:
<p> .note の前の最後の P</p> <div class="note"> <p> .note 内の最初の P</p> </div>◎ <p> The last P before the note.</p> <div class="note"> <p> The first P inside the note.</p> </div>
が、 次の片の 2 個目の `p^e 要素は表現しない: ◎ but cannot represent the second p in the following fragment:
<p> .note の前の最後の P</p> <div class="note"> <h2> Note </h2> <p> .note 内の最初の P</p> </div>◎ <p> The last P before the note.</p> <div class="note"> <h2> Note </h2> <p> The first P inside the note.</p> </div>
通例的には,次の 2 つの選択子は等価になる: ◎ The following two selectors are usually equivalent:
* > a:first-child /* `a^e は任意の要素の最初の子~要素 ◎ a is first child of any element */ a:first-child /* 同じ( `a^e は`根~要素$でないとする) ◎ Same (assuming a is not the root element) */
14.3.4. `last-child^ps 疑似類
`last-child@ps 疑似類は、 各 `同胞~群$ごとに,その中の最後の要素を表現する。 これは `:nth-last-child(1)^css と同じである。 ◎ The :last-child pseudo-class represents an element that is last among its inclusive siblings. Same as :nth-last-child(1).
次の選択子は、 “有順序~list” `ol$e 要素の最後の子である “~list~item” `li$e 要素を表現する: ◎ Example: The following selector represents a list item li that is the last child of an ordered list ol.
ol > li:last-child
14.3.5. `only-child^ps 疑似類
`only-child@ps 疑似類は、 自身の他に同じ`同胞~群$に属する要素は無いものを表現する — これは,[ `:first-child:last-child^css / `:nth-child(1):nth-last-child(1)^css ]と同じになるが、 `詳細度$は これらより低くなる。 ◎ The :only-child pseudo-class represents an element that has no siblings. Same as :first-child:last-child or :nth-child(1):nth-last-child(1), but with a lower specificity.
14.4. 有型 子付番 疑似類
この節に与える`疑似類$は,`子付番 疑似類§に類似するが、 `同じ型の要素@#type-selectors$たちに~~限定された中で,`同胞~群$における要素の付番に基づいて解決される。 ◎ The pseudo-classes in this section are similar to the Child Index Pseudo-classes, but they resolve based on an element’s index among elements of the same type (tag name) in their sibling list.
14.4.1. `nth-of-type()^ps 疑似類
疑似類~記法 `nth-of-type(~AnB)@ps は、 `:nth-child(~AnB of %S)^css に合致するものと同じ要素たちを表現する — ここで %S は、 合致させる要素に合致するような[ 名前空間~接頭辞と`型~選択子$ ]である。 例えば,~HTML `img$e 要素がこの`疑似類$に合致するかどうかを考えるとき、 %S は `html|img^css になる ( `html^css に対する適切な名前空間は`宣言-済み$とする)。 ◎ The :nth-of-type(An+B) pseudo-class notation represents the same elements that would be matched by :nth-child(|An+B| of S), where S is a type selector and namespace prefix matching the element in question. For example, when considering whether an HTML img element matches this pseudo-class, the S in question is html|img (assuming an appropriate html namespace is declared).
これにより,複数の画像を交替的に `float^p ~~配置させられる: ◎ CSS example: This allows an author to alternate the position of floated images:
img:nth-of-type(2n+1) { float: right; } img:nth-of-type(2n) { float: left; }
【 仮に, `img^css を`全称~選択子$( `*^css )に置き換えたなら、 各 要素~型ごとに個別に適用した結果の和集合を表現することになる。 言い換えれば, `*:nth-of-type(~AnB)^css は、[ ある`型$ %E があって, `%E:nth-of-type(~AnB)^css に合致するもの ]すべてを表現する( `:nth-child(~AnB)^css とは異なる)。 】
注記: 要素の型が事前に既知ならば、 この疑似類は,型~選択子も伴う `nth-child()$ps の利用と等価になる。 すなわち、 `img:nth-of-type(2)^css は, `*:nth-child(2 of img)^css と等価になる。 ◎ Note: If the type of the element is known ahead of time, this pseudo-class is equivalent to using :nth-child() with a type selector. That is, img:nth-of-type(2) is equivalent to *:nth-child(2 of img).
14.4.2. `nth-last-of-type()^ps 疑似類
疑似類~記法 `nth-last-of-type(~AnB)@ps は、 `:nth-last-child(~AnB of %S)^css に合致するものと同じ要素たちを表現する — ここで %S は、 合致させる要素に合致するような[ 名前空間~接頭辞と`型~選択子$ ]である。 例えば,~HTML `img$e 要素がこの`疑似類$に合致するかどうかを考えるとき、 %S は `html|img^css になる ( `html^css に対する適切な名前空間は`宣言-済み$とする)。 ◎ The :nth-last-of-type(An+B) pseudo-class notation represents the same elements that would be matched by :nth-last-child(|An+B| of S), where S is a type selector and namespace prefix matching the element in question. For example, when considering whether an HTML img element matches this pseudo-class, the S in question is html|img (assuming an appropriate html namespace is declared).
次の選択子により、 `body^e 要素の子であって, 最初と最後を除くすべての `h2^e 要素を表現することが可能になる: ◎ Example: To represent all h2 children of an XHTML body except the first and last, one could use the following selector:
body > h2:nth-of-type(n+2):nth-last-of-type(n+2)
この事例では、 `not()$ps を利用する方法もある (選択子は同じ~~長さになる): ◎ In this case, one could also use :not(), although the selector ends up being just as long:
body > h2:not(:first-of-type):not(:last-of-type)
14.4.3. `first-of-type^ps 疑似類
`first-of-type@ps 疑似類は、 `:nth-of-type(1)^css に合致するものと同じ要素たちを表現する。 ◎ The :first-of-type pseudo-class represents the same element as :nth-of-type(1).
次の選択子は、 “定義~list” `dl$e の中で最初の“定義~~見出し” `dt$e を表現する。 すなわち この `dt^e は親の `dl^e 要素の子~要素~listの中で,その型の最初の要素になる: ◎ Example: The following selector represents a definition title dt inside a definition list dl, this dt being the first of its type in the list of children of its parent element.
dl dt:first-of-type
これは,次の例の最初の 2 個の `dt^e 要素に対しては妥当な記述になるが、 3 個目のそれに対してはそうならない: ◎ It is a valid description for the first two dt elements in the following example but not for the third one:
<dl> <dt>gigogne</dt> <dd> <dl> <dt>fusée</dt> <dd>multistage rocket</dd> <dt>table</dt> <dd>nest of tables</dd> </dl> </dd> </dl>
14.4.4. `last-of-type^ps 疑似類
`last-of-type@ps 疑似類は、 `:nth-last-of-type(1)^css に合致するものと同じ要素たちを表現する。 ◎ The :last-of-type pseudo-class represents the same element as :nth-last-of-type(1).
次の選択子は、 ~tableの各 “~row” `tr$e 要素の最後の “~data~cell” `td$e 要素を表現する: ◎ Example: The following selector represents the last data cell td of a table row tr.
tr > td:last-of-type
14.4.5. `only-of-type^ps 疑似類
`only-of-type@ps 疑似類は、 `:first-of-type:last-of-type^css に合致するものと同じ要素たちを表現する。 ◎ The :only-of-type pseudo-class represents the same element as :first-of-type:last-of-type.
15. 結合子
15.1. 子孫~結合子 ( ~space )
文書~treeの中で,別の要素の子孫であるような要素を記述する選択子が求まれることがある (例: “ `h1^e 要素に包含されている `em^e 要素” )。 `子孫~結合子@ ( `descendant combinator^en )は、 その種の関係性を表出する。 ◎ At times, authors may want selectors to describe an element that is the descendant of another element in the document tree (e.g., "an em element that is contained within an H1 element"). The descendant combinator expresses such a relationship.
`子孫~結合子$は、 2 つの`複合-選択子$を分離する空白で記される。 ◎ A descendant combinator is whitespace that separates two compound selectors.
[ `A B^css ]の形による選択子は、 ある `A^e 要素を先祖とする,任意な子孫 `B^e 要素を表現する。 ◎ A selector of the form A B represents an element B that is an arbitrary descendant of some ancestor element A.
次の選択子を考える: ◎ Examples: For example, consider the following selector:
h1 em
これは、 `h1^e 要素の子孫である `em^e 要素を表現する。 それは、 次の片の一部分に対する妥当な記述になる: ◎ It represents an em element being the descendant of an h1 element. It is a correct and valid, but partial, description of the following fragment:
<h1>この<span class="myclass">~~見出し行は <em>とても</em>重要です</span></h1>
次の選択子: ◎ The following selector:
div * p
は、 `div^e 要素の孫(子の子)またはより遠い子孫である `p^e 要素を表現する。 "`*^css" の両側に在る`空白$は`全称~選択子$の一部をなさないことに注意。 この`空白$は`結合子$である — すなわち, `div^e 要素が 何らかの要素 %E の先祖であって, かつ %E が `p^e 要素の先祖でなければならないことを指示している。 ◎ represents a p element that is a grandchild or later descendant of a div element. Note the whitespace on either side of the "*" is not part of the universal selector; the whitespace is a combinator indicating that the div must be the ancestor of some element, and that that element must be an ancestor of the p.\
`子孫~結合子$と`属性~選択子§を組合せる次の選択子は、 `href^a 属性が設定されていて, かつ `div^e 要素の内側に在る `p^e 要素の内側に在るような要素を表現する: ◎ The following selector, which combines descendant combinators and attribute selectors, represents an element that (1) has the href attribute set and (2) is inside a p that is itself inside a div:
div p *[`href^a]
15.2. 子~結合子 ( `>^css )
`子~結合子@ ( `child combinator^en )は、 要素と要素の親子関係を記述し, 2 つの`複合-選択子$を分離する “大なり記号” — `003E^U0, `>@css — で記される。 ◎ A child combinator describes a childhood relationship between two elements. A child combinator is made of the "greater-than sign" (U+003E, >) code point and separates two compound selectors.
次の選択子は、 `p^e 要素のうち `body^e 要素の子であるものを表現する: ◎ Examples: The following selector represents a p element that is child of body:
body > p
`子孫~結合子$と`子~結合子$を組合せる例: ◎ The following example combines descendant combinators and child combinators.
div ol>li p【! LEAVE THOSE SPACES OUT! see below 】
これは `li$e 要素の子孫であるような `p$e 要素を表現するが, `li$e 要素は `ol$e 要素の子でなければならず, `ol$e 要素は `div$e 要素の子孫でなければならない。 結合子 "`>^css" の前後の`空白$が~~省略されていることに注意。 ◎ It represents a p element that is a descendant of an li element; the li element must be the child of an ol element; the ol element must be a descendant of a div. Notice that the optional white space around the ">" combinator has been left out.
要素の最初の子を選択するような類いのものについては、 上述の`~tree構造上の疑似類§を見よ。 ◎ For information on selecting the first child of an element, please see the section on the :first-child pseudo-class above.
15.3. 直後~同胞~結合子 ( `+^css )
`直後~同胞~結合子@ ( `next-sibling combinator^en )は、 2 つの`複合-選択子$を分離する “正符号” — `002B^U0, `+@css — で記される。 この 2 つの`複合-選択子$で表現される要素は、 文書~treeの中で同じ親を共有し, 1 個目の`複合-選択子$で表現される要素が 2 個目のもので表現される要素の直前に在る。 非~要素~node(例:要素~間に挟まれた~text)は、 要素の隣接性を考慮する際には無視される。 ◎ The next-sibling combinator is made of the “plus sign” (U+002B, +) code point that separates two compound selectors. The elements represented by the two compound selectors share the same parent in the document tree and the element represented by the first compound selector immediately precedes the element represented by the second one. Non-element nodes (e.g. text between elements) are ignored when considering the adjacency of elements.
次の選択子は、 `math$e 要素の直後に在る `p$e 要素を表現する: ◎ Examples: The following selector represents a p element immediately following a math element:
math + p
次の選択子には、 `属性~選択子$が追加されている — `h1^e 要素は `opener^l ~classに属するとする拘束も追加されている — ことを除いて,前の例と概念的に類似する: ◎ The following selector is conceptually similar to the one in the previous example, except that it adds an attribute selector — it adds a constraint to the h1 element, that it must have class="opener":
h1.opener + h2
15.4. 後続~同胞~結合子 ( `~^css )
`後続~同胞~結合子@ ( `subsequent-sibling combinator^en )は、 2 つの`複合-選択子$を分離する “~tilde” — `007E^U0, `~@css — で記される。 この 2 つの`複合-選択子$で表現される要素は、 文書~treeの中で同じ親を共有し, 1 個目の`複合-選択子$で表現される要素が, 2 個目のもので表現される要素よりも先行する(直前でなくともよい)。 ◎ The subsequent-sibling combinator is made of the "tilde" (U+007E, ~) code point that separates two compound selectors. The elements represented by the two compound selectors share the same parent in the document tree and the element represented by the first compound selector precedes (not necessarily immediately) the element represented by the second one.
h1 ~ pre
は、 `h1^e 要素に後続する `pre^e 要素を表現する。 それは、 次の片の一部分に対する妥当な記述になる: ◎ represents a pre element following an h1. It is a correct and valid, but partial, description of:
<h1>~~関数 a の~~定義</h1> <p>この表のすべての図には~~関数 a(x) を~~適用すること。</p> <pre>function a(x) = 12x/13.5</pre>
16. 格子構造~選択子
2 次元~格子~内の~cellの(その~rowと~colへの)二重の所属関係は、 階層的~markup言語における親子関係では,一方のみしか 表現し得ず、 もう一方の所属関係は,文書~言語の意味論において明示的または暗黙的に定義されなければナラナイ。 2 つの最も共通的な階層的~markup言語である~HTMLと DocBook の両者とも, ~markupは~row主導であり (すなわち,~rowへの所属関係が階層的に表現される)、 ~colについては暗黙に与えられなければナラナイ。 その種の~colへの暗黙な所属関係を表現し得るようにするため、 `~column結合子$ および `nth-col()$ps , `nth-last-col()$ps 疑似類が定義される。 ~col主導の文書~言語においては、 これらの疑似類は,~rowへの所属関係に合致する。 ◎ The double-association of a cell in a 2D grid (to its row and column) cannot be represented by parentage in a hierarchical markup language. Only one of those associations can be represented hierarchically: the other must be explicitly or implicitly defined in the document language semantics. In both HTML and DocBook, two of the most common hierarchical markup languages, the markup is row-primary (that is, the row associations are represented hierarchically); the columns must be implied. To be able to represent such implied column-based relationships, the column combinator and the :nth-col() and :nth-last-col() pseudo-classes are defined. In a column-primary format, these pseudo-classes match against row associations instead.
16.1. ~column結合子( `||^css )
`~column結合子@ ( `column combinator^en )は、 ~column要素 【[行/列]主導の階層的~markup言語の下で[列/行]を指示する要素】 が表現する~columnへの~cell要素の所属関係を表現し, 2 個の `007C^U 並び — `||@css — で記される。 ~columnへの所属は,文書~言語の意味論のみに基づいて決定される — 要素が呈示されるかどうかや, どう呈示されるかを問わず。 複数の~columnに属する~cell要素は、 それらのどの~columnへの所属を指示する選択子でも,表現される。 ◎ The column combinator, which consists of two pipes (||) represents the relationship of a column element to a cell element belonging to the column it represents. Column membership is determined based on the semantics of the document language only: whether and how the elements are presented is not considered. If a cell element belongs to more than one column, it is represented by a selector indicating membership in any of those columns.
次の例では,~cell C, E, G に~style( `background: gray^css, 等々)が適用される。 ◎ The following example makes cells C, E, and G gray.
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>
16.2. `nth-col()^ps 疑似類
疑似類~記法 `nth-col(~AnB)@ps は、 同胞の~column間で~AnBthの~columnに属する~cell要素を表現する。 ~columnへの所属の定義は、 `~column結合子$を見よ。 ◎ The :nth-col(An+B) pseudo-class notation represents a cell element belonging to a column that has An+B-1 columns before it, for any positive integer or zero value of n. Column membership is determined based on the semantics of the document language only: whether and how the elements are presented is not considered. If a cell element belongs to more than one column, it is represented by a selector indicating any of those columns. ◎ The CSS Syntax Module [CSS3SYN] defines the An+B notation.
16.3. `nth-last-col()^ps 疑似類
疑似類~記法 `nth-last-col(~AnB)@ps は、 同胞†の~column間で最後から~AnBthの~columnに属する~cell要素を表現する。 ~columnへの所属の定義は、 `~column結合子$を見よ。 【†どの~columnが互いに “同胞” とされるかについては、文書~言語が定義することになるであろう。】 ◎ The :nth-last-col(An+B) pseudo-class notation represents a cell element belonging to a column that has An+B-1 columns after it, for any positive integer or zero value of n. Column membership is determined based on the semantics of the document language only: whether and how the elements are presented is not considered. If a cell element belongs to more than one column, it is represented by a selector indicating any of those columns. ◎ The CSS Syntax Module [CSS3SYN] defines the An+B notation.
17. 選択子の詳細度の計算-法
選択子の `詳細度@ ( `specificity^en )は、 所与の要素に対し,以下に従って計算される。
【 詳細度の効果については、 `~cascade法$における`宣言の詳細度$を見よ。 】
先ず、 `複階-選択子$に対しては:
◎ A selector’s specificity is calculated for a given element as follows:- 選択子の中の `~ID選択子$の個数を数える( = %A ) ◎ count the number of ID selectors in the selector (= A)
- 選択子の中の[ `~class選択子$, `属性~選択子$, `疑似類$ ]の個数を数える( = %B ) ◎ count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= B)
- 選択子の中の[ `型~選択子$, `疑似要素$ ]の個数を数える( = %C ) ◎ count the number of type selectors and pseudo-elements in the selector (= C)
- `全称~選択子$は無視する ◎ ignore the universal selector
`選択子~list$の詳細度は、 どう合致したかに依存する ⇒ 所与の[ `選択子~list$の照合~処理n ]において,効果を~~発揮する詳細度は、[ ~list内の合致した`複階-選択子$の詳細度のうち最も高いもの ]になる。 ◎ If the selector is a selector list, this number is calculated for each selector in the list. For a given matching process against the list, the specificity in effect is that of the most specific selector in the list that matches.
少数の疑似類は、 他の選択子~用の “評価~文脈” を供するので,その詳細度は特別に定義される: ◎ A few pseudo-classes provide “evaluation contexts” for other selectors, and so have their specificity defined specially:
- [ `is()$ps / `not()$ps / `has()$ps ]疑似類の詳細度は、[ その選択子~list引数を成す各`複階-選択子$の詳細度のうち最も高いもの ]に置換される。 ◎ The specificity of an :is(), :not(), or :has() pseudo-class is replaced by the specificity of the most specific complex selector in its selector list argument.
- [ `nth-child()$ps / `nth-last-child()$ps ]疑似類の詳細度は、 疑似類~自身の詳細度 ( 1 個の疑似類~選択子として数える), および[ 選択子~list引数を成す各`複階-選択子$の詳細度のうち最も高いもの (引数が無ければ 0 ) ]を足した結果になる。 ◎ Analogously, the specificity of an :nth-child() or :nth-last-child() selector is the specificity of the pseudo class itself (counting as one pseudo-class selector) plus the specificity of the most specific complex selector in its selector list argument (if any).
- `where()$ps 疑似類の詳細度は、 0 に置換される。 ◎ The specificity of a :where() pseudo-class is replaced by zero.
例えば: ◎ For example:
- `:is(em, #foo)^css の詳細度は、[ `em^e, `p id=foo^e, `em id=foo^e ]のどれに合致しようが,`~ID選択子$( `#foo^css )に対するときと同様に ( 1,0,0 ) になる。 ◎ :is(em, #foo) has a specificity of (1,0,0)—like an ID selector (#foo)—when matched against any of <em>, <p id=foo>, or <em id=foo>.
- `.qux:where(em, #foo#bar#baz)^css の詳細度は、 ( 0,1,0 ) になる — `where()^ps の外側に在る `.qux^css のみが詳細度に寄与する。 ◎ .qux:where(em, #foo#bar#baz) has a specificity of (0,1,0): only the .qux outside the :where() contributes to selector specificity.
- `:nth-child(even of li, .item)^css の詳細度は、[ `li^e, `ul class=item^e, `li class=item id=foo^e ]のどれに合致しようが,[ `~class選択子$( `.item^css ) + 1 個の疑似類 ]に対するときと同様に ( 0,2,0 ) になる。 ◎ :nth-child(even of li, .item) has a specificity of (0,2,0)—like a class selector (.item) plus a pseudo-class—when matched against any of <li>, <ul class=item>, or <li class=item id=foo>.
- `:not(em, strong#foo)^css の詳細度は、 どの要素に合致しようが,[ `型~選択子$( `strong^css ) + `~ID選択子$( `#foo^css ) ]に対するときと同様に ( 1,0,1 ) になる。 ◎ :not(em, strong#foo) has a specificity of (1,0,1)—like a tag selector (strong) combined with an ID selector (#foo)—when matched against any element.
詳細度の比較では、 上述した %A, %B, %C 成分が順に(~~辞書式に)比較される ⇒# %A 値が大きい方の詳細度がより高く、 %A 値が等しければ %B 値が大きい方の詳細度がより高く、 %B 値も等しければ %C 値が大きい方の詳細度がより高く、 すべての値が等しければ 2 つの詳細度は等しい。 ◎ Specificities are compared by comparing the three components in order: the specificity with a larger A value is more specific; if the two A values are tied, then the specificity with a larger B value is more specific; if the two B values are also tied, then the specificity with a larger C value is more specific; if all the values are tied, the two specificities are equal.
~storage制限があるときは、 実装は %A, %B, %C の大きさに制限を課してヨイ。 その場合、 その上限を超えた値は,その上限~内に切詰めるモノトスル。 ◎ Due to storage limitations, implementations may have limitations on the size of A, B, or C. If so, values higher than the limit must be clamped to that limit, and not overflow.
* /* a=0 b=0 c=0 */ LI /* a=0 b=0 c=1 */ UL LI /* a=0 b=0 c=2 */ UL OL+LI /* a=0 b=0 c=3 */ H1 + *[`REL^a=up] /* a=0 b=1 c=1 */ UL OL LI.red /* a=0 b=1 c=3 */ LI.red.level /* a=0 b=2 c=1 */ #x34y /* a=1 b=0 c=0 */ #s12:not(FOO) /* a=1 b=0 c=1 */ .foo :is(.bar, #baz) /* a=1 b=1 c=0 */
注記: 同じ`単純-選択子$の繰返しは許容され、 詳細度を増大させる。 【`~subject$は変えずに詳細度を高くできる。例えば `#id#id^css 】 ◎ Note: Repeated occurrences of the same simple selector are allowed and do increase specificity.
注記: ~HTML `style^a 属性にて指定される~styleの詳細度については、 `CSSSTYLEATTR$r の `~CSS~style属性@~CSSSTYLEATTR#interpret$にて述べられている。 ◎ Note: The specificity of the styles specified in an HTML style attribute is described in CSS Style Attributes. [CSSSTYLEATTR]
18. 文法
選択子は、 以下の`文法に則って構文解析-$される: ◎ Selectors are parsed according to the following grammar:
【 名前に `-real-^c を含んでいる生成規則は、 `疑似-複合-選択子$を含まない~version。 】
`selector-list@t 【`選択子~list$】 = `complex-selector-list$t `complex-selector-list@t 【`複階-選択子$たちが`成す~list$】 = `complex-selector$t# `complex-real-selector-list@t = `complex-real-selector$t# `compound-selector-list@t 【`複合-選択子$たちが`成す~list$】 = `compound-selector$t# `simple-selector-list@t 【`単純-選択子$たちが`成す~list$】 = `simple-selector$t# `relative-selector-list@t 【`相対~選択子$たちが`成す~list$】 = `relative-selector$t# `relative-real-selector-list@t = `relative-real-selector$t# `complex-selector@t 【`複階-選択子$】 = `complex-selector-unit$t [ `combinator$t? `complex-selector-unit$t ]* `complex-selector-unit@t 【`複階-選択子$を成す各 “単位” 】 = [ `compound-selector$t? `pseudo-compound-selector$t* ]! `complex-real-selector@t = `compound-selector$t [ `combinator$t? `compound-selector$t ]* `relative-selector@t 【`相対~選択子$】 = `combinator$t? `complex-selector$t `relative-real-selector@t = `combinator$t? `complex-real-selector$t `compound-selector@t 【`複合-選択子$】 = [ `type-selector$t? `subclass-selector$t* ]! `pseudo-compound-selector@t 【`疑似-複合-選択子$】 = `pseudo-element-selector$t `pseudo-class-selector$t* `simple-selector@t 【`単純-選択子$】 = `type-selector$t | `subclass-selector$t `combinator@t 【`結合子$(`子孫~結合子$以外)】 = '>' | '+' | '~' | [ '|' '|' ] `ns-prefix@t 【`名前空間$】 = [ `ident-token$t | '*' ]? '|' `wq-name@t = `ns-prefix$t? `ident-token$t `type-selector@t 【`型~選択子$】 = `wq-name$t | `ns-prefix$t? '*' `subclass-selector@t = `id-selector$t | `class-selector$t | `attribute-selector$t | `pseudo-class-selector$t `id-selector@t 【`~ID選択子$】 = `hash-token$t `class-selector@t 【`~class選択子$】 = '.' `ident-token$t `attribute-selector@t 【`属性~選択子$】 = '[' `wq-name$t ']' | '[' `wq-name$t `attr-matcher$t [ `string-token$t | `ident-token$t ] `attr-modifier$t? ']' `attr-matcher@t 【`属性~選択子§】 = [ '~' | '|' | '^' | '$' | '*' ]? '=' `attr-modifier@t 【`属性~値の文字大小比較§】 = i | s `pseudo-class-selector@t 【`疑似類$】 = ':' `ident-token$t | ':' `function-token$t `any-value$t ')' `pseudo-element-selector@t 【`疑似要素$】 = ':' `pseudo-class-selector$t | `legacy-pseudo-element-selector$t `legacy-pseudo-element-selector@t 【旧来の構文】 = ':' [before | after | first-line | first-letter]
上の文法を解釈するときには、 次の規則が適用される: ◎ In interpreting the above grammar, the following rules apply:
-
次に挙げる箇所では、 空白は禁止される 【`子孫~結合子$と多義的になるので】 — 以下に現れる “2 個の” は、 “~~任意の,~~連続する 2 個の” の略記である: ◎ White space is forbidden:
- [ `compound-selector$t / `complex-selector-unit$t ]を成す 2 個の~top-level成分の合間 (すなわち、 `type-selector$t と `subclass-selector$t の合間, `pseudo-element-selector$t と `pseudo-class-selector$t の合間, 等々)。 ◎ Between any of the top-level components of a <compound-selector> or <complex-selector-unit> (that is, forbidden between the <type-selector> and <subclass-selector>, or between the <pseudo-element-selector> and <pseudo-class-selector>, etc).
- [ `type-selector$t / `class-selector$t ]を成す 2 個の成分の合間。 ◎ Between any of the components of a <type-selector> or a <class-selector>.
- `pseudo-element-selector^t を成す 2 個の '`:^css' の合間。 ◎ ↓
- [ `pseudo-element-selector^t / `pseudo-class-selector$t ]を成す '`:^css' と[ `ident-token$t / `function-token$t ](順不同)の合間。 ◎ Between the ':'s, or between the ':' and <ident-token> or <function-token>, of a <pseudo-element-selector> or a <pseudo-class-selector>.
- `wq-name$t を成す 2 個の成分の合間。 ◎ Between any of the components of a <wq-name>.
- `attr-matcher$t を成す 2 個の成分の合間。 ◎ Between the components of an <attr-matcher>.
- `complex-selector-unit$t を成す 2 個の成分 ( `compound-selector$t / `pseudo-compound-selector$t ) の合間 ◎ Between the <compound-selector> or <pseudo-compound-selector>s in a <complex-selector-unit>
- `combinator$t を成す 2 個の成分の合間。 ◎ Between the components of a <combinator>.
2 個の `complex-selector-unit$t の合間において `combinator$t が省略された場合、 そこには,空白が`要求される^em (これは、 `子孫~結合子$が利用されていることを指示する)。 ◎ Whitespace is required between two <complex-selector-unit>s if the <combinator> between them is omitted. (This indicates the descendant combinator is being used.)
- `id-selector$t 内の `hash-token$t の値は、 `~CSS識別子$でなければナラナイ。 ◎ In <id-selector>, the <hash-token>’s value must be an identifier.
- `legacy-pseudo-element-selector$t 生成規則は、 `pseudo-class-selector$t 生成規則から除外される。 (すなわち、 【!~CSSWG/css2/#selectordef-before】 `:before@~CSS22/selector.html#before-and-after$css, 等々を疑似類として構文解析してはナラナイ — それを行ったとき, (例えば,他の`単純-選択子$が後続していることに因り) 当の選択子が妥当になる場合でも。) ◎ The <pseudo-class-selector> production excludes the <legacy-pseudo-element-selector> production. (That is, :before/etc must never be parsed as a pseudo-class, even if doing so would cause the selector to become valid due to, for example, other simple selectors following it.)
注記: 選択子は、 様々な[ より特有な, 構文上の拘束 ]の~subjectにもなる — 上述の文法を固守することは必要yであるが、 選択子が妥当と見なされるには`不足である^em。 選択子を構文解析する際の追加的な規則は、 `無効な選択子と~errorの取扱い§を見よ。 ◎ Note: A selector is also subject to a variety of more specific syntactic constraints, and adherence to the grammar above is necessary but not sufficient for the selector to be considered valid. See § 3.9 Invalid Selectors and Error Handling for additional rules for parsing selectors.
注記: 一般に, `pseudo-element-selector$t が妥当になるのは、 `complex-selector$t 内の最後の `compound-selector$t の終端に置かれた場合に限られる。 しかしながら,一部の状況下では、 他の[ `pseudo-element-selector$t / `pseudo-class-selector$t ]たちも後続し得る — が、 そうなり得るかどうかは,各 事例ごとに指定される (例えば、 `利用者~動作~疑似類$は,どの`疑似要素$の後にも許容され、 `~treeに留まる疑似要素$は, `slotted()$pe 疑似要素の後にも許容される)。 ◎ Note: In general, a <pseudo-element-selector> is only valid if placed at the end of the last <compound-selector> in a <complex-selector>. In some circumstances, however, it can be followed by more <pseudo-element-selector>s or <pseudo-class-selector>s; but these are specified on a case-by-case basis. (For example, the user action pseudo-classes are allowed after any pseudo-element, and the tree-abiding pseudo-elements are allowed after the ::slotted() pseudo-element.)
注記: `~level 2 の疑似要素@~CSS22/selector.html#pseudo-element-selectors$ ( `before$pe, `after$pe, `first-line$pe, `first-letter$pe ) は、 旧来の理由から, 先頭に "`:^css" を 1 個だけ伴わせて — `pseudo-class-selector$t を真似るように — 書いてもヨイ。 ◎ The four Level 2 pseudo-elements (::before, ::after, ::first-line, and ::first-letter) may, for legacy reasons, be written with only a single ":" character at their front, making them resemble a <pseudo-class-selector>.
18.1. `forgiving-selector-list^t
旧来の理由から、 一般に,選択子~listは、 ~list内に構文解析に失敗した選択子がある場合には (一例として、[ 新たな/~UAに特有な ]選択子~特能を利用しているもの),[ 当の選択子~list全体が無効になる ]よう挙動する。 この挙動は、 旧い~UAでも正しく働く~CSSを書くときに,新たな選択子を利用するのを難しくし得る。 ◎ For legacy reasons, the general behavior of a selector list is that if any selector in the list fails to parse (because it uses new or UA-specific selector features, for instance), the entire selector list becomes invalid. This can make it hard to write CSS that uses new selectors and still works correctly in older user agents.
`forgiving-selector-list@t 生成規則は,代わりに、 ~list内の各~選択子を個別に構文解析して,それに失敗したものを単純に無視する — 残りの選択子は、 依然として利用できるようになる。 ◎ The <forgiving-selector-list> production instead parses each selector in the list individually, simply ignoring ones that fail to parse, so the remaining selectors can still be used.
注記: ~style規則は、 依然として,通常の寛容でない[ 選択子~listの挙動 ]を利用する。 `forgiving-selector-list$t は、[ `is()$ps, `where()$ps ]内に限り利用される。 ~style規則の選択子を `is()$ps 内に包装することは — 詳細度に対しても小さな含意があるが — 実質的に,それを寛容なものに “昇格する” — それが疑似要素を包含していない限り (疑似要素は[ `is()$ps, `where()$ps ]においては妥当でない)。 ◎ Note: Style rules still use the normal, unforgiving selector list behavior. <forgiving-selector-list> is used in :is() and :where() only. Although it does have some minor implications on specificity, wrapping a style rule’s selector in :is() effectively "upgrades" it to become forgiving, so long as it doesn’t contain any pseudo-elements (which aren’t valid in :is() or :where()).
`forgiving-selector-list$t は、 構文上は `any-value$t? と等価であるが、 その実際の値は,`選択子~listとして寛容に構文解析する$ことにより得される。 ◎ Syntactically, <forgiving-selector-list> is equivalent to <any-value>?. It is then parsed as a forgiving selector list to obtain its actual value.
`選択子~listとして寛容に構文解析する@ ときは、 所与の ( %入力 ) に対し: ◎ To parse as a forgiving selector list given an input input:
- %選択子~list ~LET `~commaで分離された~listを~CSS文法に則って構文解析する$( %入力, `complex-real-selector$t ) ◎ Parse a list of <complex-real-selector>s from input, and let selector list be the result.
- %選択子~list から[ `失敗^i / `無効な選択子$ ]をすべて除去する ◎ Remove all failure items from selector list, and all items that are invalid selectors,\
- ~RET %選択子~list を表現する `selector-list$t (空にもなり得る) ◎ then return a <selector-list> representing the remaining items in selector list. (This might be empty.)
`forgiving-selector-list$t を成す無効な~itemに対しては (明示的に未知な[ 選択子/構文 ]を利用しているものも, 【!merely contextually,】 既知な構文を利用しているが当の文脈においては妥当でないものも)、 その`詳細度$は 0 になるものとして扱うモノトスル。 ◎ Any items in a <forgiving-selector-list> that are invalid (whether explicitly, by using unknown selectors or syntax, or merely contextually, using known syntax but in an invalid context) must be treated as having zero specificity.
注記: `forgiving-selector-list$t を利用するものが, 選択子~引数をとる選択子のうち[ `is()$ps, `where()$ps ]に限られるのは、 意図的である。 ◎ Note: <forgiving-selector-list> is intentionally used only in :is() and :where(), not in any other selector that takes a selector argument.
19. ~API~hook
この節では,~Selectorsの概念を利用する仕様の策定に便宜を図るため、 他の仕様から呼び出せる,いくつかの~API~hookを定義する。 ◎ To aid in the writing of specs that use Selectors concepts, this section defines several API hooks that can be invoked by other specifications.
これらは、 まだ必要yなのか? 今や、 より厳格な,`合致-$ , および`無効な選択子$の定義がある。 仕様~間で協調するのは,述語より名詞を通す方が ずっと容易であり、 また,[ `querySelector()$c から返される要素たちの正確な順序の様な詳細は、 ~Selectorsより~DOM仕様にて定義される方がイミを成す ]ように見受けられる。 ◎ Are these still necessary now that we have more rigorous definitions for match and invalid selector? Nouns are a lot easier to coordinate across specification than predicates, and details like the exact order of elements returned from querySelector seem to make more sense being defined in the DOM specification than in Selectors.
19.1. 選択子の構文解析-法
`選択子として構文解析する@ ときは、 所与の ( 文字列 %~source ) に対し,[ `複階-選択子$たちが`成す~list, または `失敗^i ]を返す: ◎ This section defines how to parse a selector from a string source. It returns either a complex selector list, or failure.
- %選択子 ~LET %~source を `selector-list$t の`文法に則って構文解析-$した結果 ◎ Let selector be the result of parsing source as a <selector-list>.\
- ~IF[ %選択子 ~EQ `失敗^i ] ⇒ ~RET `失敗^i — %~source は`無効な選択子$である ◎ If this returns failure, it’s an invalid selector; return failure.
- ~IF[ %選択子 は他の何らかの理由で`無効な選択子$である (例:`宣言-済み$でない名前空間~接頭辞を包含している) ] ⇒ ~RET `失敗^i ◎ If selector is an invalid selector for any other reason (such as, for example, containing an undeclared namespace prefix), return failure.
- ~RET %選択子 ◎ Otherwise, return selector.
19.2. 相対~選択子の構文解析-法
`相対~選択子として構文解析する@ ときは、 所与の ( 文字列 %~source ) に対し,[ `複階-選択子$たちが`成す~list, または `失敗^i ]を返す: ◎ This section defines how to parse a relative selector from a string source. It returns either a complex selector list, or failure.
- %選択子 ~LET %~source を `relative-selector-list$t の`文法に則って構文解析-$した結果 ◎ Let selector be the result of parsing source as a <relative-selector-list>.\
- ~IF[ %選択子 ~EQ `失敗^i ( %~source は`無効な選択子$である) ] ⇒ ~RET `失敗^i ◎ If this returns failure, it’s an invalid selector; return failure.
- ~IF[ %選択子 は他の何らかの理由で`無効な選択子$である (例:`宣言-済み$でない名前空間~接頭辞を包含している) ] ⇒ ~RET `失敗^i ◎ If selector is an invalid selector for any other reason (such as, for example, containing an undeclared namespace prefix), return failure.
- ~RET %選択子 ◎ Otherwise, return selector.
19.3. 要素に対し選択子を照合する
`要素に対し選択子を照合する@ ときは、 所与の ( `選択子~list$ %選択子, 要素 %要素, %視野ng根~群 ) に対し,[ `成功^i / `失敗^i ]を返す — %視野ng根~群 は、[ `scope$ps 疑似類を解決するための`視野ng根$ ]たちが成す集合であり,省略時は空とする: ◎ This section defines how to match a selector against an element. ◎ APIs using this algorithm must provide a selector and an element. Callers may optionally provide: • one or more scoping roots, for resolving the :scope pseudo-class against. ◎ This algorithm returns either success or failure.
【 原文の~algoは、 %視野ng根~群 をどう適用するかについて,明示的には何も述べていないが、 [ 照合の際に`視野ng根$の規則に暗黙的に従う/ この~algoが呼出す~algoにも暗黙的に渡される ]ものと見受けられる。 以下の各~節の~algoも同様。 】
- %選択子 を成す ~EACH( `複階-選択子$ %複階-選択子 ) に対し ⇒ ~IF[ `要素に対し複階-選択子を照合する$( %複階-選択子, %要素 ) ~EQ `成功^i ] ⇒ ~RET `成功^i
- ~RET `失敗^i
`要素に対し複階-選択子を照合する@ ときは、 所与の ( `複階-選択子$ %複階-選択子, %要素 ) に対し,[ `成功^i / `失敗^i ]を返す: ◎ To match a complex selector against an element, process it compound selector at a time, in right-to-left order. This process is defined recursively as follows:
- %複階-選択子 の末尾の`複合-選択子$を成す ~EACH( `単純-選択子$ %単純-選択子 ) に対し ⇒ ~IF[ %単純-選択子 は %要素 に合致しない ] ⇒ ~RET `失敗^i ◎ If any simple selectors in the rightmost compound selector does not match the element, return failure.
- ~IF[ %複階-選択子 は 1 個の`複合-選択子$のみからなる ] ⇒ ~RET `成功^i ◎ Otherwise, if there is only one compound selector in the complex selector, return success.
-
%要素~群 ~LET %複階-選択子 内の最後の`結合子$により %要素 に関係し得るような,アリなすべての要素たちが成す集合
【 例えば`子孫~結合子$の場合、 %要素 の先祖すべてからなる集合になるであろう。 】
◎ Otherwise, consider all possible elements that could be related to this element by the rightmost combinator.\ - %複階-選択子 ~SET %複体 から[ 末尾の`複合-選択子$, 最後の`結合子$ ]を除去した結果の`複階-選択子$ ◎ If the operation of matching the selector consisting of this selector with the rightmost compound selector and rightmost combinator removed\
- %要素~群 を成す ~EACH( %要素 ) に対し ⇒ ~IF[ `要素に対し複階-選択子を照合する$( %複体, %要素 ) ~EQ `成功^i ] ⇒ ~RET `成功^i ◎ against any one of these elements returns success, then return success.\
- ~RET `失敗^i ◎ Otherwise, return failure.
19.4. 疑似要素に対し選択子を照合する
`疑似要素に対し選択子を照合する@ ときは、 所与の ( `選択子~list$ %選択子, `疑似要素$ %疑似要素, %視野ng根~群 (省略可能)) に対し,[ `成功^i / `失敗^i ]を返す — %視野ng根~群 は、 `要素に対し選択子を照合する$~algoに述べたものと同じ引数とする: ◎ This section defines how to match a selector against a pseudo-element. ◎ APIs using this algorithm must provide a selector and a pseudo-element. They may optionally provide the same things they may optionally provide to the algorithm to match a selector against an element. ◎ This algorithm returns success or failure.
-
%選択子 を成す ~EACH( `複階-選択子$ %複体 ) に対し: ◎ For each complex selector in the given selector, if both:
- ~IF[ %複体 の末尾の`単純-選択子$は %疑似要素 に合致しない ] ⇒ ~CONTINUE ◎ the rightmost simple selector in the complex selector matches pseudo-element, and
- %複体 ~SET %複体 から末尾の`単純-選択子$を除去した結果 ◎ ↓
- ~IF[ `要素に対し複階-選択子を照合する$( %複体, %疑似要素 の`出自の要素$ ) ~EQ `成功^i 【!any optional parameters provided to this algorithm は利用されていない】 ] ⇒ ~RET `成功^i ◎ the result of running match a complex selector against an element on the remainder of the complex selector (with just the rightmost simple selector of its rightmost complex selector removed), pseudo-element’s corresponding element, and any optional parameters provided to this algorithm returns success, ◎ then return success.
- ~RET `失敗^i ◎ Otherwise (that is, if this doesn’t happen for any of the complex selectors in selector), return failure.
19.5. ~treeに対し選択子を照合する
`~treeに対し選択子を照合する@ ときは、 所与の: ◎ This section defines how to match a selector against a tree. ◎ APIs using this algorithm must provide\
- %選択子 — `選択子~list$ ◎ a selector, and\
- %根~要素~群 — %選択子 を照合する対象とされる, 1 個~以上の`下位tree$の根~要素たちが成す集合。 %根~要素~群 内のすべての要素の`根$は,同じでなければナラナイ。 ◎ one or more root elements indicating the subtrees that will be searched by the selector. All of the root elements must share the same root, or else calling this algorithm is invalid. ◎ They may optionally provide:
- %視野ng根~群 (省略時は空~集合) — 1 個~以上の`視野ng根$たちが成す集合 (空でないならば、 当の選択子は`視野~付き$であることを指示する) ◎ One or more scoping roots indicating the selector is scoped.
-
%許容される疑似要素 (省略時は無条件) — どの`疑似要素$が許容されるかを与える条件【!to show up in the match list】 (無条件ならば,すべての疑似要素が許容される) ◎ A list of pseudo-elements that are allowed to show up in the match list. If not specified, this defaults to allowing all pseudo-elements.
この様な~remoteな仕方で本当に取扱われるものは、 `~treeに留まる疑似要素$に限られる。 ◎ Only the tree-abiding pseudo-elements are really handled in any way remotely like this.
に対し, 要素たちが成す~listを返す: ◎ This algorithm returns a (possibly empty) list of elements.
- %候補~要素~群 ~LET %根~要素~群 とそれらの子孫である要素~すべてからなる~list — 他が指定されない限り,`~shadowも含めた~tree順序$で~sortされるとする。 ◎ Start with a list of candidate elements, which are the root elements and all of their descendant elements, sorted in shadow-including tree order, unless otherwise specified.
- %視野ng根~群 を成す ~EACH( %視野ng根 ) に対し ⇒ %候補~要素~群 から %視野ng根 の`子孫$でない要素~すべてを除去する ◎ If scoping root were provided, then remove from the candidate elements any elements that are not descendants of at least one scoping root.
- %結果 ~LET 空な~list ◎ Initialize the selector match list to empty.
-
%候補~要素~群 を成す ~EACH( %要素 ) に対し: ◎ For each element in the set of candidate elements:
- ~IF[ `要素に対し選択子を照合する$( %要素, %選択子 ) ~EQ `成功^i ] ⇒ %結果 に %要素 を追加する ◎ If the result of match a selector against an element for element and selector is success, add element to the selector match list.
-
%要素 を`出自の要素$とする ~EACH( `疑似要素$ %疑似要素 ) に対し ⇒ ~IF[ %疑似要素 は %許容される疑似要素 である ]~AND[ `疑似要素に対し選択子を照合する$( %疑似要素, %選択子 ) ~EQ `成功^i ] ⇒ %結果 に %疑似要素 を追加する ◎ For each possible pseudo-element associated with element that is one of the pseudo-elements allowed to show up in the match list, if the result of match a selector against a pseudo-element for the pseudo-element and selector is success, add the pseudo-element to the selector match list.
%結果 における,疑似要素と他の要素との順序が定義されていない。 今の所,この情報を公開する文脈はないが、 最終的には,何かを公開する前に裁定しておく必要がある。 ◎ The relative position of pseudo-elements in selector match list is undefined. There’s not yet a context that exposes this information, but we need to decide on something eventually, before something is exposed.
- ~RET %結果
A. ~source文書~dataから要素~treeへ対応付けるための指導
◎非規範的~DOMが述べる要素の~tree構造は強力かつ有用である一方で、 ~tree構造に基づく~dataを記述する,どの言語を~model化するにも (あるいは~graph構造に基づくものでも,相応しい解釈の下で) 十分に汎用である。 ◎ The element tree structure described by the DOM is powerful and useful, but generic enough to model pretty much any language that describes tree-based data (or even graph-based, with a suitable interpretation).
~HTMLの様な一部の言語は、 資源から~DOM~objを生産するための手続-が,すでに きちんと定義されている。 そうでない言語による文書に~Selectorsを適用するためには、 その種の手続-が,その言語に定義されなければナラナイ。 ◎ Some languages, like HTML, already have well-defined procedures for producing a DOM object from a resource. If a given language does not, such a procedure must be defined in order for Selectors to apply to documents in that language.
文書~言語は、 最低限,何が~DOMの “要素” の概念に対応付けられるかを定義しなければナラナイ。 ◎ At minimum, the document language must define what maps to the DOM concept of an "element".
首な,~node間の一対多の関係性 — ~tree構造における親から子への, あるいは ~graph構造における~nodeからその近隣への 関係性 — が、要素の子~nodeとして反映されるベキである。 ◎ The primary one-to-many relationship between nodes—parent/child in tree-based structures, element/neighbors in graph-based structures—should be reflected as the child nodes of an element.
可能なら、 要素の他の特能も, `~DOMにおける同じ特能@#data-model$に類似な目的を担う何かに対応付けるベキである: ◎ Other features of the element should be mapped to something that serves a similar purpose to the same feature in DOM:
- 型 ◎ type
-
文書~言語が[ その要素たちを異なる要素~groupに判別し得る基本的なものとして,何らかの “型” の観念を備えている ]ならば、 それが, “型” 特能として反映されるベキである。 ◎ If the elements in the document language have some notion of "type" as a basic distinguisher between different groups of elements, it should be reflected as the "type" feature.
この “型” を[ “~~基本的な” 名前 ]と[ それらの名前をより高~levelな “名前空間” ~group ]に分離し得るならば、 後者は “名前空間” 特能として反映されるベキである。 他の場合、 要素は “名前空間” 特能を持つベキでなく, 名前~全体が “型” 特能として反映されるベキである。 ◎ If this "type" can be separated into a "basic" name and a "namespace" that groups names into higher-level groups, the latter should be reflected as the "namespace" feature. Otherwise, the element shouldn’t have a "namespace" feature, and the entire name should be reflected as the "type" feature.
- ~ID ◎ id
-
要素の何らかの側面が,文書~全体に渡り一意な識別子として~~機能する場合、 それが, “~ID” 特能に対応付けられるベキである。 ◎ If some aspect of the element functions as a unique identifier across the document, it should be mapped to the "id" feature.
注記: ~HTMLにおいては、 要素が持ち得る~IDは 1 個に限られているが,一般にはそのように制約されるベキではない。 ~IDの重要な性質は、 各~IDが単独の要素に結付けられることであり、 単独の要素は,複数の~IDを妥当に持ち得る。 ◎ Note: While HTML only allows an element to have a single ID, this should not be taken as a general restriction. The important quality of an ID is that each ID should be associated with a single element; a single element can validly have multiple IDs.
- ~classと属性 ◎ classes and attributes
- 要素を識別するときに有用になる側面ではあるが,一般に,文書の中の一意な要素にはならないものは、[ “~label” (それ自体が文字列になるもの)/ “~prop” (名前と値の~pair) ]のいずれに等価になるかに依存して,[ “~class” / “属性” ]特能に対応付けられるベキである。 ◎ Aspects of the element that are useful for identifying the element, but are not generally unique to elements within a document, should be mapped to the "class" or "attribute" features depending on if they’re something equivalent to a "label" (a string by itself) or a "property" (a name/value pair)
- 疑似類と疑似要素 ◎ pseudo-classes and pseudo-elements
- 疑似類に合致する, あるいは 疑似要素を持つような要素は、 明示的に定義されなければナラナイ。 ◎ If any elements match any pseudo-classes or have any pseudo-elements, that must be explicitly defined.
- `has()$ps や `is()$ps の様な一部の疑似類は、 `構文上のもの^em なので,常に働くべきであり、 それについて どこかで指示される必要がある。 構造上の疑似類は、 子~listが順序を有するならば,常に働くであろう。 ◎ Some pseudo-classes are *syntactical*, like :has() and :is(), and thus should always work. Need to indicate that somewhere. Probably the structural pseudos always work whenever the child list is ordered.
例えば、 `JSONSelect@https://github.com/lloyd/JSONSelect$ は,~JSON文書から情報を抽出するために選択子を利用する~libraryである。 ◎ For example, JSONSelect is a library that uses selectors to extract information from JSON documents.
- ~JSON文書の各[ `array^jt, `object^jt, `boolean^jt, `string^jt, `number^jt, `null^jt ]が,~tree構造を成す “要素” になる。 array / object 要素は,その内容を子として持つ。 ◎ The "elements" of the JSON document are each array, object, boolean, string, number, or null. The array and object elements have their contents as children.
- 各~要素の型はその~JS型~名: `array^l, `object^l, 等々になる。 ◎ Each element’s type is its JS type name: "array", "object", etc.
- `object^jt の子は、 その key を~classとして持つ。 ◎ Children of an object have their key as a class.
- `array^jt の子は `first-child$ps, `nth-child()$ps, 等々の疑似類に合致する。 ◎ Children of an array match the :first-child, :nth-child(), etc pseudo-classes.
- 根 `object^jt は `root$ps に合致する。 ◎ The root object matches :root.
- 特定0の[ 値をとる, あるいは 部分文字列を包含する ]ような `boolean^jt / `number^jt / `string^jt 要素に合致させるための `val()^ps, `contains()^ps 疑似類も追加的に定義する。 ◎ It additionally defines :val() and :contains() pseudo-classes, for matching boolean/number/string elements with a particular value or which contain a particular substring.
この構造は、 選択子による,~JSON文書に対する強力で簡潔な~query法を与えるに足るものになる。 ◎ This structure is sufficient to allow powerful, compact querying of JSON documents with selectors.
B. 廃用にされたが要求される,~Web互換性を得るための `-webkit-^css 構文解析-法
`この付録は規範的である。^em ◎ This appendix is normative.
~Web文書を構文解析することを予期している~UAは、 旧来の~Web互換性による拘束に因り,次に挙げる特能を~supportするモノトスル: ◎ Due to legacy Web-compat constraints, user agents expecting to parse Web documents must support the following features:
- `-webkit-autofill^ps `疑似要素$は、 `autofill$ps の`旧来の別名$selとして扱うモノトスル。 ◎ :-webkit-autofill must be treated as a legacy selector alias of :autofill.
-
他の`疑似要素$のうち[ 名前が`~ASCII大小無視$で文字列 `-webkit-^l から始まる, かつ関数-記法でない ]ものは、 構文解析-時点では妥当なものと扱った上で (すなわち、 `-webkit-foo^pe は妥当, `-webkit-bar()^pe は妥当でない)、 自身が認識しないか~supportしない場合は,何にも合致しない `未知な -webkit- 疑似要素@ ( `unknown -webkit- pseudo-element^en )として扱う。 ◎ All other pseudo-elements whose names begin with the string “-webkit-” (matched ASCII case-insensitively) and that are not functional notations must be treated as valid at parse time. (That is, ::-webkit-asdf is valid at parse time, but ::-webkit-jkl() is not.) If they’re not otherwise recognized and supported, they must be treated as matching nothing, and are unknown -webkit- pseudo-elements.
`未知な -webkit- 疑似要素$を直列化するときは、 ~ASCII小文字~化するモノトスル。 ◎ Unknown -webkit- pseudo-elements must be serialized in ASCII lowercase.
この過去互換は何によるもの? ◎ What’s this quirk about?
~Selectorsは、 長きにわたり,単独の[ 未知/無効 ]な選択子が選択子~list全体を無効~化する挙動を備えている (それを含んでいる複階-選択子 1 個だけを無効~化するのでなく)。 これは,一般には ~WGによる旧来の過ちと見なされるが、 現時点では修正し得ない — 意図的かどうかを問わず,この挙動に依存している~stylesheetは あまりに多いので。 ◎ Selectors have long had a behavior where a single unknown/invalid selector invalidates the entire selector list (rather than just invalidating the one complex selector it finds itself in). This is generally considered a legacy mistake by the WG, but can’t be fixed at this point, as too many stylesheets depend on this behavior, intentionally or not.
その~~影響の一つとして、 ~vendorに特有な選択子を利用すると,それを認識しない他の~UAにおいては選択子~全体が無効~化され,~style規則~全体を~~無為にすることが挙げられる。 これは、 過去には,意図的に利用されていた: まったくもって推奨されない実施であるが、 ~style規則を,一部の~browserに限り無効~化して隠すために。 また、 意図的でなくとも利用されていた: ある~styleを,ある要素と ~vendorに特有な疑似要素 (一部の~browserが公開する, `input$e に関係する様々な疑似要素など) に~~同時に適用して — 他の~browserにおいては、 その規則~全体が隠されることに~~気付くことなく。 ◎ One aspect of this is that use of vendor-specific selectors invalidates the entire selector in other user agents that don’t recognize them, and takes the entire style rule down with it. This has been used intentionally in the past—in the severely-not-recommended practice of hiding style rules from some browsers by making them invalid in every other browser—and unintentionally, with people styling an element and also applying those styles to a vendor-specific pseudo-element (such as the various input-related pseudos some browsers expose), not realizing that this hides the entire rule from other browsers.
上のより一般な理由~付けに加え、 Safari や Chrome などの WebKit から派生した~UAは, 自身による~vendor接頭辞~付き疑似要素に関係する過去互換を追加的に備えている — そこでは、 どの `-webkit-^pe 接頭辞~付き選択子も構文解析-時点では妥当と見なされる。 (この過去互換は、 おそらく,今はなき早期の~CSS特能の名残である — 作者に自前の疑似要素を定義させるがままにする特能を見越して、 アリなすべての疑似要素を構文解析-時点では妥当であるものと意図的に扱っていた。) ◎ In addition to this more general reasoning, WebKit-derived user agents, such as Safari or Chrome, have an additional quirk related to their vendor-prefixed pseudo-elements, where any ::-webkit--prefixed selectors are considered valid at parse time. (This is probably a leftover quirk of an early CSS feature, since dropped, that intentionally treated all possible pseudo-elements as valid at parse time, in anticipation of a feature letting authors define their own pseudo-elements.)
他の旧来の過去互換 — `QUIRKS$r にて文書化されているものなど — と類似に,このような[ 特定0の~vendorに特有な特異性 ]は、 他の~UAからは,[ 一部の~siteが[ 不用意にかどうかを問わず,それに依存していること ]に因り,非互換化されたように見える ]ことで十分~共通的なものになった。 そのようなわけで、 この過去互換は[ 現代の~webを正しく具現化するためには,`要求される^em実施上の~~条項 ]であり、すべての~UA用にそれを[ 仕様化する/要求する ]ことは,[ 今日の~web~pageが,現在の, および将来の~UAにおいて正しく具現化される ]見込みを高めることを確保する。 ◎ Similar to other legacy quirks, such as those documented in [QUIRKS], this particular vendor-specific oddity has become common enough that other user agents are seeing sites breaking due to them depending on it, accidentally or not. As such, since the quirk is in practical terms required to render the modern web correctly, specifying it and requiring it for all user agents ensures that today’s web pages are more likely to be correctly rendered in user agents both current and future.
しかしながら,通例の過去互換と同じく、 これに意図的に依拠している~web~pageは、 ~CSS~WGの~member, すべての まっとうな~web開発者から~~残念なものと~~見下されることになろう。 ◎ As usual with quirks, however, webpages intentionally relying on this will be met with shaming and derision from members of the CSSWG, and all right-thinking web developers.
変更点
- 2022年 5月 7日 作業草案 からの有意な変更点 ◎ 20.1. Changes since the 7 May 2022 Working Draft • Significant changes since the 7 May 2022 Working Draft:
- `blank$ps を~risk下にあるとした。 ~risk下にあった[ `read-write$ps, `has()$ps ]をそうでなくした。 ◎ Marked :blank as at-risk and removed the at-risk status from :read-write and :has()
- 疑似類として[ `open$ps, `closed$ps ]を追加した。 ( `7319$issue ) ◎ Added :open and :closed pseudo-classes. (Issue 7319)
- `has()$ps の中では,`疑似要素$を許容しないようにした — 当の疑似要素の定義により明示的に許容されない限り。 ( `7463$issue ) ◎ Disallowed pseudo-elements from :has() unless explicitly allowed by the pseudo-element’s definition. (Issue 7463)
- `has()$ps の入子ngを許容しないようにした。 ( `7344$issue ) ◎ Disallowed nesting of :has(). (Issue 7344)
- [ `has()$ps / `nth-child()$ps / `nth-last-child()$ps ]の選択子~引数は、 もはや寛容でない。 ( `7676$issue ) ◎ Made :has() and the selector argument of :nth-child()/:nth-last-child() no longer forgiving. (Issue 7676)
- `lang("")^pe と言語~tagを伴わない要素との照合-法を定義した。 ( `6915$issue ) ◎ Defined matching of ::lang("") and of elements not tagged with a language. (Issue 6915)
- `視野~付き選択子$と`相対~選択子$の概念を完全に切り離した ( `6399$issue ) — それに伴い ⇒# “選択子を絶対~化する~algo” も除去した/ 相対~選択子は,単に`~anchor要素$に基づいて照合するものと定義した。 ◎ Untangled the concepts of "scoped" and "relative" selectors completely. (Issue 6399) • Removed "absolutize a selector" as well, and just defined relative selector matching in terms of the anchoring element.
- `nth-child()$ps 【の引数】を複合-選択子に限っていた制限を外した(~~元に戻した)。 ( `3760$issue ) ◎ Reverted compound selector limitation on :nth-child(). (Issue 3760)
- `旧来の別名$selとして `-webkit-autofill^ps を定義した。 ( `7474$issue ) ◎ Defined :-webkit-autofill legacy selector alias. (Issue 7474)
- 旧来の[ ~colon 1 個だけを伴う疑似要素 ]の構文を文法の中へ移動した。 ( `8122$issue ) ◎ Moved the legacy single-colon pseudo-element syntax into the grammar itself. (Issue 8122)
- `2018年 11月 21日 作業草案@~TR/2018/WD-selectors-4-20181121/$ からの有意な変更点は: ◎ 20.2. Changes since the 21 November 2018 Working Draft ◎ Significant changes since the 21 November 2018 Working Draft:
- 各種 選択子~profileを除去した — 代わりに,【唯一,それらの差異に関わっていた】 `has()$ps は、 任意選択~であり,~risk下にあるものとした。 ( `3925$issue ) ◎ Removed the Selector profiles, marked :has() as optional and at-risk instead. (Issue 3925)
- `下位-疑似要素$, それに関係する各種用語を定義するため, `下位-疑似要素§を追加した。 ◎ Added § 3.6.4 Sub-pseudo-elements to define sub-pseudo-elements and related terminology.
- `defined$ps を追加した。 ( `2258$issue ) ◎ Added :defined. (Issue 2258)
- `modal$ps を追加した。 ( `6965$issue ) ◎ Added :modal. (Issue 6965)
- [ `fullscreen$ps, `picture-in-picture$ps ]を追加した。 ( `3796$issue ) ◎ Added :fullscreen and :picture-in-picture. (Issue 3796)
- ~media再生~状態 疑似類として[ `seeking$ps, `buffering$ps, `stalled$ps ]を追加した。 ( `3821$issue ) ◎ Added :seeking, :buffering, and :stalled media playback state pseudo-classes. (Issue 3821)
- 音響~状態 疑似類として[ `muted$ps, `volume-locked$ps ]を追加した。 ( `3821$issue, `3933$issue ) ◎ Added :muted and :volume-locked sound state pseudo-classes. (Issue 3821 and Issue 3933)
- `autofill$ps を追加した。 ( `5775$issue ) ◎ Added :autofill. (Issue 5775)
- `user-valid$ps を追加した。 ( `論点@https://lists.w3.org/Archives/Public/www-style/2015Sep/0111.html$ ) ◎ Added :user-valid. (Discussion)
- [ `is()$ps / `where()$ps / `has()$ps / `nth-child()$ps / `nth-last-child()$ps ]は、 無効な選択子を包含していても, それ自体は無効~化されないものと定義した。 ( `3264$issue ) ◎ Defined :is(), :where(), :has(), :nth-child(), and :nth-last-child() to not be themselves invalidated when containing an invalid selector. (Issue 3264)
- [ `nth-child()$ps / `nth-last-child()$ps ]内の各 選択子を — 今の所は — `複合-選択子$に制限した。 ( `3760$issue ) ◎ Limited selectors in :nth-child() and :nth-last-child() to compound selectors for now. (Issue 3760)
- 文字大小区別による文字列~照合を `INFRA$r にて定義される[ (文字列が)`一致-$する ]を参照することにより明確化した。 ◎ Clarified case-sensitive string matching by referencing string identity as defined in [INFRA].
- ~UAが供した仮入力~textであっても、 `placeholder-shown$ps は誘発されることを明確化した。 ◎ Clarified that UA-provided placeholder text still triggers :placeholder-shown.
- 明確さを得るため、 `focus-visible$ps の定義を書き直した。 ◎ Rewrote :focus-visible definition for clarity.
- `文法$における覚え書き注記を次を述べる規範的な~textに切替えた ⇒ 【`complex-selector$t 内の】 2 個の `compound-selector$t の合間に `combinator$t ~tokenが欠落なときは、 空白が要求される。 ◎ Switched reminder note in the grammar section to normative text describing the requirement of whitespace between <compound-selector>s when a <combinator> token is missing.
- `2018年 2月 2日 作業草案@~TR/2018/WD-selectors-4-20180202/$ からの有意な変更点は: ◎ 20.3. Changes since the 2 February 2018 Working Draft ◎ Significant changes since the 2 February 2018 Working Draft:
- 詳細度 0 の選択子を `where()$ps と命名した。 ( `2143$issue ) ◎ Named the zero-specificity selector to :where(). (Issue 2143)
- `matches()$ps を `is()$ps に改称した。 ( `3258$issue ) ◎ Renamed :matches() to :is(). (Issue 3258)
- `empty$ps は、 空白のみの~nodeを【照合において】無視するものと定義し直した ( `1967$issue ) ◎ Redefined :empty to ignore white-space–only nodes. (Issue 1967)
- `blank$ps は、 内容が空な要素ではなく空な利用者~入力を表現するものと定義し直した ( `1283$issue ) ◎ Redefined :blank to represent empty user input, rather than empty elements. (Issue 1283)
- [ `is()$ps / `has()$ps / `nth-child()$ps ]の詳細度は、 合致した選択子~引数に依存しないように変更した。 ( `1027$issue ) ◎ Changed the specificity of :is(), :has(), and :nth-child() to not depend on which selector argument matched. (Issue 1027)
- `drop()^ps 疑似類を落とした — ~HTMLも関係する特能を落としたので。 ( `2257$issue ) ◎ Dropped the :drop() pseudo-classes since HTML dropped the related feature. (Issue 2257)
- 属性~選択子に文字大小を区別する~flag `s^css を追加した。 ( `2101$issue ) ◎ Added the case-sensitive flag s to the attribute selector. (Issue 2101)
- `focus-visible$ps についてのさらなる指導を追加した。 ◎ Added further guidance on :focus-visible.
- `§ 廃用にされたが要求される,~Web互換性のための構文解析-法@#compat$ を付録に追加した ( `-webkit-^pe 疑似要素の過去互換~用の構文解析を定義する)。 ( `3051$issue ) ◎ Added Appendix B: Obsolete but Required -webkit- Parsing Quirks for Web Compat defining ::-webkit- pseudo-element parsing quirk. (Issue 3051)
- 空白が どこに許容されるか明確化するよう,文法~規則を書き直した (`文法§を見よ)。 ◎ Rewrote grammar rules about where white space is allowed for clarity. (See § 18 Grammar.)
- `2013年 5月 2日 作業草案@~TR/2013/WD-selectors4-20130502/$ からの有意な変更点は: ◎ 20.4. Changes since the 2 May 2013 Working Draft ◎ Significant changes since the 2 May 2013 Working Draft include:
- 次の疑似類を追加した ⇒# `target-within$ps, `focus-within$ps, `focus-visible$ps, `playing$ps, `paused$ps ◎ Added the :target-within, :focus-within, :focus-visible, :playing, and :paused pseudo-classes.
- `matches()$ps の “詳細度 0 版” を追加した。 その名前は、 まだ仮のものだが。 【が、現時点では `where()$ps に~~決着した~~模様(上述した変更点)。】 ◎ Added a zero-specificity :matches()-type pseudo-class, with name TBD.
- ~subject指示子 `!^css ( `subject indicator^en )の特能を `has()$ps に置換した。 ◎ Replaced subject indicator (!) feature with :has().
- 選択子[ `nth-match()^ps / `nth-last-match()^ps ]を[ `:nth-child(… of %S)^css / `:nth-last-child(… of %S)^css ]に置換した。 ◎ Replaced the :nth-match() and :nth-last-match() selectors with :nth-child(… of selector) and :nth-last-child(… of selector).
- 次の疑似類を `drop()^ps に変更した ⇒# `active-drop-target^ps, `valid-drop-target^ps, `invalid-drop-target^ps ◎ Changed the :active-drop-target, :valid-drop-target, :invalid-drop-target with :drop().
- 内容が[ 空/空白のみ ]である要素に合致する選択子についての論点を素描した。 ( open 課題( `1967$issue )を見よ。) ◎ Sketched out an empty-or-whitespace-only selector for discussion (See open issue.)
- `user-error^ps を `user-invalid$ps に改称した。 ( 論点 を見よ。) ◎ Renamed :user-error to :user-invalid. (See Discussion)
- `nth-column()^ps / `nth-last-column()^ps を `nth-col()$ps / `nth-last-col()$ps に改称した — 【将来に定義され得る】 `column^pe 疑似要素との混同を避けるため。 【! *pseudo-class 誤記? 】 ◎ Renamed :nth-column()/:nth-last-column() to :nth-col()/:nth-last-col() to avoid naming confusion with a potential ::column pseudo-class.
- 関数-形でない `local-link$ps 疑似類は、 素片も織り込むよう変更した。 ◎ Changed the non-functional form of the :local-link pseudo-class to account for fragment URLs.
- 関心が欠如しているので、 関数-形の `local-link()^ps 疑似類と参照~結合子は,除去した。 ◎ Removed the functional form of the :local-link() pseudo-class and reference combinator for lack of interest.
- 選択子の文法を`~CSS値~定義~構文$を利用して書き直した。 ◎ Rewrote selectors grammar using the CSS Value Definition Syntax.
- `視野~付き選択子$から`相対~選択子$を分け隔てた。 これらは独立に呼出され得る,異なる概念なので。 ◎ Split out relative selectors from scoped selectors, as these are different concepts that can be independently invoked.
-
`~AnB@~CSSSYN#anb-production$ 小構文の定義を CSS Syntax 仕様に移動した。 ◎ Moved definition of <An+B> microsyntax to CSS Syntax.
意味論上の定義については,おそらく ここに戻されるべきである。 ◎ Semantic definition should probably move back here.
-
次の新たな節を追加した: ◎ Added new sections:
-
`~data~model§。 ◎ § 3.2 Data Model
~XML用の~treeを定義する必要がある。 ◎ Need to define tree for XML.
-
`~API~hook§。 ◎ § 19 API Hooks
この仕様の以前の~versionは、 § 選択子の評価-法 を定義していたが、 その節はもう無い。 その節を参照している仕様は、 `~treeに対し選択子を照合する$~algoを参照するべきである。 ◎ Note that earlier versions of this section defined a section on evaluating a selector, but that section is no longer present. Specifications referencing that section should instead reference the algorithm to match a selector against a tree.
-
- `matches()$ps, `not()$ps の中の結合子に対する制約を除去した。 `論点@https://lists.w3.org/Archives/Public/www-style/2014Jan/0607.html$ を見よ。 ◎ Removed restriction on combinators within :matches() and :not(); see discussion.
- `選択子~list$の`詳細度$を定義した。 (Why?) ◎ Defined specificity of a selector list. (Why?)
- `lang()$ps 値は、 ~asteriskを孕んでいる場合には,引用符で括ることが要求される。 引用符が不要になるのは、 ~CSS識別子になる言語~codeに限られる。 ◎ Required quotes around :lang() values involving an asterisk; only language codes which happen to be CSS identifiers can be used unquoted.
- 注記: 2018年 2月 1日 草案は、 不作為に,まだ完遂していない作業の~commitを含んでいた。 この~commit は 2018年 2月 2日に復帰された。 【! *? (and fixed some links because why not) 】 ◎ Note: The 1 February 2018 draft included an inadvertent commit of unfinished work; 2 February 2018 has reverted this commit (and fixed some links because why not).
- `2012年 8月 23日 作業草案@~TR/2012/WD-selectors4-20120823/$ からの有意な変更点は: ◎ 20.5. Changes since the 23 August 2012 Working Draft ◎ Significant changes since the 23 August 2012 Working Draft include:
- `placeholder-shown$ps 疑似類を追加した。 ◎ Added :placeholder-shown pseudo-classes.
- `matches()$ps, `not()$ps に対する一部の制約を解放した。 ◎ Released some restrictions on :matches() and :not().
- 選択子~profile `fast^en, `complete^en (今は `live^en, `snapshot^en と呼ばれる)を定義した【が今や除去された】。 ◎ Defined fast and complete Selectors profiles (now called “live” and “snapshot”).
- `matches()$ps をより良く取扱うよう,`詳細度$の定義を改善した。 ◎ Improved definition of specificity to better handle :matches().
- 文法を更新した。 ◎ Updated grammar.
- `~AnB@~CSSSYN#anb-production$ 記法の定義を整理した。 ◎ Cleaned up definition of <An+B> notation.
- `相対~選択子$の定義を追加した。 `scope-constrained^en を `scope-filtered^en に変更した — `scope-contained^en と混同され易いので。 ◎ Added definition of scope-relative selectors, changed scope-constrained to scope-filtered for less confusion with scope-contained.
- `local-link()^ps 疑似類は、 尾部の~slashを無視するようにした。 ◎ The :local-link() pseudo-class now ignores trailing slashes.
- `2011年 9 月 29日 作業草案@~TR/2011/WD-selectors4-20110929/$ からの有意な変更点は: ◎ 20.6. Changes since the 29 September 2011 Working Draft ◎ Significant changes since the 29 September 2011 Working Draft include:
- RFC 4647 による言語~変種の取扱いを追加した。 ◎ Added language variant handling per RFC 4647.
- 視野~付き選択子を追加した。 ◎ Added scoped selectors.
- `user-error^ps (今は `user-invalid$ps と呼ばれる)を追加した。 ◎ Added :user-error (now called :user-invalid).
- `valid-drop-target^ps を追加した。 ◎ Added :valid-drop-target.
- `~column結合子$を `//^css から `||^css に変更した。 ◎ Changed column combinator from double slash to double pipe.
- `~level 3$ からの追加は: ◎ 20.7. Changes Since Level 3 ◎ Additions since Level 3:
- `not()$ps を,`選択子~list$を受容するように拡張した。 ◎ Extended :not() to accept a selector list.
- `is()$ps, `where()$ps, `has()$ps を追加した。 ◎ Added :is() and :where() and :has().
- `scope$ps を追加した。 ◎ Added :scope.
- `any-link$ps, `local-link$ps を追加した。 ◎ Added :any-link and :local-link.
- `時系列 疑似類§を追加した。 ◎ Added time-dimensional pseudo-classes.
- `target-within$ps, `focus-within$ps, `focus-visible$ps を追加した。 ◎ Added :target-within, :focus-within, and :focus-visible.
- `dir()$ps を追加した。 ◎ Added :dir().
- `lang()$ps を,~wildcard照合, 言語~codeたちが成す~listを受容するように拡張した。 ◎ Expanded :lang() to accept wildcard matching and lists of language codes.
- `nth-child()$ps を,`選択子~list$を受容するように拡張した。 ◎ Expanded :nth-child() to accept a selector list.
- `CSS3UI$r から各種 入力~選択子を併合した上で、 `indeterminate$ps を追加し直した ◎ Merged in input selectors from CSS Basic User Interface Module Level 3 and added back :indeterminate.
- `blank$ps, `user-invalid$ps を追加した。 ◎ Added :blank and :user-invalid.
- `格子構造~選択子§を追加した。 ◎ Added grid-structural (column) selectors.
- 属性~値を[ 文字大小無視, 文字大小区別 ]で照合する~flagを追加した。 ◎ Added case-insensitive / case-sensitive attribute-value matching flags.
謝辞
~CSS~WGは、 この仕様の基礎を成している仕様も含め, 年月に渡り,これまで各~levelの~Selectors仕様に貢献された すべての方々に感謝する。 特に、 ~Selectors~level 4 に貢献された次の方々に,特別な謝意を ⇒ `L. David Baron, Andrew Fedoniouk, Daniel Glazman, Ian Hickson, Grey Hodge, Lachlan Hunt, Anne van Kesteren, Jason Cranford Teague, Lea Verou^en ◎ The CSS working group would like to thank everyone who contributed to the previous Selectors specifications over the years, as those specifications formed the basis for this one. In particular, the working group would like to extend special thanks to the following for their specific contributions to Selectors Level 4: L. David Baron, Andrew Fedoniouk, Daniel Glazman, Ian Hickson, Grey Hodge, Lachlan Hunt, Anne van Kesteren, Jason Cranford Teague, Lea Verou
~privacyの考慮点
- `visited$ps 疑似類は、[ 利用者が,以前に どの~siteを訪問したか ]についての情報を公開し得る — ~UAが[ どの要素が合致したか露呈する情報 ]を~scriptに~~漏らさない~~労を~~怠った場合には。 ◎ The :visited pseudo-class can expose information about which sites a user has previously visited, if the UA is not careful to screen from scripting any information that would reveal which elements match it.
- `autofill$ps 疑似類は、[ 利用者が当の~formと それまでにヤリトリしたかどうか ]を公開し得る。 とは言え、 同じ情報は,[ 当の~form全体が,どれだけ素早く埋尽くされたか観測する ]ことでも導出し得る。 ◎ The :autofill pseudo-class can expose whether a user has interacted with this form before; however the same information can be derived by observing how quickly the form is filled out.
~securityの考慮点
`~privacyの考慮点@#privacy$は、 ~securityにも影響するものと見なすこともできる。 ◎ The Privacy Considerations could also be considered to affect Security.