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 的頻道接收最新教學