CSS 屬性值的計(jì)算過程

由圖中我們可以看到,一個(gè)自定義不書寫任何樣式的p元素在樣式計(jì)算過后都會(huì)產(chǎn)生很多的樣式值,這是因?yàn)?strong>瀏覽器渲染每個(gè)元素的前提條件是,該元素的所有CSS屬性必須有值

那么一個(gè)元素的屬性值從無到有經(jīng)歷了哪些過程呢?

屬性值計(jì)算的4個(gè)步驟

一、確定聲明值

將樣式表中沒有沖突的聲明,作為CSS屬性值

假設(shè)我們需要設(shè)置一個(gè)元素的CSS屬性值,一開始所有屬性值都為空,經(jīng)歷步驟一的計(jì)算就可以確定下來部分屬性的值

二、層疊沖突

對樣式表有沖突的聲明使用層疊規(guī)則,確定CSS屬性值


經(jīng)過步驟二后確定出font-size等屬性的值

三、使用繼承

對仍然沒有值且可以繼承的屬性,則繼承父元素的值

即使是根元素瀏覽器都會(huì)有默認(rèn)的樣式表,所以說如果一個(gè)元素經(jīng)歷步驟一和步驟二后某個(gè)屬性仍然沒有值,則會(huì)依次向上去繼承父元素中的屬性值,當(dāng)然并不是所有的屬性都可以繼承,詳情的規(guī)則可以參照MDN的官方文檔。

四、使用默認(rèn)值

對仍然沒有值的屬性,使用默認(rèn)值

width屬性為例,默認(rèn)值可以在MDN官方文檔中查詢到。所有的屬性值都有自己的默認(rèn)值。

所以經(jīng)歷以上四個(gè)步驟后,該元素的所有CSS屬性的值都會(huì)計(jì)算完畢


看一個(gè)經(jīng)典的面試題

先明確一點(diǎn)就是color屬性是可以被繼承

面試題:下圖中a標(biāo)簽中文字的顏色是什么?

左題目,右答案

如果你對于a標(biāo)簽為什么沒有不是紅色有疑問的話,可以繼續(xù)往下看

通過瀏覽器調(diào)試工具我們可以看到,a標(biāo)簽在瀏覽器的默認(rèn)樣式表(用戶代理樣式表)表中存在color屬性,所以計(jì)算的過程中,第一步就已經(jīng)確定了a標(biāo)簽的color屬性值了

而p標(biāo)簽在瀏覽器的默認(rèn)樣式表(用戶代理樣式表)表中不存在color屬性,則會(huì)在走到第三步時(shí)從父元素div中繼承color的屬性值

所以這也是為什么p標(biāo)簽中文字顏色是紅色而a標(biāo)簽不是

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容