你能为noscript元素设置样式吗?

14

是否可以在CSS选择器中使用noscript元素?

noscript p {
    font-weight: bold;
}

遇到相同问题的人可能应该看一下这个问题 - Clément
3个回答

16

是的!你绝对可以这样做。

实际上,许多(全部?)浏览器都支持使用CSS来定位任意标签。HTML规范中的“官方”标签只定义了浏览器应该如何处理它们。但是CSS是一种目标XML的语言,因此你可以说 foo {font-weight:bold;},在大多数浏览器中,<foo>hello world</foo> 会以粗体显示。

正如Darko Z所澄清的那样,IE6/7不会自动从来源添加任意(非标准)元素到DOM中;它们必须通过程序添加。


9

我需要提醒你一个IE浏览器的Bug。如果你只想为

比如,你想要将

所以,下面的组合并不理想:

CSS

noscript {
    background-color: red;
}

HTML

<noscript>Turn on your damned JavaScript! What is this, 1999?</noscript>

但这种解决方法很好用:
CSS
noscript div {
    background-color: red;
}

HTML

<noscript><div>Turn on your damned JavaScript! What is this, 1999?</div></noscript>

奇怪的是,我只在IE8中看到这种行为,而不是IE7。至于IE6,谁知道呢...


这是一个IE的bug: http://www.positioniseverything.net/explorer/ie8stylednoscriptbug/index.html。感谢提供解决方法,我之前是用Javascript隐藏`noscript`元素,这是极其低效的。这个bug也会在IE9 beta中出现。 - Yi Jiang

3
除了 Rex M's answer之外,IE 6/7(6默认,7可能)不会为您样式化任意标签。但是幸运的是,与所有许多IE问题一样,有一个解决方法。
假设您想要样式化一个名为foo的元素。为了让IE将其识别为可样式化元素,您需要在JS中的某个位置包含此行:
document.createElement('foo');

你不需要追加它,只需创建它。

这将使用CSS规则使IE为您设置该元素的样式:

foo { font-weight:bold; }

2
谢谢,但我不同意你关于“像所有IE问题一样,有一个解决方法”的观点。 :p - nickf
1
考虑到问题是关于“noscript”元素的,你提供的解决方法似乎不是很有用。 - user2736012
如果你用noscript替换foo,那么它就是。我不确定我理解你的观点。 - Darko
5
你的解决方案需要 JavaScript。如果 JavaScript 被禁用,该解决方案将无法运行。如果启用了 JavaScript,则解决方案会运行,但是内容仍然被隐藏。 - user2736012
@user2736012 不能看到森林,只看到了树木!很好地指出了。 - Darko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接