1. 程式人生 > >CSS3新增選擇器示例-偽類選擇器

CSS3新增選擇器示例-偽類選擇器

一. 偽類選擇器介紹

1.1 首先了解下什麼是類選擇器

類選擇器語法:.類名

也就是標籤的class屬性值

示例程式碼

<!DOCTYPE html>
<html>
<head>
    <title>css3中選擇器示例</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*通過標籤選擇器給div設定寬、高,文字對其方式*/
        div {
            width
: 300px
; height:200px; text-align: center; color: white; line-height: 200px; margin-top: 10px; }
/*② 通過類選擇器給兩個div設定樣式*/ .div1 { background-color: black; } .div2 { background-color: red
; }
</style> </head> <body> <!--① 首先,定義兩個div標籤,並設定class屬性,值分別是div1和div2--> <div class="div1">我是div1標籤</div> <div class="div2">我是div2標籤</div> </body> </html>

執行結果
這裡寫圖片描述

1.2 偽類選擇器

① 上面簡單的介紹了類選擇器,那麼偽類選擇器與類選擇器之間,有什麼關係呢?

  答:沒什麼關係。

② 為什麼說沒關係呢?

  首先,類選擇器的語法是.類名, 類名是使用者自定義的,類選擇器定義的樣式,

  我們在標籤的class屬性中可以直接通過定義的類名直接使用。

  偽類選擇器的語法是固定的,例如:E:hover (E代表選擇器,可以是類選擇器,標籤選擇器)

二. CSS3中新增的偽類選擇器示例介紹

1. E:first-child

獲取某元素(E)的父元素的第一個子元素

例1:

<!DOCTYPE html>
<html>
<head>
    <title>示例程式碼1</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*② 通過li標籤獲取該元素的父元素下的第一個子元素,將該元素的內容的文字顏色,設定為紅色*/
        li:first-child {
            color: red;
        }
    </style>
</head>
<body>
    <!--① 定義一個無序列表-->
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>
</body>
</html>

執行結果
這裡寫圖片描述

例2:

<!DOCTYPE html>
<html>
<head>
    <title>示例程式碼2- 通過類選擇器獲取</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*② 通過類名選擇器找到指定元素,獲取該指定元素的父元素下的第一個子元素,將該元素的內容的文字顏色,設定為紅色*/
        .li1:first-child {
            color: red;
        }
    </style>
</head>
<body>
    <!--① 定義一個無序列表-->
    <ul>
        <li>1</li>
        <li class="li1">2</li>
        <li>3</li>
        <li>4</li>
        <li>5</li>
        <li>6</li>
    </ul>
</body>
</html>

執行結果
這裡寫圖片描述

示例程式碼2失敗原因

要設定的第一個子元素,沒有沒有設定class=’li1’

如果是指定標籤選擇器,那麼指定的標籤也應該是與標籤選擇器的標籤名相同

這裡寫圖片描述

例3

<!DOCTYPE html>
<html>
<head>
    <title>示例程式碼3- 通過類選擇器獲取</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*找到h2標籤的父標籤div下的第一個元素*/
        h2:first-child {
            color: red;
        }
    </style>
</head>
<body>

    <div>
        <p>第一段文字</p>
        <p>第二段文字</p>
        <p>第三段文字</p>
        <p>第四段文字</p>
        <h2>第五段文字</h2>
    </div>
</body>
</html>

執行結果
這裡寫圖片描述

失敗原因

例3中,我們是通過h2標籤找到的父標籤下的第一個元素。
① 如果是通過標籤選擇器查詢,那麼指定的標籤要與查詢的標籤,標籤名要相同
② 如果是類選擇器,那麼指定的要與查詢的要有相同的類名

改正後執行結果
這裡寫圖片描述

2. E:last-child

獲取最後一個子元素,與E:first-child用法相同。

3. E:nth-child(n) 用法

獲取第 n 個子元素

例1

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*找到ul標籤下的li標籤的父元素下的第七個子元素(有點繞口)*/
        ul>li:nth-child(4) {
            color: red;
        }
    </style>
</head>
<body>

<ul>
    <li>第一個子元素</li>
    <li>第二個子元素</li>
    <li>第三個子元素</li>
    <li>第四個子元素</li>
    <li>第五個子元素</li>
    <li>第六個子元素</li>
    <li>第七個子元素</li>
    <li>第八個子元素</li>
