CSS三大特性(繼承、優先級、層疊)之個人見解


首先聲明一下CSS三大特性——繼承、優先級和層疊。繼承即子類元素繼承父類的樣式,比如font-size,font-weight等f開頭的css樣式以及text-align,text-indent等t開頭的樣式以及我們常用的color。簡單的就不演示了,強調一下font-size這個東東(雖然也有繼承,但是標簽不同繼承的效果也不一樣),比如下面的代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .fonts {
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div class="fonts">
        <p id="p">我的字體大小為20px</p>
        <h1 id="h1">我的字體大小為40px</h1>
    </div>
</body>
</html>

我給p和h1標簽的父元素div設一個font-size為20px,p沒有問題,繼承了div的20px,但h1卻變為了40px,我們從下面的JS代碼可以獲取。

為什么h1會是40px呢?因為h1的默認樣式為2em(32px),如下圖

並且h1默認的font-size為200%,因為div設了20px,所以通過繼承h1的最終font-size為20*2=40px,要想使h1的標簽字體大小也等於父標簽div,只需設置h1 {font-size:100%;},如下圖所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .fonts {
            font-size: 20px;
        }
        h1 {
            font-size: 100%;
        }
    </style>
</head>
<body>
    <div class="fonts">
        <p id="p">我的字體大小為20px</p>
        <h1 id="h1">我的字體大小為20px</h1>
    </div>
</body>
</html>

下面我們再一起聊聊優先級這玩意,

!important > 行內樣式>ID選擇器 > 類選擇器 > 標簽 > 通配符 > 繼承 > 瀏覽器默認屬性

額,好像有點復雜。那我們通過以下幾個例子來證明吧。

方法——先看選擇器是否命中對應的標簽,命中后再根據權重來進行判斷,權重的意思是數標簽的數量,通過比較ID 類 標簽 這三種選擇器的數量來決定誰的優先級最高。當數量相同時,通過層疊(后者覆蓋前者)來決定。

 

 

最后顯示綠色,因為雖然!important優先級最高,但是沒有繼承性,li的顏色繼承自ul.

答案是yellow,因為三者都可以命中元素,所以通過權重判斷,第一個沒有ID選擇器PASS掉,第二個和第三個一樣,通過層疊(第三覆蓋第二)決定顏色。

html是一個嵌套了12個div的復雜盒子,最里面的div有me這個類,判斷方法:都可以命中元素,所以通過權重,類選擇器>元素選擇器,所以選擇blue.

都可以命中對應元素,權重第一個大於第二個(比較標簽選擇器數量),顯示blue.

先通過是否命中對應元素排除第四和第五個樣式,然后根據權重比較一二三——第一個: 兩個ID ;第二個:一個ID一個類;第三個:兩個類。所以根據權重ID>類 ,最后顯示blue.

 

 

答案是blue,第二個沒有命中PASS掉,第一個和第三個比較權重,由於第一個沒有類,所以答案是blue。

最后總結一下優先級、層疊與權重的關系——

層疊是css的一個特性,如果兩個相同的屬性作用於同一標簽,它們會發生層疊。如果多個復合選擇器,同時作用於我們的同一標簽,優先級就不好計算了,就要計算權重,通過比較權重,來先出優先級最高的選擇器。

如何計算權重:

(數標簽的數量)先數id,如果id相等再數類如果id不相等id多的選擇器權重高,權重越高,優先級越高。如果id選擇器數量相同,再數類選擇器,最后數標簽。

注意:比較權重的時候一定要注意:我們的選擇器一定要命中對應的標簽才可能讓標簽擁有對應的屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM