【问题标题】:using CSS: lang() selector to toggle a divs visibility使用 CSS: lang() 选择器来切换 div 的可见性
【发布时间】:2019-01-19 17:12:39
【问题描述】:

好吧,它不起作用,也许它只是不起作用。我想展示一个基于浏览器语言的容器。

所有 div 的初始设置都消失了。 我尝试使用属性 display: none 和 visibility: hidden ,但无济于事。语言选择器不会覆盖初始设置。

 .france-box, .german-box, .dutch-box, .italy-box { display: none }

 .france-box :lang(fr) { display: flex }
 .german-box :lang(de) { display: flex; }
 .dutch-box :lang(nl) { display: flex; }
 .italy-box :lang(en) { display: flex; }

它似乎以另一种方式工作,如果语言有效,我可以隐藏 div,但不显示它们。

任何想法如何使用,理想情况下,只使用 css。我想要一个精益解决方案。

【问题讨论】:

  • 请同时添加您的 HTML。
  • 去掉 .frace-box :lang(fr) 等之间的空格

标签: html css lang


【解决方案1】:

这里有两个问题:

更改从display: none 继承的元素的显示没有任何作用

类选择器和 lang 伪类选择器之间的后代组合器意味着只有 display: none(从第 1 行开始)的元素的后代元素才会被定位。

这是一个简化的例子:

div {
  display: none;
}

div span {
  display: flex
}
<div><span>...</span></div>

由于divdisplay: none,所以span 是什么并不重要。它不会显示,因为它在 div 中。


:lang: 伪类并没有像你想象的那样做

它代表元素所用的语言。它与浏览器的配置无关(即与浏览器UI所在的语言无关,也与用户的语言偏好)。

:lang(en) { background: pink; }
:lang(fr) { background: yellow; }
<p lang="en">This is English</p>
<p lang="fr">C'est français</p>

CSS 没有检测用户语言的机制。

您可以使用服务器端代码检查浏览器发送的Accept-Lang 请求标头,并根据用户的偏好提供不同的文档。

【讨论】:

  • 啊,好的,谢谢昆汀,你说得对,我误解了。非常彻底的答案投票给昆汀的人!
  • 没有降序元素,不应用假设的第一个问题。我担心更改显示属性时会更改选择器规则。如果 .france-box 被告知为 display:none,则应将 .france-box 更改为 display:flex。
  • @LluísTurróCutiller — “没有降序元素” — 问题中的代码适用于 display: none.france-boxdisplay: flex.france-box :lang(fr)。这是.france-box:lang(fr) 之间的后代组合子。它们是不同元素的事实是我在此答案中讨论的确切问题
猜你喜欢
  • 1970-01-01
  • 2017-07-07
  • 2014-03-02
  • 2010-10-16
  • 2015-12-26
  • 1970-01-01
  • 2013-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多