由圖中我們可以看到姻乓,一個(gè)自定義不書寫任何樣式的p元素在樣式計(jì)算過后都會(huì)產(chǎn)生很多的樣式值呀舔,這是因?yàn)?strong>瀏覽器渲染每個(gè)元素的前提條件是场斑,該元素的所有CSS屬性必須有值
那么一個(gè)元素的屬性值從無(wú)到有經(jīng)歷了哪些過程呢?
屬性值計(jì)算的4個(gè)步驟
一挽鞠、確定聲明值
將樣式表中沒有沖突的聲明疚颊,作為CSS屬性值
假設(shè)我們需要設(shè)置一個(gè)元素的CSS屬性值,一開始所有屬性值都為空信认,經(jīng)歷步驟一的計(jì)算就可以確定下來(lái)部分屬性的值
二材义、層疊沖突
對(duì)樣式表有沖突的聲明使用層疊規(guī)則,確定CSS屬性值
經(jīng)過步驟二后確定出font-size等屬性的值
三嫁赏、使用繼承
對(duì)仍然沒有值且可以繼承的屬性其掂,則繼承父元素的值
即使是根元素瀏覽器都會(huì)有默認(rèn)的樣式表,所以說(shuō)如果一個(gè)元素經(jīng)歷步驟一和步驟二后某個(gè)屬性仍然沒有值橄教,則會(huì)依次向上去繼承父元素中的屬性值清寇,當(dāng)然并不是所有的屬性都可以繼承,詳情的規(guī)則可以參照MDN的官方文檔护蝶。
四华烟、使用默認(rèn)值
對(duì)仍然沒有值的屬性,使用默認(rèn)值
以width屬性為例持灰,默認(rèn)值可以在MDN官方文檔中查詢到盔夜。所有的屬性值都有自己的默認(rèn)值。
所以經(jīng)歷以上四個(gè)步驟后,該元素的所有CSS屬性的值都會(huì)計(jì)算完畢
看一個(gè)經(jīng)典的面試題
先明確一點(diǎn)就是color屬性是可以被繼承的
面試題:下圖中a標(biāo)簽中文字的顏色是什么喂链?
如果你對(duì)于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)簽不是