原文連接地址:https://www.cnblogs.com/wangmeijian/p/4562304.htmlhtml
:first-child 選擇器用於選取屬於其父元素的首個子元素的指定選擇器。——w3school字體
嗯,乍一看好像說的不是很明白,所以這個選擇器很容易讓人誤解,一般會有兩種誤解:
誤解一:認爲E:first-child選中E元素的第一個子元素。
誤解二:認爲E:first-child選中E元素的父元素的第一個E元素。spa
你是否是也曾這樣理解這個選擇器或者如今仍然這樣理解?以上兩種理解都是錯誤的,爲了證實上面兩種理解是錯的,看看下面的實例code
<!--誤解一--> <style> div:first-child{color: red;} </style> <div class="demo"> <a>一個連接</a> <a>一個連接</a> <a>一個連接</a> <a>一個連接</a> </div>
效果是這樣的:htm
很明顯,照第一種理解,應該只有第一個a元素字體顏色變紅,然而事實上所有變紅了。blog
<!--誤解二--> <style> div a:first-child{color: red;} </style> <div class="demo"> <p>一個段落</p> <a>一個連接</a> <a>一個連接</a> <a>一個連接</a> <a>一個連接</a> </div>
效果是這樣的:開發
照第二種理解,div裏的第一個a元素字體應該是紅色的,事實證實這種理解也是錯的。ast
OK,正確的理解應該是:只要E元素是它的父級的第一個子元素,就選中。它須要同時知足兩個條件,一個是「第一個子元素」,另外一個是「這個子元素恰好是E」。class
<style> span:first-child{color: red;} p:first-child{color: blue;} /*p元素的父元素的第一個子元素是div而不是p元素,所以該樣式不起做用*/ i:first-child{color: orange;} </style> <div class="demo"> <div>.demo的第一個子元素是div</div> <!--第一個span元素是它的父級P元素的第一個span,顏色變紅色--> <p><span>第一個span</span>第一個段落P<span>第二個span</span></p> <!--第一個i元素是它的父級a元素的第一個i,顏色變橙色--> <p>一個連接<i>第一個i元素</i></p> <!--第二個i元素是它的父級a元素的第一個i,顏色變橙色--> <p>一個連接<i>第二個i元素</i></p> <p>一個連接</p> </div>
效果:im
相似容易誤解的結構選擇器還有:nth-child()、:nth-last-child、:only-child,在平時的開發中須要注意一下。