:lang

:lang() 擬似クラス (選択子)

[29] 選択子:lang(言語タグ) 擬似クラスは、 指定された言語要素一致します。

仕様書

意味

[61] :lang() 擬似クラスは、要素自然言語が指定された値と等しいか、 または指定された値の後に - が続いている時、その要素一致します。 ここで要素自然言語文書言語によって定義されるものであり、必要に応じて BCP 47言語タグの構文に正規化したもの、とされています。 >>59

[73] WebVTT では、WebVTT内部節点オブジェクトWebVTT節点オブジェクト適用可能な言語によって言語が決まります >>72

[74] つまり <lang> によって指定された言語 (の継承を考慮したもの) が :lang()一致の判定に用いられます。

[3] 関連: 言語タグの一致

構文

[63] :lang の直後に括弧で括って言語タグを指定する必要があります。

[66] 言語タグCSS識別子なければなりません言語タグとして正しいものである必要はありません。 >>59

大文字と小文字

[64] lang の部分はASCII大文字・小文字不区別です。

[65] 言語タグASCII大文字・小文字不区別です >>59

要素の言語

[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

妥当性

[67] 構文的に正しくないと非妥当です。例えば言語タグが指定されていないと非妥当です >>59

歴史

[31] :lang(C) で、 C言語札を指定します。言語札として CSS 2 勧告では HTML 4.0RFC 1766 が、選択子勧告候補 Selectors3 CR では HTML 4.01RFC 3066 が参照されています。 HTML 4RFC 1766 を参照しています。

CSS 2.1 作業原案はハイフン区切りの文字列とだけ規定しています。 また、空文字列でもよく、その場合何と一致するかは未定義とされています。

メモ: 執筆の時点で Selectors 勧告候補は CSS 2.0 勧告に基づいた規定になっており、次の原案で CSS 2.1 作業原案における改訂を反映するものと思われます。

CSS2

[71] >>70 で追加されました。

選択子3

[32] :lang(C) 擬似クラス言語との一致の判定は 属性選択子|= 演算子と同じ方法によります。 CSS 2, CSS 2.1 という規定がなぜか Selectors 勧告候補にはありませんでした。

WebVTT

[76] >>75<lang> が定義されたのに伴い、 :lang() との対応も規定されることになりました。

関連

[68] 属性選択子|= を指定した場合と同じように機能しますが、 :lang は実装が知っている文書意味に基づき効果が及ぶ点が異なっています >>59

[69] 例えば :lang(ja)lang 属性ja である要素だけでなく、 (それを継承している) 子孫要素にも一致します。 また lang 属性が明示されていなくても、 HTTPContent-Language 欄に指定されていれば、それを継承している要素にも一致します。 更に langxml:lang が混在していても正しく動作します。

[77] XPath 1.0 にも lang() 関数があり、同じように使うことができますが、 XPathXMLxml:lang 属性しか考慮しておらず若干動作が異なります。

メモ

[34] 巷の CSS の解説の中には、

:lang(ja)

[lang|="ja"]

が同じだとしているものがありますが、 >>32>>33 の通り同じではありません。 似たような意味を持つことは確かですが、 似ているからこそ読者の誤解を招かないように正確な解説を心がけるべきです。

[1] Safari 9.0 ( 版) https://developer.apple.com/library/safari/releasenotes/General/WhatsNewInSafari/Articles/Safari_9.html#//apple_ref/doc/uid/TP40014305-CH9-SW34

The following CSS4 selectors are now fully supported by Safari.

:lang

[2] [selectors-4] Defer to css-text for definition of content language so… (fantasai著, ) https://github.com/w3c/csswg-drafts/commit/9eed0f927a7a5baea1d86737d15a96c1365cde00