1. 程式人生 > 其它 >css偽類選擇器匹配第N個li元素

css偽類選擇器匹配第N個li元素

1. 結構偽類選擇器

作用:根據元素在html中的結構關係查詢元素

場景:用於查詢某父級選擇器中的子元素

E:first-child{}  匹配父元素中第一個子元素,並且時E元素
E:last-child{}   匹配父元素中最後一個子元素,並且時E元素
E:nth-child(n){}   匹配父元素中第n個子元素,並且時E元素
E:nth-last-child(n){} 匹配父元素中倒數第n個子元素,並且時E元素

n為0,1,2,3,4,5,6....
偶數  2n  even
奇數  2n+1  2n-1 odd
找到前5個    -n+5
找到從第5個往後   n+5

1.1 匹配第一個li元素 (first-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>
        /* 選擇第一個li */
        li:first-child{
            background-color: green;
        }
    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.2 匹配最後一個li元素 (last-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>
        /* 選中最後一個li */
        li:last-child {
            background-color: red;
        }
    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.3 匹配第3個li元素(nth-child)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>
        /* 選中第三個li */
        li:nth-child(3) {
            background-color: blue;
        }
    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.4 匹配前5個li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>
        /* 選中前五個 */
        li:nth-child(-n+5) {
            background-color: aqua;
        }
    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.5 匹配偶數行 / 奇數行 的li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>

       /* 選中偶數行 */
       li:nth-last-child(odd) {
           background-color: aqua;
       }

       /* 選中奇數行 */
       li:nth-last-child(even) {
           background-color: brown;
       }
    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.6 匹配第n個li元素後所有的li元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>結構偽類選擇器</title>
    <style>
        /* 選中第五開始的li */
        li:nth-child(n+5) {
            background-color: aqua;
        }
     

    </style>
</head>
<body>
    <ul>
        <li>這是第1個li</li>
        <li>這是第2個li</li>
        <li>這是第3個li</li>
        <li>這是第4個li</li>
        <li>這是第5個li</li>
        <li>這是第6個li</li>
        <li>這是第7個li</li>
        <li>這是第8個li</li>
    </ul>
</body>
</html>

1.7 匹配第一個li元素下的第三個a標籤

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>匹配父元素中倒數第n個子元素後所有的該子元素</title>
    <style>
        li:first-child a:nth-child(3) {
            color: aqua;
            background-color: yellow;
        }
    </style>
</head>

<body>
    <ul>
        <li>
            <a href="#">這是第1個li元素的第一個a標籤</a>
            <a href="#">這是第1個li元素的第二個a標籤</a>
            <a href="#">這是第1個li元素的第三個a標籤</a>
            <a href="#">這是第1個li元素的第四個a標籤</a>
            <a href="#">這是第1個li元素的第五個a標籤</a>
            <a href="#">這是第1個li元素的第六個a標籤</a>

        </li>
        <li><a href="#">這是第2個a標籤</a></li>
        <li><a href="#">這是第3個a標籤</a></li>
        <li><a href="#">這是第4個a標籤</a></li>
        <li><a href="#">這是第5個a標籤</a></li>
        <li><a href="#">這是第6個a標籤</a></li>
        <li><a href="#">這是第7個a標籤</a></li>
        <li><a href="#">這是第8個a標籤</a></li>
    </ul>
</body>

</html>

2.偽元素

一般頁面中的非主體內容可以使用偽元素

元素:html設定的標籤 <標籤名></標籤名>

偽元素:由css模擬出的標籤效果

::before  在父元素內容的前面新增一個偽元素
::after   在父元素內容的最後新增一個偽元素

注意:

必須設定content屬性才能生效

偽元素預設是行內元素

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>偽元素</title>
    <style>
        .father::before {
            /* content屬性必須新增  否則偽元素不生效 */
            content: '老鼠';
            color: red;
        }

        .father::after {
            content: '大米';
            color: green;
            /* 預設是行內元素  寬高不生效 */
            /* width: 1000px; */
            background-color: yellow;
            /* display: block; */
        }
    </style>
</head>
<body>
    <!-- 老鼠愛大米 -->
    <div class="father">愛</div>
</body>
</html>

3.標準流

標準流:又稱為 文件流,標籤預設的排版規則

常見的標準流排版規則:

1:塊級元素:從上往下,垂直佈局,獨佔一行

2:行內元素 或行內塊元素 : 從左往右,水平佈局 空間不夠自動折行

4.浮動

浮動的作用:讓垂直佈局的盒子變成水平佈局; 比如一個在左,一個在右

float:left;
left   左浮動
right  右浮動

4.1 特點

-1:浮動元素會脫離標準流.在標準流中不佔位置

-2:浮動元素比標準流多半個級別,可以覆蓋標準流中的元素

-3:浮動找浮動,下一個浮動元素會在上一個浮動元素後面左右浮動

-4:浮動元素有特殊的顯示效果

  • 一行可以顯示多個
  • 可以設定寬高

注意點:浮動的元素不能通過text-align:center或者margin:0 auto;

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮動</title>
    <style>
        /*  浮動的標籤  頂對齊 */
        /*  浮動:在一行排列  寬高生效--浮動後的標籤具有行內塊特點 */
        .one {
            width: 100px;
            height: 100px;
            background-color: red;
            float: left;
        }

        .two {
            width: 200px;
            height: 200px;
            background-color: green;
            float: left;
            /* 因為有浮動 ,不能生效   盒子無法水平居中 */
            margin: 0 auto;
        }

        .three {
            width: 300px;
            height: 300px;
            background-color: blue;
        }
    </style>
</head>

<body>
    <div class="one">one</div>
    <div class="two">two</div>
    <div class="three">three</div>
</body>

</html>

4.2 浮動案例

5.清除浮動

子元素浮動了,此時子元素不能撐開標準流的塊級父元素

方法

1直接設定父元素的高度

優點:簡單方便

缺點:有些佈局不能固定父元素高度

2:額外標籤法

在父元素內的最後新增一個塊級元素,給新增的塊級元素設定clear:both

缺點:會在頁面中新增額外的標籤,會讓頁面html結構變得複雜

3:偽元素清除法【推薦使用】

用偽元素替代了額外標籤

.clearfix::after{
   content:'';
   display:block;
   clear:both;
   
   height:0;
   visibility:hidden;  
}

優點:專案中使用,直接給標籤加類即可清除浮動

4:給父元素設定overflow:hidden

優點:方便