fe-interview icon indicating copy to clipboard operation
fe-interview copied to clipboard

[css] 第15天 style标签写在body前和body后的区别是什么?

Open haizhilin2013 opened this issue 5 years ago • 13 comments

第15天 style标签写在body前和body后的区别是什么?

haizhilin2013 avatar Apr 30 '19 20:04 haizhilin2013

渲染机制的区别,在body前是已经把样式浏览一遍,到了对应标签直接,渲染样式。显示块。 在body后,是浏览器已经把标签浏览了,但基于没有样式,显示的不完全,再把body后的样式表,扫描后,在成为真正的样式。会慢,遇到大型网站,效果更差,这都基于浏览器从上而小的浏览机制导致的。

hbl045 avatar May 05 '19 13:05 hbl045

没差

Vi-jay avatar Jul 26 '19 07:07 Vi-jay

在 HTML4 的时候,不应该把 style 放到 body 中间。

浏览器在渲染页面时 DOM 和 CSSOM 是并行的,然后两者结合形成 Render Tree 显示页面。从直觉上来说,style 写在 body 前不会对 DOM 的渲染进行阻塞;而写在 body 内会对 DOM 渲染进行阻塞。会产生 FOUC(Flash of Unstyled Content) 的现象,既一瞬间的白屏或者样式的突然变化(原因是 Render Tree 重新生成了)。

不过 W3C 在 HTML5.2 的定义中对于 style 标签的使用的定义中是允许将 style 放到 body 中的。

Contexts in which this element can be used: Where metadata content is expected. In a noscript element that is a child of a head element. In the body, where flow content is expected.

参考文章: Will it be a wrong idea to have <style> in <body>? W3C The style element 什么是 FOUC?如何避免 FOUC? Understanding the Critical Rendering Path

Konata9 avatar Jul 28 '19 13:07 Konata9

俺Blog里写的应该很到位。 性能优化——CSS和JS的加载和执行

jiamianmao avatar Aug 09 '19 08:08 jiamianmao

放在body前会跟HTML同时渲染 放在body后,浏览器会先渲染HTML,再渲染CSS,则会导致一开始出现一个没有样式的界面,再跳到有样式的界面。

blueRoach avatar Jun 01 '20 07:06 blueRoach

写在body标签前利于浏览器逐步渲染 写在body标签后:由于浏览器以逐行方式对html文档进行解析;当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染; 在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题);

giggleCYT avatar Jun 15 '20 08:06 giggleCYT

放在body前会跟HTML同时渲染 放在body后,浏览器会先渲染HTML,再渲染CSS,则会导致一开始出现一个没有样式的界面,再跳到有样式的界面。

MrZ2019 avatar Sep 11 '20 01:09 MrZ2019

利于浏览器逐步渲染

由于浏览器以逐行方式对html文档进行解析;

当解析到写在尾部的样式表(外联或写在style标签)会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染

在windows的IE下可能会出现FOUC现象(即样式失效导致的页面闪烁问题)

HTML4 中

不应该把 style 放到 body 中间

浏览器在渲染页面时 DOM 和 CSSOM 是并行的,然后两者结合形成 Render Tree 显示页面

从直觉上来说,style 写在 body 前不会对 DOM 的渲染进行阻塞;而写在 body 内会对 DOM 渲染进行阻塞

不过 W3C 在 HTML5.2 的定义中对于 style 标签的使用的定义中是允许将 style 放到 body 中的 img

amikly avatar Nov 02 '21 15:11 amikly

写在body前有利于浏览器逐步渲染,而写在body后由于浏览器以逐行方式对html文档进行解析,当解析到写在尾部的样式表,就会导致浏览器停止之前的渲染,等待加载且解析样式表完成之后重新渲染,在windows的IE下可能会出现样式失效导致的页面闪烁问题。

tk12138 avatar Nov 27 '21 12:11 tk12138

渲染先后的问题,在加载东西很多,大网站会有影响

WangXi01 avatar Jul 13 '22 07:07 WangXi01

写在body前利于浏览器渲染,将会跟浏览器一起渲染下去 写在body后由于浏览器以逐行对html文档进行解析,当解析到尾部的样式表会导致浏览器停止之前的渲染,等待加载接解析样式表完成后之后重新渲染

Iambecauseyouare avatar Feb 28 '23 05:02 Iambecauseyouare

1、 写在 body 标签前利于浏览器逐步渲染: resourcesdownloading (资源下载)->CSSOM+DOM->RenderTree(composite)->Layout->paint

2、写在 body 标签后: 由于浏览器以逐行方式对 html 文档进行解析; 当解析到写在尾部的样式表(外联或写在 style 标签)会导致浏览器停止之前的渲染,等待 加载且解析样式表完成之后重新渲染; 在 windows 的 IE 下可能会出现 FOUC 现象(即样式失效导致的页面闪烁问题);

lili-0923 avatar Feb 04 '24 03:02 lili-0923