前端魔法堂 解秘FOUC

2021-09-17 01:39:26 字數 1306 閱讀 8530

對於問題多多的ie678,fouc(flash of unstyled content)——瀏覽器樣式閃爍是乙個不可忽視的話題,但對於ever green的瀏覽器就不用理會了嗎?下面嘗試較全面地解密fouc。

頁面載入解析時,頁面以樣式a渲染;當頁面載入解析完成後,頁面突然以樣式b渲染,導致出現頁面樣式閃爍。

樣式a,瀏覽器預設樣式 或 瀏覽器預設樣式 層疊 部分已載入的頁面樣式;

樣式b,瀏覽器預設樣式 疊加 全部頁面樣式。

瀏覽器以user agent stylesheet(瀏覽器內建樣式)為原料構建cssom tree;

dom tree+cssom tree構建出render tree,然後頁面內容渲染出來;

當解析到inline stylesheet 或 internal stylesheet時,馬上重新整理cssom tree,cssom tree或dom tree發生變化時會引起render tree變化;

,and@import url("")會阻塞渲染。

示例1:阻塞解析

hi

示例2:阻塞渲染

hi

示例3:阻塞渲染

hi

示例4:阻塞渲染

hi示例1:阻塞渲染

hi示例2:阻塞渲染

hi示例1:

hi

示例2:

hi

上面的示例表明,ie下block rendering等價於block parsing,因為連img,script,link,@import url()資源請求都會被阻塞。

現在我們知道fouc時由於頁面採用臨時樣式來渲染頁面而導致的,其中僅有chrome能好的遮蔽了這一點,而其他瀏覽器就呵呵了。那有什麼方案可以解決呢?其實我們的目的就是不要讓使用者看到臨時樣式,那麼我們可以隱藏body,當樣式資源載入完成後再顯示body

(編譯modernizr時記得勾setclasses哦,否則不會替換no-js的!)

flash of unstyled content

the fouc problem

critical rendering path

CSS魔法堂 Position定位詳解

一 position各屬性值詳解 1.static 預設值,元素將按照正常文件流規則排列。2.relative 相對定位,元素仍然處於正常文件流當中,但可以通過left top right和bottom的css規則來改變元素的位置。注意點 a 元素原來位置將保留,不被其他元素所佔據 b 當使用lef...

CSS魔法堂 Position定位詳解

一 position各屬性值詳解 1.static 預設值,元素將按照正常文件流規則排列。2.relative 相對定位,元素仍然處於正常文件流當中,但可以通過left top right和bottom的css規則來改變元素的位置。注意點 a 元素原來位置將保留,不被其他元素所佔據 b 當使用lef...

CSS魔法堂 Position定位詳解

一 position各屬性值詳解 1.static 預設值,元素將按照正常文件流規則排列。2.relative 相對定位,元素仍然處於正常文件流當中,但可以通過left top right和bottom的css規則來改變元素的位置。注意點 a 元素原來位置將保留,不被其他元素所佔據 b 當使用lef...