2014-10-03 65 views
3

它只是我,或者是:first-child:nth-child不符合邏輯的方式?奇怪的行爲爲:第一個孩子和第十八個孩子

如果只是我,請解釋我是如何工作的。

下面是使用的3個例子,我真的不明白:

我的HTML如下:

<div class="footer"> 
    <span class="a">a</span> 
    <div class="b">b</div> 
</div> 

第一個例子:(隱藏b - 類由於某種原因

body .b:first-child { 
    display: none; 
} 

see fiddle

第二個例子:(隱藏b -class出於某種原因

body .b:nth-child(1) { 
    display: none; 
} 

see fiddle

第三個例子:(終於隱藏b - 班級出於某種原因

body .b:nth-child(2) { 
    display: none; 
} 

see fiddle

沒有人有此行爲的合乎邏輯的解釋?

+1

第一個例子:「b」是父容器中的第一個孩子嗎?不,因此它不是隱藏的。在這種情況下,你需要'.b:first-of-type'。第二和第三:b是第一個孩子嗎?不,這是第二個。因此,結果。 – dfsq 2014-10-03 12:39:03

+0

謝謝@dfsq,我看到了[我可以使用](http://caniuse.com/)':nth-​​of-type',':nth-​​last-of-type()',':first-類型',':最後類型',':只有類型'。這似乎是我實際需要使用的那個。 – 2014-10-03 13:58:38

回答

4

first-childnth-child(1)意味着第一節點。 span.a是第一個節點。使用組合選擇器並不重要。 .b不是第一個孩子,所以沒有被選中。

在這種情況下,你可以使用.b:first-of-type因爲divspan是不同的類型,但如果他們都span s表示是行不通的。使用一個額外的選擇像.b也不會有多大效果與第n個孩子選擇除了在同類個案:

<div> 
    <div class=b>b</div> 
</div> 
<div> 
    <div>not b</div> 
</div> 
<div> 
    <div class=b>b</div> 
</div> 

那麼你可能有一個使用了.b:first-child

+0

如果你設置了'b:first-child',只是爲了確定第一個節點是否爲'b',那麼應用這個類。 – DaniP 2014-10-03 12:40:11

+0

謝謝@Explosion Pills。對於那些有這些問題的人,我在[我可以使用](http://caniuse.com/)上找到了以下選擇器':nth-​​of-type',':nth-​​last-of-type()' ,':first-of-type',':last-of-type',':only-of-type'。 – 2014-10-03 14:00:36