【发布时间】:2012-01-27 01:39:29
【问题描述】:
我在一个 100% Javascript 网站上工作,该网站使用 body 上的 CSS 类来显式隐藏所有内容 (display:none),然后根据需要启用块(不寻常的是,但我无法更改架构)。
我想在未启用 js 的情况下向用户显示noscript 消息,但我们遇到了 CSS 难题。 noscript 必须存在于 body 中。据我所知,与页面上的其他块不同,noscript 元素不能被强制变为可见。奇怪的是,当我使用 Webkit Inspector 选择 noscript 元素时,它“声称” noscript 元素是可见的。但无论如何,禁用 js 后屏幕上什么也没有显示。
我已经完成了两个测试用例 - 一个使用标准 noscript,另一个使用隐藏 div。无论哪种方式,隐藏的元素无论如何都会保持隐藏状态。我的理论是,根本不可能有选择地显示嵌套在隐藏的父元素内的元素(即noscript 内的body)。
这是我的简单测试用例。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<style type="text/css" media="screen">
body{
display:none;
}
body noscript {
display:block;
visibility:visible;
color:black;
}
</style>
</head>
<body>
<p>Normal text</p>
<noscript>
<p>This is is noscript</p>
</noscript>
</body>
</html>
[稍后:为清楚起见简化示例]
这可以解决吗?谢谢。
【问题讨论】:
-
“根本不可能有选择地显示嵌套在隐藏的父元素中的元素”——这句话对我来说是正确的。
-
你真的需要
display:none吗?你不能鼓励做出这些决定的人让你有两个 div,一个默认可见以显示错误消息,另一个隐藏,你的 js 隐藏第一个并显示第二个它做的第一件事? (你的 js 必须显示身体......所以它也可以显示一个 div)。 -
克里斯 - 不幸的是,可能不是。这是一个相当高水平的设计决策。我可以游说...
-
克里斯 - 我认为你是对的 - 这是我能想出的唯一让它发挥作用的方法。现在只需为这一变化进行游说。
-
克里斯,如果您想将此作为实际答案发布,我会将其标记为正确答案。