</ul>

</body>
</html>

這裡寫圖片描述

例2:

如果是n 值為 小於 1 或 超出指定元素的兄弟元素個數,會出現什麼狀況?

這裡寫圖片描述

這裡寫圖片描述

例3:

這裡寫圖片描述

總結:

從上面三個例子可以看出

① n 是從 1 開始計算的,小於 1 或 大於兄弟元素個數,都不會生效

② E 與 選中的第 n 個元素,如果 E 是 標籤,那麼 n 所指向的元素要與 E 是相同的標籤

4. E:nth-child(an + b) 用法

nth-child(2n - 1) 與 nth-child(n) 中 n 所表示的意義不同

nth-child(n) 中的 n 表示的是 第幾個元素,值從 1 開始

nth-child(an + b) 中的 n 代表 從 0 開始,依次遞增的自然數
0, 1, 2, 3, 4….

通過下面的例子來具體說明

例1

給無序列表下的奇數個子元素的字型顏色設定為紅色

示例程式碼

<!DOCTYPE html>
<html>
<head>
    <title>將無序列表的所有偶數為子元素字型顏色設定為紅色</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        li:nth-child(2n - 1) {
            color: red;
        }
    </style>
</head>
<body>

<ul>
    <li>第一個元素</li>
    <li>第二個元素</li>
    <li>第三個元素</li>
    <li>第四個元素</li>
    <li>第五個元素</li>
    <li>第六個元素</li>
    <li>第七個元素</li>
    <li>第八個元素</li>
</ul>

</body>
</html>

執行結果

這裡寫圖片描述

總結:

上例的nth-child(2n -1)
可以理解成一個for迴圈
for(var n = 0; ; n++) {
    var w = 2n - 1;
    if(w > 8) { // 8 就是li的個數
    break;
    }else {
    nth-child(w);
    }
}

注意: 當a的值為正整數是,2n - 1 的最大值不能超過li的個數也就是 8

第一次: n = 0  2n-1=-1 小於8成立 執行nth-child(-1) -1 < 1 執行無效果
第二次: n = 1  2n-1= 1 小於8成立 執行nth-child(1) 將第一個元素文字顏色設定為紅色
....
第六次: n = 5  2n-1= 9 大於8 停止迴圈

此時,頁面上顏色改變的就只有第1,3,5,7個元素

例2

給無序列表前五個元素的文字顏色設定為紅色

示例程式碼

<!DOCTYPE html>
<html>
<head>
    <title>給無序列表的前五個元素文字顏色設定為紅色</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style>
        /*
            a = -2 為負數,取開最小值, an + b 的最小值不能小於 1
            第一次: n = 0  -1*0 + 5 = 5  5 > 1 執行nth-child(5)
            第二次:  n = 1  -1*1 + 5 = 4  4 > 1 執行nth-child(4)
            第三次: n = 2  -1*2 + 5 = 3  3 > 1 執行nth-child(3)
            第四次: n = 3  -1*3 + 5 = 2  2 > 1 執行nth-child(2)
            第四次: n = 4  -1*4 + 5 = 1  1 = 1 執行nth-child(1)
            第四次: n = 5  -1*4 + 5 = 0  0 < 1 結束,停止執行
        */
        li:nth-child(-1n + 5) {
            color: red;
        }
    </style>
</head>
<body>

<ul>
    <li>第一個元素</li>
    <li>第二個元素</li>
    <li>第三個元素</li>
    <li>第四個元素</li>
    <li>第五個元素</li>
    <li>第六個元素</li>
    <li>第七個元素</li>
    <li>第八個元素</li>
</ul>

</body>
</html>

執行結果

這裡寫圖片描述

注意:nth-child(an + b) 的寫法是固定的,順序不能顛倒,如寫成如下情況

這裡寫圖片描述

以上三例總結

① nth-child(an + b) 的寫法是固定的,不能顛倒,寫成nth-child(b + an)無效

② 當a 為正數時,an + b 的最大值為所有子元素的個數,超過該值n 就停止遞增

③ 當a 為負數時, an + b 的最大值,不能小於 1, 小於1 ,n 停止遞增

5. E:nth-child(even)

選中所有的偶數元素
這裡寫圖片描述

6.nth-child(odd)

選中所有的奇數元素
這裡寫圖片描述