1. 程式人生 > >css3 - 選擇器first-child、last-child、nth-child、nth-last-child、nth-of-type

css3 - 選擇器first-child、last-child、nth-child、nth-last-child、nth-of-type

https://blog.csdn.net/erdouzhang/article/details/70842177

最近系統專案,遇到較多表格 和 div 需要根據 寫樣式的

1.first-child(IE7相容)、last-child(IE8不相容)
 
html:

<body>
  <h2>列表</h2>
  <ul>
    <li>列表專案1</li>
    <li>列表專案2</li>
    <li>列表專案3</li>
    <li>列表專案4</li>
  </ul>
</body>

css:

<style>
    ul {list-style: none;}
    li:first-child {/*給第一個列表專案設定樣式 相容IE7*/
      background-color: pink;
    }
    li:last-child { /*給最後一個列表專案設定樣式 IE8不相容*/
      background-color: red;
    }
</style>

解析: 
一個頁面中無論有幾個ul列表,只要設定first-child、last-child,那麼所有ul列表項的第一個和最後一個列表專案都會有設定的樣式。

2.nth-child、nth-last-child (IE8不相容)


html:

<body>
  <h2>列表</h2>
  <ul>
    <li>列表專案1</li>
    <li>列表專案2</li>
    <li>列表專案3</li>
    <li>列表專案4</li>
    <li>列表專案5</li>
    <li>列表專案6</li>
  </ul>
</body>

css:

<style>
    ul {list-style: none;}    
    li:nth-child(3) { /*表示li元素中,第三個元素 IE8不相容*/
      background-color: pink;
    }
    li:nth-last-child(2) { /*表示li元素中,倒數第二個元素 IE8不相容*/
      background-color: red;
    }
</style>

3.對奇數、偶數使用樣式


html:

<ul>
    <li>列表專案1</li>
    <li>列表專案2</li>
    <li>列表專案3</li>
    <li>列表專案4</li>
    <li>列表專案5</li>
    <li>列表專案6</li>
</ul>

css:

<style>
    ul {list-style: none;}
    li:nth-child(odd) {/*表示li元素中,從1開始 奇數為pink*/
      background-color: pink;
    }
    li:nth-child(even) {/*表示li元素中,從1開始 偶數為灰色*/
      background-color: #ccc;
    }
</style>

解析: li:nth-child(odd)含義:li的父元素ul的兒子中,從1開始數,奇數兒子設定樣式為xxx; 
當父元素為列表時,因為只有列表專案一種子元素,不會出現問題;當父元素是div時,就不止一種子元素,會引起問題。如下: 
例如:設定div元素中為奇數標題h2背景顏色

html:

<div>
    <h2>文章標題A</h2>
    <p>我是一個小段落。。。</p>
    <h2>文章標題B</h2>
    <p>我是一個小段落。。。</p>
    <h2>文章標題C</h2>
    <p>我是一個小段落。。。</p>
    <h2>文章標題D</h2>
    <p>我是一個小段落。。。</p>
</div>

css:

h2:nth-child(odd) {
      background-color: pink;
}

執行結果為: 


解析: h2:nth-child(odd)含義是:h2的父元素div 的所有兒子中 為奇數的兒子 設定背景顏色;而不是所有h2中為偶數的h2設定樣式; 
解決方法: nth-of-type可以避免則會中問題產生

4.nth-of-type(IE8不相容):只針對同類型的元素進行計算


css:

h2:nth-of-type(odd) { /*所有h2標籤中為奇數的設定樣式*/
    background-color: pink;
}
h2:nth-of-type(even) { /*所有h2標籤中為偶數的設定樣式*/
    background-color: #ccc;
}

解析: h2:nth-of-type(odd)含義:在所有h2標籤中,只要是奇數h2就設定樣式;只針對h2標籤,與父元素無關;

 

5、迴圈使用樣式 li:nth-child(4n+1)


html:

<ul>
   <li>列表專案1</li>
   <li>列表專案2</li>
   <li>列表專案3</li>
   <li>列表專案4</li>
   <li>列表專案5</li>
   <li>列表專案6</li>
   <li>列表專案7</li>
   <li>列表專案8</li>
   <li>列表專案9</li>
   <li>列表專案10</li>
   <li>列表專案11</li>
   <li>列表專案12</li>
</ul>

css:

<style>
    ul {list-style: none;}
    li:nth-child(4n+1) { /*表示li元素中,4個li為一組迴圈 第一個li設定為*/
      background-color: red;
    }
    li:nth-child(4n+2) { /*表示li元素中,4個li為一組迴圈 第二個li設定為*/
      background-color: pink;
    }
    li:nth-child(4n+3) {
      background-color: #ccc;
    }

    li:nth-child(4n+4) {
      background-color: yellow;
    }

</style>

解析: 
4n含義:四個li元素為一組迴圈; 
4n+1含義:這一組迴圈中,第一個樣式; 
4n+2含義:這一組迴圈中,第二個樣式;

4n+3含義:這一組迴圈中,第三個樣式; 
4n+4含義:這一組迴圈中,第四個樣式;