天天看點

CSS樣式層疊規則我對CSS樣式層疊規則的總結我的結論與《CSS設計指南》查理版簡單層疊要點有哪些差異(I-C-E)計算特指度我對CSS樣式層疊的一點補充

今天閱讀《CSS設計指南》,裡面提及的查理版簡單層疊要點,發現與自身的驗證結果不一緻,便試着将我得出的結論記錄下來,同時将相關知識總結一下。這隻是一個新手的一點思考,如有謬誤,還請大家指正。另外,本人覺得《CSS設計指南》是一本很好的書籍,此文更多隻是想記錄自己一點獨特的思考,對此書并無意見。

我對CSS樣式層疊規則的總結

0、若本身設定了樣式,則繼承的樣式無效;我認為也可以簡單了解為繼承的特指度為0;

1、!important具有最高權限,隻要聲明中加上這一句,其他樣式都會被層疊;我認為可以簡單了解為其特指度為無窮大;

2、行内式僅次于!important;(這一點與書中所說不一緻)

3、除上面三者外,其餘樣式按照(I-C-E)計算特指度(下文将簡單介紹)。特指度高的層疊特指度低的;

4、同特指度的,後面的層疊前面的樣式。(這一點與書中所說的細節也有點不同)

我的結論與《CSS設計指南》查理版簡單層疊要點有哪些差異

1、書中查理版簡單層疊要點指出特指度更高的樣式層疊其他樣式,包括行内式,真的是這樣嗎?我驗證的結果顯示并非如此。

以下兩塊代碼,按照書中所說,段落應該是藍色,但是結果卻是紅色。事實上我試了各種寫法,均無法層疊行内式(除了!important;)這證明行内式會将特指度更高的樣式層疊,或者說行内式的特指度是僅次于!important。

CSS樣式層疊規則我對CSS樣式層疊規則的總結我的結論與《CSS設計指南》查理版簡單層疊要點有哪些差異(I-C-E)計算特指度我對CSS樣式層疊的一點補充
<style>
        #box1 #box2 #box3 #box4 p.p1 {
            color:blue;
        }
    </style>
           
<div id="box1">
        <div id="box2">
            <div id="box3">
                <div id="box4">
                    <p class="p1" style="color:red">你好我好大家好</p>
                </div>
            </div>
        </div>
    </div>
           

2、《CSS設計指南》的查理版簡單層疊要點指出行内樣式勝過包嵌入樣式,嵌入樣式勝過連結樣式。但我發現這個并不一定。我先寫嵌入式,再寫外鍊式,連結樣式将嵌入式給層疊了。不過這種寫法大概不規範吧。但這說明了同特指度的層疊實際上是按照浏覽器讀取的順序,後讀取的層疊早讀取的,而并非一定是嵌入樣式勝過連結樣式。

CSS樣式層疊規則我對CSS樣式層疊規則的總結我的結論與《CSS設計指南》查理版簡單層疊要點有哪些差異(I-C-E)計算特指度我對CSS樣式層疊的一點補充
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        p.p1 {color:blue;}
    </style>
    <link rel="stylesheet" href="demo.css">
</head>
<body>
    <div id="box4">
        <p class="p1">你好我好大家好</p>
    </div>
</body>
</html>
           

外鍊:

p.p1 { color:purple; }

(I-C-E)計算特指度

即ID權重為100,class權重為10,element标簽權重為1,特指度就是将樣式中選擇器裡用到的id、class、element按權重相加得出的值。

如:p.p1的特指度是1+10=11。

另外:實際上三者權重為1/10/100估計隻是一個友善估算的約值,而非準确值。

例如:12個element+1個class,按照上面的方法計算特指度是22,

而兩個class的特指度是20,但實際上後者的特指度高于前者。

這種極端情況并不常見,在大多數情況下(I-C-E)計算特指度仍然适用。

我對CSS樣式層疊的一點補充

上面總結了我個人認為的層疊規則,關于若本身設定了樣式,則繼承的樣式無效,我覺得可以這樣了解:

這是很自然的呀,長輩給你介紹了一個女孩,而你已經有女朋友了,那肯定是選自己女朋友做老婆更自然一點吧。

終于寫完了人生第一個部落格,試了一下markdown,希望是一個好的開始吧。