### css選擇器中:first-child與:first-of-type的區別
>#### 1.first-child
:first-child選擇器是css2中定義的選擇器,從字面意思上來看也很好理解,就是第一個子元素。比如有段代碼:
```
<div>
<p>第一個子元素</p>
<h1>第二個子元素</h1>
<span>第三個子元素</span>
<span>第四子元素</span>
</div>
```
`p:first-child` 匹配到的是p元素,因為p元素是div的第一個子元素;
`h1:first-child ` 匹配不到任何元素,因為在這里h1是div的第二個子元素,而不是第一個;
`span:first-child` 匹配不到任何元素,因為在這里兩個span元素都不是div的第一個子元素;
`:first-child` 匹配到的是p元素,因為在這里div的第一個子元素就是p。
>#### 2.first-of-type
然后,在css3中又定義了:first-of-type這個選擇器,這個跟:first-child有什么區別呢?還是看那段代碼:
```
<div>
<p>第一個子元素</p>
<h1>第二個子元素</h1>
<span>第三個子元素</span>
<span>第四子元素</span>
</div>
```
`p:first-of-type` 匹配到的是p元素,因為p是div的所有為p的子元素中的第一個,事實上這里也只有一個為p的子元素;
`h1:first-of-type` 匹配到的是h1元素,因為h1是div的所有為h1的子元素中的第一個,事實上這里也只有一個為h1的子元素;
`span:first-of-type` 匹配到的是第三個子元素span。這里div有兩個為span的子元素,匹配到的是第一個。
`:first-of-type` 匹配到的是p元素
--------------------
**所以,通過以上兩個例子可以得出結論:**
`:first-child`
匹配的是某父元素的第一個子元素,可以說是結構上的第一個子元素。
`:first-of-type`
匹配的是該類型的第一個,類型是指什么呢,就是冒號前面匹配到的東西,比如 `p:first-of-type`,就是指所有p元素中的第一個。這里不再限制是第一個子元素了,只要是該類型元素的第一個就行了,當然這些元素的范圍都是屬于同一級的,也就是同輩的。
同樣類型的選擇器 :
`last-child` 和 `:last-of-type`、
`:nth-child(n) ` 和 `:nth-of-type(n)`
也可以這樣去理解。
- 空白目錄
- 1. css選擇器
- 1.1 基礎選擇器
- 1.2 偽類
- 1.3 first-child與:first-of-type的區別
- 1.4 nth-child(:not())與nth-of-type(:not())
- 1.5 屬性選擇器
- 2. html標簽分類&css樣式繼承
- 2.1 html標簽分類
- 2.2 樣式繼承
- 2.3 font
- 3. css動畫
- 1. transition
- 2. animation
- 4. 布局位置方面
- 4.1 實現圖片左右垂直居中
- 4.2 父元素中第一個子元素margin-top無效問題
- 4.3 position定位
- 5. 關于浮動
- 5.1 浮動的呈現效果
- 5.2 清除浮動的三種方式
- 5.3 inline-block與block浮動的對比
- 6. 彈性布局
- 7. border
- 7.1 添加border不影響盒子大小的三種方式
- 7.2 利用border畫三角形
- 8. css預處理--sass
- 8.1 變量
- 8.2 嵌套
- 8.3 導入SASS文件
- 8.4 靜默注釋
- 8.5 混合器@mixin
- 8.6 繼承@extend
- 8.7.function
- ! element語法
- 9. grid 布局
- 10. filedset 使用
- css面試題
- 1.題目匯總
- 2.回流(重排)和重繪
- 3.瀏覽器渲染流程
- 4.水平垂直居中
- 5.flex布局