轉載自:https://blog.csdn.net/qq_44721831/article/details/102528073
style標簽寫在body后與body前有什么區別?
從有html標准以來到目前為止(2017年5月),標准一直是規定style元素不應出現在body元素中。(除非style處於template元素中,因為template中的內容是不直接在dom樹中的。另外曾經
如果style元素出現在body元素,最終效果和style元素出現在head里是一樣的。但是可能引起FOUC、重繪或重新布局。注意,根據當前標准,<link rel=stylesheet …> 是可以出現在body元素中的。並且也可能引起上述問題。然而link是引用資源,意味着可以用於故意設計的異步加載。而style元素是直接內嵌的,並沒有合理的use case去使用它。所以html標准中允許body中出現link,而不允許style。
不過,雖然20年以來,把style放在body中一直是不合標准的,但仍然有大量網站這樣用了,所以這個問題是有一定爭議的。參見 style tag should be allowed in body · Issue #1605 · whatwg/html 。
PS. 有部分網站在body中使用style可能是出於組件或CMS的需求,之前html標准曾加入了
寫在head標簽中利於瀏覽器逐步渲染(resources downloading->CSSOM+DOM->RenderTree(composite)->Layout->paint)。具體渲染過程請參考
http://blog.csdn.net/wozaixia…
寫在body標簽后由於瀏覽器以逐行方式對html文檔進行解析,當解析到寫在尾部的樣式表(外聯或寫在style標簽)會導致瀏覽器停止之前的渲染,等待加載且解析樣式表完成之后重新渲染,在windows的IE下可能會出現FOUC現象(即樣式失效導致的頁面閃爍問題)
之所以建議這樣做,是因為當你在前面聲明css時
<body>
開始時,你的樣式實際上已經加載了。所以用戶很快就會看到屏幕上出現的東西(例如背景色)。如果沒有,用戶會在CSS到達用戶之前看到一段時間的空白屏幕。此外,如果將樣式放在
<body>
,當已聲明的樣式被解析時,瀏覽器必須重新呈現頁面(加載時新的和舊的)。