[29]
選択子の
:lang(言語タグ)
擬似クラスは、
指定された言語の要素と一致します。
[61] :lang()
擬似クラスは、要素の自然言語が指定された値と等しいか、
または指定された値の後に -
が続いている時、その要素と一致します。
ここで要素の自然言語は文書言語によって定義されるものであり、必要に応じて BCP 47
の言語タグの構文に正規化したもの、とされています。 >>59
[73] WebVTT では、WebVTT内部節点オブジェクトは WebVTT節点オブジェクトの適用可能な言語によって言語が決まります >>72。
[63] :lang
の直後に括弧で括って言語タグを指定する必要があります。
[66] 言語タグは CSS の識別子でなければなりません。 言語タグとして正しいものである必要はありません。 >>59
[64] lang
の部分はASCII大文字・小文字不区別です。
[33]
一致判定の対象となる、文書木側の言語の情報源は、
文書のマーク付け言語によって異なります。
HTML では lang
属性や HTTP からの情報が使われますし、
XML では xml:lang
属性やマーク付け言語依存の方法で得られた情報が使われます。
CSS 2, CSS 2.1, Selectors3 >>59
[62] ... という話は仕様書では例として挙げられているだけのようで、
詳細は各マーク付け言語の仕様が規定するべきということと思われます。
但し CSS 2.1 や選択子3では、各文書やプロトコルで
BCP 47 の言語札を使うことや XML
では xml:lang
属性を使うことが推奨されています >>59。
[31]
:lang(C)
で、 C
は言語札を指定します。言語札として CSS 2
勧告では HTML 4.0 と RFC 1766 が、選択子勧告候補
Selectors3 CR では HTML 4.01 と RFC 3066
が参照されています。 HTML 4 は RFC 1766
を参照しています。
CSS 2.1 作業原案はハイフン区切りの文字列とだけ規定しています。 また、空文字列でもよく、その場合何と一致するかは未定義とされています。
[32]
:lang(C)
擬似クラスと言語との一致の判定は
属性選択子の |=
演算子と同じ方法によります。
CSS 2, CSS 2.1
という規定がなぜか Selectors 勧告候補にはありませんでした。
[68] 属性選択子で |=
を指定した場合と同じように機能しますが、
:lang
は実装が知っている文書の意味に基づき効果が及ぶ点が異なっています
>>59。
[69] 例えば :lang(ja)
は lang
属性が
ja
である要素だけでなく、 (それを継承している) 子孫の要素にも一致します。
また lang
属性が明示されていなくても、 HTTP
の Content-Language
欄に指定されていれば、それを継承している要素にも一致します。
更に lang
と xml:lang
が混在していても正しく動作します。
[77] XPath 1.0 にも lang()
関数があり、同じように使うことができますが、
XPath は XML の xml:lang
属性しか考慮しておらず若干動作が異なります。
:lang(ja)
と
[lang|="ja"]
が同じだとしているものがありますが、 >>32 や >>33 の通り同じではありません。 似たような意味を持つことは確かですが、 似ているからこそ読者の誤解を招かないように正確な解説を心がけるべきです。
[2] [selectors-4] Defer to css-text for definition of content language so… (fantasai著, ) https://github.com/w3c/csswg-drafts/commit/9eed0f927a7a5baea1d86737d15a96c1365cde00
<lang>
によって指定された言語 (の継承を考慮したもの) が:lang()
の一致の判定に用いられます。