时间:2013-06-21 15:01:00

标签: javascript html css

我已经使用<noscript>标记在未启用javascript时隐藏某些元素;但是,它似乎不起作用。

我的文件声明:

<!DOCTYPE html>

在我的文件末尾输入以下内容:

<noscript>
 <style type="text/css" scoped> #status {display:none;} </style> 
</noscript>

</body>
</html>

但即使禁用JS,#status div仍然存在。我在这里错过了什么吗?

5 个答案:

答案 0 :(得分:11)

删除scoped标记的style属性。它使您的CSS严格适用于<noscript>标记。

  

如果存在此属性,则样式仅适用于其父元素。

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/style#Attributes

答案 1 :(得分:5)

更简单的管理解决方案是默认隐藏元素并使用:

<script>document.getElementById('status').style.display='block';</script>

(或基于同等类别的解决方案)

答案 2 :(得分:0)

尝试删除scope的{​​{1}},如下面的代码所示。

style

答案 3 :(得分:0)

@ dystroy的回答是正确的做法,因为:

  • <style>个元素不能放在<body>上(除非他们有scoped属性)
  • <noscript>元素不能放在头上。

但如果您不想延迟,可以在<head>中使用以下内容:

<style id="noScriptSheet" type="text/css">
.onlyScript{ display:none;}
</style>

<script type="text/javascript">
function kill(el){
    return el.parentNode.removeChild(el);
}
kill(document.getElementById('noScriptSheet'));
</script>

在元素中添加一个类:

<div class="onlyScript">Hello world!</div>

演示http://jsfiddle.net/TQLfu/

答案 4 :(得分:0)

我要添加此答案,因为这似乎是关于noscript标签的最受欢迎的SO问题。

“ Sybu JavaScript阻止程序” 似乎根本不起作用。因此,如果您要使用该JavaScript阻止程序进行测试,请尝试使用其他JavaScript阻止程序。当我使用“ Toggle Javascript”时,noscript标签会被正确触发。我还没有发现一种检测到正在使用“ Sybu JavaScript阻止程序”的方法。


我的测试环境:

  • Sybu JavaScript阻止程序,版本2.93
  • 切换JavaScript版本1.3
  • Chrome,版本85.0.4183.83