如何在 <noscript> 标记中使用 <style> 元素?

Posted

技术标签:

【中文标题】如何在 <noscript> 标记中使用 <style> 元素?【英文标题】:How do I use a <style> element within a <noscript> tag? 【发布时间】:2019-07-20 14:41:01 【问题描述】:

我有一个网站,在我的&lt;script&gt; 标记下方有一个&lt;noscript&gt; 标记,以防javascript 无法加载。它基本上关闭了一些与平滑滚动 JS 代码和预加载器有关的 CSS 值。

但是,当我通过 w3c html 验证器运行该站点时,它会显示:

Element style not allowed as child of element noscript in this context. (Suppressing further errors from this subtree.)

我使用的代码是:

<noscript>
<style type="text/css" media="screen">#main-body opacity: 1 !important;  .viewport position: static; overflow: visible; h1, h2, h3 opacity: 1 .st-ca-title, .st-ca-sub, .st-co-title, .st-co-sub, .js-client-stagger, .btn, .btn a, .st-ho-title, .st-ho-sub, .st-ho-p opacity: 1
</style>
</noscript>

这段代码确实做了我想做的事(即,如果 JS 加载失败,确保网站仍然可以正常工作),但是我在这里做错了什么来得到这个错误吗?

我不能将&lt;noscript&gt; 标记放在文档的头部,因为它必须在主 js 脚本标记之后。

欢迎提出任何建议。

保罗。

【问题讨论】:

你能把 main.js 包含在头部吗? 如果它工作,老实说我不会关注验证器 验证器是一个重要的工具,通常您应该致力于让您的页面进行验证。 有时如果您需要验证某个特定项目,您必须做出判断。 你是因为 IE 才尝试使用这个吗?如果是这种情况,请在this link 【参考方案1】:

似乎没有任何理由将此代码视为无效。 &lt;style&gt; 元素是 &lt;noscript&gt; 元素的有效子元素,并且两者都是 &lt;head&gt;&lt;body&gt; 的有效子元素。

通常情况下,您希望避免将标记与脚本和样式混为一谈。我建议有一个应用您的样式的类,然后使用 JavaScript 删除该类。通过这种方式,您可以将样式保存在一个位置,然后在脚本中包含删除这些样式的逻辑,从而完全避免嵌套的 &lt;noscript&gt;&lt;style&gt; 方法。

<!DOCTYPE html>
<html>
  <head>
    <style>
      .no-js 
        /* "no script" styles here */
      
    </style>
  </head>
  <body class="no-js">
    <script>
      document.querySelector('body').classList.remove('no-js');
    </script>
  </body>
</html>

【讨论】:

【参考方案2】:

我同意@jaasum 不要那样混合它们

不管它不会有你正在寻找的受限影响,像这样限定 css .. 这里红色应用于 noscript 标签内,否则应用绿色。

<!DOCTYPE html>
<html>
    <head>
        <style>
            .danger 
                color: green; font-weight: bold;
            

            noscript .danger 
                color: red; font-weight: bold;
            
        </style>

        <script>
            function myStuff() 
                let p = document.createElement('p');
                p.innerHTML = '<p>you seem to have <span class="danger">scripts enabled...</span></p>';
                document.body.appendChild( p);

            

        </script>

    </head>

    <body onload="myStuff()">
        <noscript>
            <h1>Script</h1>

            <p>you need <span class="danger">scripts enabled</span></p>

        </noscript>

    </body>

</html>

【讨论】:

以上是关于如何在 <noscript> 标记中使用 <style> 元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bootstrap 3 中使 <i> 标记成为 HREF?

如何在 IE7 中使空的锚标记可点击?

Vue Spa 将 <noscript> 标记内容显示为搜索引擎中的描述文本。例如谷歌搜索

如何为 <noscript> 标签编写自动化测试?

元刷新标签不使用 noscript 标签重定向

如何使 <noscript> 元素可访问?