ul :nth-child(n+7):nth-child(-n+8){
background-color: #CCC;
上面這樣的選取方式等於是順便講解了 選取特定區間物件 的方式,你可以狠狠的點擊這邊看畫面
間隔跳位選取物件
一開始我們講到了公式,事實上 :nth-child 最棒且最強大的地方就在於他的公式選取了,例如我們可以每隔三個就選取一個物件,這很像是迴圈在做的事情對吧! 不多說先看效果先
<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>
width: 500px;
margin: 100px auto;
border: 1px solid #888;
padding: 3px;
margin: 3px 0;
font-size: 30px;
ul :nth-child(3n){
background-color: #CCC;
你可以點擊這邊看畫面,結果就是每三個裡面的第三個會被選取,如果你要每4個裡面的第4個被選取到的話,那就是直接在括號內寫 4n,是不是非常的簡單呢。
間隔選取原理
在上個例子中我們可以利用簡單的公式達到間隔選取的目的,但原理到底是甚麼? 讓我們來看一下數學公式吧! 不!!! 別折磨我了,我自小家境清寒數學不好(謎:兩者有何關聯?),好不容易長大脫離數學的魔掌了,現在又要回去看公式,哪招啦?!別害怕! 我們只需要知道四則運算中的三個「加/減/乘」就夠了,這都是我們平日就在用的數學運算喔。
公式分解前段
括號內的公式an+b由四個項目組成,其中 a 與 b 是可以自訂的數值,而 + 則是可變更的運算符號 ( 運算子 ),至於 n 則是一個固定且不不可更改由 0 開始的遞增數列。
除了上述的公式分解外,此外我們又可以把公式拆成兩大部分,an 指的是 a乘n 的意思,所以綜合上面一開始所講的 n 所代表的意義,我們就能像下面這樣來解釋
3n 指的是 3 乘 n,而 n 是個由0開始的固定數列 ( 就是 0123456789...n),我們就可以得到下列結果清單
3 x 0 = 0
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
以此類推繼續計算下去
上面清單中最右側的 0、3、6、9、12 就是我們得到的結果,也就是會被選取到的物件順序了,所以 :nth-child(3n) 可以讓我們選取到第3個、第6個、第9個、第12個...不斷選下去,
公式分解後段
上面講述了公式前段的原理,接下來來看公式an+b後段的 +b 的部分,其中 + 號是可以被變更為 - 號,也就是跟前段公式搭配起來之後,要取得的計算結果,所以假如前段是 3n 後段是 +1 的話,我們就能夠取得以下結果清單
3 x 0 + 1 = 1
3 x 1 + 1 = 4
3 x 2 + 1 = 7
3 x 3 + 1 = 10
3 x 4 + 1 = 13
以此類推繼續計算下去
如果我們把 + 號改成 - 號的話,:nth-child(3n-1) 就能得到以下清單。
3 x 0 - 1 = -1
3 x 1 - 1 = 2
3 x 2 - 1 = 5
3 x 3 - 1 = 8
3 x 4 - 1 = 11
以此類推繼續計算下去
看完公式的分析之後,這時候我們就能進一步的來看公式可以怎樣的變化,在公式中我們可以運用 ab 兩值的賦值與否來增加變化,所以就會有以下幾種公式變化
-an+b
上面這一堆公式很有趣眼花吧,千萬不要被這一堆公式嚇到了,而眼尖的你應該會發現最後一個公式沒講過的樣子,其實不是沒講過,只是 Amos 沒有提到 a 也可以是負值罷了。
事實上這一堆公式中,還能繼續分析下去,但是為了節省時間,我們還是先把比較常用的提出來就好,實際上我們在專案中比較常用到的大概就是 an+b 比較多,所以真的別被這一堆公式嚇傻了,放心!
實際應用與計算技巧
在多數的專案中,我們比較常用到的大概就是奇數 ( odd )、偶數 ( even ) 及倍數 ( an ) 這三個項目的選取,像是 3n 其實就是 3 的倍數,4n 就是 4 的倍數,就這麼簡單,要增加變化的則是多一個 倍數中的特定數 這個項目,如果說我們要選取到 3 個裡面的第 2 個項目的話,我們就能夠直接寫 3n+2,如果我們要選取到 3 個裡面的第 1 個的話,我們就寫 3n+1,根本連算都不用算啊,一眼就能看出來我要選哪個啦。
表格色彩的應用
為了讓各位更加清楚 倍數中的特定數 這個選取技巧,就讓我們用表格來看看這個選取方式吧,以下 HTML 是一個很單純 3 欄 9 列的資料表格
<table>
<tbody>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
<td>資料</td>
</tbody>
</table>
如果我希望讓他每隔 3 橫列就能有一整個列的色彩,那我的 CSS 可以這樣寫
table tr:nth-child(3n){
background-color: #ccc;
如果我希望讓他每 3 橫列中的第 1 列有一整列的色彩,那我 CSS 可以這樣寫
table tr:nth-child(3n+1){
background-color: #ccc;
如果我希望讓他每 3 橫列中的第 2 列有一整列的色彩,那我 CSS 可以這樣寫
table tr:nth-child(3n+2){
background-color: #ccc;
是不是計算變的超級簡單了呢! (是根本不用計算了吧)
對了! 我是不是忘了講 :nth-last-child() 是做甚麼的了? 恩......簡單來說,跟 :first-child 以及 :last-child 一樣,:nth-child 是從前面開始選,而 :nth-last-child 是從結尾開始選,就這樣的差別而已,這應該不需要特地花時間解釋了吧^^
以上就是今天的 金魚都能懂的 CSS 選取器 - :nth-child - 你覺得燒腦但其實根本不燒腦的選取器,如果文中描述有誤歡迎各位前輩不吝指正,各位金魚我們明天見~
金魚都能懂的教學系列
金魚都能懂的網頁設計入門 - 金魚都能懂了你還怕學不會嗎 系列
金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎 系列
金魚都能懂的 CSS 選取器 - 金魚都能懂了你還怕學不會嗎 系列
鐵人雙主題挑戰中,歡迎訂閱一波
金魚都能懂的這個網頁畫面怎麼切
立刻訂閱 CSS可樂的網站/頻道享受精彩文章
Line搜尋「@CSScoke」加入CSS可樂公開帳號,可以收到 Amos 第一手資訊喔
CSS 可樂部落格
CSS coke 的 Youtube 直播頻道
快按此訂閱 CSS coke 的頻道接收最新教學