【发布时间】:2022-01-18 02:29:09
【问题描述】:
是否可以定位没有语言集或继承的元素,即未指定(“未知”)语言的元素?
琐事
可以使用HTML lang 属性设置HTML 文档或元素语言,例如:
<html lang="en">
<h1>Dictionary</h1>
<dl>
<dt><abbr lang="en-Mors">-... - .--</abbr>
<dd><i lang="fr-Latn">à propos</i>
</dl>
或使用HTTP Content-language header中的代码:
HTTP/2 200 OK
[other headers]
Content-language: en,en-Brai,fr-Latn
<html>
<h1>Dictionary</h1>
[rest of document]
或者它早已被弃用但仍在工作 <meta http-equiv> 对应:
<html>
<head>
<meta http-equiv="content-language" content="en,en-Brai,fr-Latn">
</head>
<html>
<h1>Dictionary</h1>
[rest of document]
在任何一种情况下,使用:lang(en) CSS 选择器都会匹配示例中的主标题和所有其他没有显式lang 属性且值不相等或以“en”开头的元素。
目标
如果发送文档没有 Content-language HTTP 标头或<meta> 元素和没有 lang 属性,是否可以匹配那些落下的元素到不可避免的“未知”语言?
另外,在以上述任何方式设置语言的文档或 DOM 片段中,是否可以使用 lang() CSS 选择器来匹配带有 empty lang="" attribute 的元素,从而有效地“选择退出”使用语言?
HTTP/2 200 OK
[no content-language header nor meta present]
<html>
<p>I Want to select this. <span>And this.</span></p>
<p lang="">And this.</p>
<p lang="en">Not this. <span lang="">But this again.</span></p>
什么不起作用
:lang()、:lang(unknown)、:lang('') 和 :not(:lang(*)) 都不能用于此目的。从 :not([lang]), [lang=''] 派生的选择器在逻辑上会给出带有 HTTP 内容语言标头/元数据的用例的错误否定。
回答要求
寻求答案,要么给出没有假阴性的解决方案,要么通过参考规范(或它们的缺失)确认这是不可能的,并解释为什么会这样。
注意事项:
当存在空的lang="" 属性时,使用[lang=""] 属性选择器来定位它是可行的,但考虑到有专门的:lang() 伪类用于与语言相关的东西,感觉很奇怪。
【问题讨论】:
-
您无法使用 CSS 获取 HTTP 标头。您必须使用 JavaScript:stackoverflow.com/questions/220231/…
-
当然,不是“直接”,而是因为例如
:lang(xx)CSS 选择器匹配所有没有通过Content-language: xxHTTP 标头提供的文档中的属性设置的显式语言设置的元素,可以说你可以“间接”非常安全。
标签: css