当 CSS 链接在头部时,Firefox 不会阻止 HTML 的呈现

Posted

技术标签:

【中文标题】当 CSS 链接在头部时,Firefox 不会阻止 HTML 的呈现【英文标题】:Firefox won't block rendering of HTML when CSS links in head 【发布时间】:2018-04-27 14:30:40 【问题描述】:

我遇到了一个持续了一段时间的问题。我读到的关于 Firefox 的所有内容都指定,如果您在 <head> 中包含 <link> 标签,它将阻止页面的呈现,直到这些资源被加载。为了测试,我在服务器端资源渲染请求中设置了一个断点,以确保 CSS 永远不会加载。

在 Chrome、Safari 和 IE 中,页面保持空白或不刷新,直到我恢复进程并加载 CSS。这会导致一个空白屏幕,然后是一个样式正确的页面。

在 Firefox 中,原始 html(带有巨大的内联 SVG)会显示在页面上,直到我允许 CSS 请求完成。这会导致一闪而过的无样式内容 (FOUC)。

这是一个基本的标记示例

<!DOCTYPE html>
<html lang="en-us">
<head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#">
    <link rel="stylesheet" href="https://cdn.example.com/res/css/core.css?v=1a2b3c4d5e6f7890">
    <link rel="stylesheet" href="https://cdn.example.com/res/css/site.css?v=1a2b3c4d5e6f7890">
    <!-- meta tags, ads, etc -->
    <title>My Page Title</title>
</head>
<body>
    <header>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 125 24" class="site-logo">...</svg>
    </header>
    <!-- page content -->
    <script type="text/javascript" src="https://cdn.example.com/res/js/site.js?v=1a2b3c4d5e6f7890">...</script>
</body>
</html>

我有一个解决这个问题的方法,内联&lt;body style="display:none"&gt;,然后内联core.css,包括body display: block !important ,以模拟我期望的阻塞渲染效果。

我是否遗漏了一些重要的东西?是否有其他设置干扰此行为?我没有在其他网站上看到这种情况,这与我预期的行为背道而驰。

【问题讨论】:

嗯,这是个问题。无论我是否使用 CDN,都会发生这种情况。 async 和 defer 仅适用于脚本标签。 【参考方案1】:

我看到了同样的事情。 根据提示here,我在标题中的&lt;link&gt; 之后放置了一个非空脚本标记(只有一个空格&lt;script&gt; &lt;/script&gt;),这似乎会按预期阻止渲染。

【讨论】:

以上是关于当 CSS 链接在头部时,Firefox 不会阻止 HTML 的呈现的主要内容,如果未能解决你的问题,请参考以下文章

CSS 文本抖动 firefox

由于被CORS策略(javascript,html和css)阻止,程序在Firefox中运行但不是chrome

将CSS放头部,JS放底部,可以提高页面的性能的原因

Firefox 不会阻止发送的提交事件

Firefox 动画未以切换显示样式启动

当 Xampp 连接时,我的 CSS 不会显示为好像它没有链接到我的 index.php,当它是