我知道脚本文件可以在资源包含上使用DEFER和ASYNC关键字。这些关键字是否也适用于样式表(即CSS)包含?语法大概是:
<link rel="stylesheet" type="text/css" href="./path/to/style.css" defer />
字符串我只是不知道这是否允许。
4urapxun1#
Defer和Async是标记<script>https://developer.mozilla.org/en/docs/Web/HTML/Element/script的特定属性它们在其他标签中不起作用,因为它们不存在。样式表不是包含并行执行或加载后执行的逻辑的脚本。样式表是一个静态样式的列表,这些样式原子地应用于html。
Defer
Async
<script>
bq3bfh9z2#
你可以这样做:
<link rel="stylesheet" href="/css/style.css" media="none" onload="if(media!=='all')media='all'" >
字符串并创建一个noscript回退
iyr7buue3#
贷方:https://www.giftofspeed.com/defer-loading-css/
在html文档的结束</body>标记上方添加以下内容
</body>
<script type="text/javascript"> /* First CSS File */ var giftofspeed = document.createElement('link'); giftofspeed.rel = 'stylesheet'; giftofspeed.href = '../css/yourcssfile.css'; giftofspeed.type = 'text/css'; var godefer = document.getElementsByTagName('link')[0]; godefer.parentNode.insertBefore(giftofspeed, godefer); /* Second CSS File */ var giftofspeed2 = document.createElement('link'); giftofspeed2.rel = 'stylesheet'; giftofspeed2.href = '../css/yourcssfile2.css'; giftofspeed2.type = 'text/css'; var godefer2 = document.getElementsByTagName('link')[0]; godefer2.parentNode.insertBefore(giftofspeed2, godefer2); </script>
字符串
o4tp2gmn4#
截至2020年9月,我发现至少Chrome有原生支持,可以使用属性rel="preload"延迟CSS来异步加载文件
rel="preload"
<link href="main.css" rel="stylesheet" rel="preload" as="style">
字符串您可以使用更全面的方法,使用JavaScript使其与大多数浏览器兼容,并在未启用JS时包含noscript选项
noscript
<link href="main.css" rel="preload" as="style" onload="this.onload=null;this.rel='stylesheet'"> <noscript><link rel="stylesheet" href="main.css"></noscript>
型来源:https://web.dev/defer-non-critical-css/
67up9zun5#
我在任何地方都找不到它的记录,但我的发现是:
如何测试
我有一个样式表导入自定义字体并应用字体。
之前:
使用自定义字体的文本是不可见的,直到它完全加载,然后它出现。
之后/结果:
所以added =>结果是,当页面开始呈现时,文本立即可见,但使用回退字体,然后过一段时间它切换到自定义字体。
所以看起来至少Google Chrome也支持对<link>标签的defer,即使它没有在任何地方公开记录...
<link>
xghobddn6#
Lighthouse似乎很喜欢这个:
<script> window.addEventListener('load', () => { let link = document.createElement('link'); link.rel = 'stylesheet'; link.type = 'text/css'; link.href = "/path/to/style.css"; document.head.appendChild(link) }) </script>
6条答案
按热度按时间4urapxun1#
Defer
和Async
是标记<script>
https://developer.mozilla.org/en/docs/Web/HTML/Element/script的特定属性它们在其他标签中不起作用,因为它们不存在。样式表不是包含并行执行或加载后执行的逻辑的脚本。样式表是一个静态样式的列表,这些样式原子地应用于html。
bq3bfh9z2#
你可以这样做:
字符串
并创建一个noscript回退
iyr7buue3#
贷方:https://www.giftofspeed.com/defer-loading-css/
在html文档的结束
</body>
标记上方添加以下内容字符串
o4tp2gmn4#
截至2020年9月,我发现至少Chrome有原生支持,可以使用属性
rel="preload"
延迟CSS来异步加载文件字符串
您可以使用更全面的方法,使用JavaScript使其与大多数浏览器兼容,并在未启用JS时包含
noscript
选项型
来源:https://web.dev/defer-non-critical-css/
67up9zun5#
我在任何地方都找不到它的记录,但我的发现是:
如何测试
我测试的是
我有一个样式表导入自定义字体并应用字体。
之前:
使用自定义字体的文本是不可见的,直到它完全加载,然后它出现。
之后/结果:
所以added =>结果是,当页面开始呈现时,文本立即可见,但使用回退字体,然后过一段时间它切换到自定义字体。
所以看起来至少Google Chrome也支持对
<link>
标签的defer,即使它没有在任何地方公开记录...xghobddn6#
Lighthouse似乎很喜欢这个:
字符串