CSS3選擇器及優先順序

csu_xiji發表於2020-12-17

1.簡單選擇器

1.1元素選擇器

  根據標籤名來選中指定的元素,如下面的 p 、 h 2 p、h2 ph2,語法就是:標籤名 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p{
                color: blueviolet;
                font-size: 15px;
            }
            h2{
                color:coral;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p>我是一個段落</p>
        <p>我是第二個段落</p>
    </body>
</html>

在這裡插入圖片描述

1.2id選擇器

  根據元素的 i d id id屬性值選中某個元素。注意是某個,而不是多個,因為根據規範,元素 i d id id屬性的值應該是唯一的。語法: # i d \#id #id屬性值 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p{
                color: blueviolet;
                font-size: 15px;
            }
            h2{
                color:coral;
            }
            #red{
                color: red;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p id="red">我是一個段落</p>
        <p>我是第二個段落</p>
    </body>
</html>

在這裡插入圖片描述
  如果想選中多個的話,可以使用接下來介紹的類選擇器。

1.3類選擇器

   c l a s s class class是一個標籤的屬性,他和 i d id id類似,但是值可以重複。類選擇器就是根據 c l a s s class class的值選擇一組元素。語法: . c l a s s .class .class屬性值 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p{
                color: blueviolet;
                font-size: 15px;
            }
            h2{
                color:coral;
            }
            #red{
                color: red;
            }
            .blue{
                color: blue;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p id="red">我是一個段落</p>
        <p class="blue">我是第二個段落</p>
        <p class="blue">我是第三個段落</p>
        <p>我是第四個段落</p>
    </body>
</html>

在這裡插入圖片描述

  而且 h t m l html html元素的 c l a s s class class屬性值可以同時有多個:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p{
                color: blueviolet;
                font-size: 15px;
            }
            h2{
                color:coral;
            }
            #red{
                color: red;
            }
            .blue{
                color: blue;
            }
            .yellow{
                color: yellow;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p id="red">我是一個段落</p>
        <p class="blue">我是第二個段落</p>
        <p class="blue">我是第三個段落</p>
        <p class="blue yellow">我是第四個段落</p>
    </body>
</html>

在這裡插入圖片描述

  比如上面的第 4 4 4個段落,它有兩個 c l a s s class class,且後面類也就是 y e l l o w yellow yellow會覆蓋掉之前類也就是 b l u e blue blue

1.4通配選擇器

  可以選擇頁面內的所有元素。語法: ∗ { } ^*\{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            /* p{
                color: blueviolet;
                font-size: 15px;
            }
            h2{
                color:coral;
            }
            #red{
                color: red;
            }
            .blue{
                color: blue;
            }
            .yellow{
                color: yellow;
            } */
            *{
                color: green;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p id="red">我是一個段落</p>
        <p class="blue">我是第二個段落</p>
        <p class="blue">我是第三個段落</p>
        <p class="blue yellow">我是第四個段落</p>
    </body>
</html>

在這裡插入圖片描述
  這裡要把前面的部分註釋掉才能顯示出這個效果。原因是不同的選擇器的優先順序是不同的。我們稍後會講到。
   A   ∗ A\ ^* A 會選中 A A A元素的所有子元素:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div *{
                color:red;
            }
        </style>
    </head>
    <body>
        <div>
            我是一個div 我有子元素
            <p>11111</p>
            <p>222222</p>
            <p>
                333333
                <ul>
                    <li>a</li>
                    <li>b</li>
                    <li>c</li>
                </ul>
            </p>
            <p>444444</p>
        </div>
        <div>我是一個div 我沒有子元素</div>
    </body>
</html>

在這裡插入圖片描述

2.複合選擇器

2.1交集選擇器

  如果我想要把 c l a s s class class r e d red red d i v div div元素的字型顏色設定為紅色,該怎麼寫呢?之前介紹的簡單選擇器已經不能滿足我們的需求了。我們需要交集選擇器,它可以選擇出滿足所有條件的元素。語法: 選擇器1選擇器2選擇器3…… { } \{\} {}。不過需要注意一點,如果使用了元素選擇器的話,需要以它為開頭。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div.red{
                color:red;
            }
            .a.b.c{
                color:blue;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p>我是一個段落</p>
        <div class="red">我是div</div>
        <p class="a">我是a</p>
        <p class="a b c">我既是a 也是b 還是c</p>
    </body>
</html>

在這裡插入圖片描述

2.2並集選擇器

  如果我想把所有的 p 、 d i v p、div pdiv元素的樣式設定成一樣的,該怎麼辦呢?可以使用並集選擇器,它會選中多個選擇器對應的元素。語法: 選擇器1,選擇器2,…… { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div,p{
                color:red;
            }
        </style>
    </head>
    <body>
        <h1>我是h1標題</h1>
        <h2>我是h2標題</h2>
        <p>我是一個段落</p>
        <div class="red">我是div</div>
        <p class="a">我是a</p>
        <p class="a b c">我既是a 也是b 還是c</p>
    </body>
</html>

在這裡插入圖片描述

3.關係選擇器

  首先了解一下 h t m l html html中的元素關係:
在這裡插入圖片描述

3.1子元素選擇器

  選中指定父元素的指定子元素。語法: 父元素>子元素 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div>span{
                color:red;
            }
        </style>
    </head>
    <body>
        <div>
            我是一個div
            <p>
                我是div中的p元素
                <span>我是p元素中的span元素</span>
            </p>
            <span>我是div元素中的span元素</span>
        </div>
        <span>
            我是div元素的兄弟元素span
        </span>
    </body>
</html>

在這裡插入圖片描述

3.2後代元素選擇器

  選擇指定元素的指定後代元素。語法: 祖先 後代 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div span{
                color:red;
            }
        </style>
    </head>
    <body>
        <div>
            我是一個div
            <p>
                我是div中的p元素
                <span>我是p元素中的span元素</span>
            </p>
            <span>我是div元素中的span元素</span>
        </div>
        <span>
            我是div元素的兄弟元素span
        </span>
    </body>
</html>

在這裡插入圖片描述

3.3選擇下一個兄弟元素

  注意只會選擇下一個。語法:自己+目標兄弟 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div+span{
                color:red;
            }
        </style>
    </head>
    <body>
        <div>
            我是一個div
            <p>
                我是div中的p元素
                <span>我是p元素中的span元素</span>
            </p>
            <span>我是div元素中的span元素</span>
        </div>
        <span>我是div元素的兄弟元素span</span>
        <span>我是div元素的兄弟元素span</span>
        <span>我是div元素的兄弟元素span</span>
    </body>
</html>

在這裡插入圖片描述

  如果該元素的下一個元素不符合要求,那麼依然不會選取。

3.4選擇下面的所有兄弟元素

  語法:自己~目標兄弟 { } \{\} {}

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div~span{
                color:red;
            }
        </style>
    </head>
    <body>
        <span>我是div元素的兄弟元素span</span>
        <div>
            我是一個div
            <p>
                我是div中的p元素
                <span>我是p元素中的span元素</span>
            </p>
            <span>我是div元素中的span元素</span>
        </div>
        <p>我是div元素的兄弟元素P</p>
        <span>我是div元素的兄弟元素span</span>
        <span>我是div元素的兄弟元素span</span>
        <span>我是div元素的兄弟元素span</span>
    </body>
</html>

在這裡插入圖片描述

4.屬性選擇器

  [屬性名] 選擇含有指定屬性的元素:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            [title]{
                color:red;
            }
        </style>
    </head>
    <body>
        <p title>段落一</p>
        <p>段落二</p>
        <p>段落三</p>
        <p>段落四</p>
        <p>段落無</p>
    </body>
</html>

在這裡插入圖片描述

  [屬性名=屬性值] 選擇含有指定屬性和屬性值的元素;[屬性名^=屬性值] 選擇含有指定屬性,且屬性值以指定值開頭的元素;[屬性名$=屬性值] 選擇含有指定屬性,且屬性值以指定值結尾的元素:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            [title=abc]{
                color:red;
            }
            [title^=cde]{
                color:blue;
            }
            [title$=cde]{
                color:green;
            }
        </style>
    </head>
    <body>
        <p title>段落一</p>
        <p title="abc">段落二</p>
        <p title="cdef">段落三</p>
        <p title="bcde">段落四</p>
        <p>段落無</p>
    </body>
</html>

在這裡插入圖片描述

  [屬性名*=屬性值] 選擇含有指定屬性,且屬性值含有指定值的元素:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            [title=abc]{
                color:red;
            }
            [title*=cde]{
                color:blue;
            }
        </style>
    </head>
    <body>
        <p title>段落一</p>
        <p title="abc">段落二</p>
        <p title="cdef">段落三</p>
        <p title="bcde">段落四</p>
        <p>段落無</p>
    </body>
</html>

在這裡插入圖片描述

5.偽類選擇器

  偽類可以理解成不存在的類、特殊的類,它用來描述一個元素的特殊狀態,比如第一個元素、被點選的元素、滑鼠移入移出的元素等。偽類一般情況下使用:開頭,詳情可以看這個連結

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            ul>:first-child{
                color:red;
            }
            ul>li:first-of-type{
                color:blue;
            }
            ul>li:last-child{
                color:green;
            }
        </style>
    </head>
    <body>
        <ul>
            <span>test</span>
            <li>第一個</li>
            <li>第二個</li>
            <li>第三個</li>
            <li>第四個</li>
            <li>第五個</li>
        </ul>
    </body>
</html>

在這裡插入圖片描述

  再舉一個超連結的例子:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            /*
                未訪問過的連結
            */
            a:link{
                color:red;
            }
            /*
                訪問過的連結
            */
            a:visited{
                color:orange;
            }
            /*
                滑鼠移到連結上時
            */
            a:hover{
                color:blue;
            }
            /*
                滑鼠點選連結時
            */
            a:active{
                color:green;
            }
        </style>
    </head>
    <body>
        <a href="https://mp.csdn.net/console/article?spm=1011.2124.3001.5114">這是一個超連結</a>
    </body>
</html>

在這裡插入圖片描述

6.偽元素選擇器

  偽元素表示頁面中一些特殊的並不真實存在的元素,比如第一個字母、第一行等等。它一般使用::開頭。在第5節中,我提供了一個網址,裡面有更加詳細的介紹。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p::first-letter{
                font-size: 30px;
            }
            p::first-line{
                color: red;
            }
        </style>
    </head>
    <body>
        <p>暖國的雨,向來沒有變過冰冷的堅硬的燦爛的雪花。博識的人們覺得他單調,他自己也以為bai不幸否耶?江南的雪,
            可是滋潤美豔之至了;那是還在隱約著的青春的訊息,是極壯健的處子的皮膚。雪野中有血紅的寶珠山茶,白中隱青
            的單瓣梅花,深黃的磬口的臘梅花;雪下面還有冷綠的雜草。</p>
        
        <p>胡蝶確乎沒有;蜜蜂是否來採山茶花和梅花的蜜,我可記不真切了。但我的眼前彷彿看見冬花開在雪野中,有許多蜜
            蜂們忙碌地飛著,也聽得他們嗡嗡地鬧著。</p>

        <p>孩子們呵著凍得通紅,像紫芽姜一般的小手,七八個一齊來塑雪羅漢。因為不成功,誰的父親也來幫忙了。羅漢就塑得
            比孩子們高得多,雖然不過是上小下大的一堆,終於分不清是壺盧還是羅漢;然而很潔白,很明豔,以自身的滋潤相
            粘結,整個地閃閃地生光。</p>

        <p>第二天還有幾個孩子來訪問他;對了他拍手,點頭,嘻笑。但他終於獨自坐著了。晴天又來消釋他的皮膚,寒夜又使他
            結一層冰,化作不透明的模樣;連續的晴天又使他成為不知道算什麼,而嘴上的胭脂也褪盡了。</p>

        <p>是的,那是孤獨的雪,是死掉的雨,是雨的精魂。</p>

    </body>
</html>

在這裡插入圖片描述

7.繼承

  樣式是可以繼承的。我們為一個元素設定的樣式,同時也會應用到它的後代元素中。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            p{
                color:red;
            }
        </style>
    </head>
    <body>
        <p>
            我是p元素
            <span>我是p元素內的span元素</span>
        </p>
    </body>
</html>

在這裡插入圖片描述

  但是不是所有的樣式都會被繼承,背景、佈局相關的等等就不會被繼承。可以通過查閱文件來確定:
在這裡插入圖片描述

8.選擇器的權重

  當我們通過不同的選擇器,選中了一個相同的元素時,就可能會出現樣式衝突。如果發生了衝突,就要通過選擇器的權重來決定最終應用哪個樣式。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            div{
                color:red;
            }
            .blue{
                color:blue;
            }
        </style>
    </head>
    <body>
        <div class="blue">一個div</div>
    </body>
</html>

在這裡插入圖片描述

  關於優先順序的相關介紹可以看這篇文章。這裡直接給出結論:
在這裡插入圖片描述

  權重相同怎麼辦?就近原則(靠下的,也就是後出現的):

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            .blue{
                color:blue;
            }
            .green{
                color:green;
            }
        </style>
    </head>
    <body>
        <div class="blue green">一個div</div>
    </body>
</html>

在這裡插入圖片描述

  或者使用 i m p o r t a n t important important

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>第一個網頁</title>
        <style>
            .blue{
                color:blue !important;
            }
            .green{
                color:green;
            }
        </style>
    </head>
    <body>
        <div class="blue green">一個div</div>
    </body>
</html>

在這裡插入圖片描述

  不過儘量不要使用這個……

相關文章