css选择器中:first-child与:first-of-type的区别
2016-01-07 14:54
597 查看
:first-child选择器是css2中定义的选择器,从字面意思上来看也很好理解,就是第一个子元素。比如有段代码:
![](http://images.cnitblog.com/blog/130623/201402/261609103381767.png)
p:first-child 匹配到的是p元素,因为p元素是div的第一个子元素;
h1:first-child 匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;
span:first-child 匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;
然后,在css3中又定义了:first-of-type这个选择器,这个跟:first-child有什么区别呢?还是看那段代码:
![](http://images.cnitblog.com/blog/130623/201402/261609112053896.png)
p:first-of-type 匹配到的是p元素,因为p是div的所有类型为p的子元素中的第一个;
h1:first-of-type 匹配到的是h1元素,因为h1是div的所有类型为h1的子元素中的第一个;
span:first-of-type 匹配到的是第三个子元素span。这里div有两个为span的子元素,匹配到的是它们中的第一个。
所以,通过以上两个例子可以得出结论:
:first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。
:first-of-type 匹配的是某父元素下相同类型子元素中的第一个,比如 p:first-of-type,就是指所有类型为p的子元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了。
同样类型的选择器 :last-child 和 :last-of-type、:nth-child(n) 和 :nth-of-type(n) 也可以这样去理解。
![](http://images.cnitblog.com/blog/130623/201402/261609103381767.png)
p:first-child 匹配到的是p元素,因为p元素是div的第一个子元素;
h1:first-child 匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;
span:first-child 匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;
然后,在css3中又定义了:first-of-type这个选择器,这个跟:first-child有什么区别呢?还是看那段代码:
![](http://images.cnitblog.com/blog/130623/201402/261609112053896.png)
p:first-of-type 匹配到的是p元素,因为p是div的所有类型为p的子元素中的第一个;
h1:first-of-type 匹配到的是h1元素,因为h1是div的所有类型为h1的子元素中的第一个;
span:first-of-type 匹配到的是第三个子元素span。这里div有两个为span的子元素,匹配到的是它们中的第一个。
所以,通过以上两个例子可以得出结论:
:first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。
:first-of-type 匹配的是某父元素下相同类型子元素中的第一个,比如 p:first-of-type,就是指所有类型为p的子元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了。
同样类型的选择器 :last-child 和 :last-of-type、:nth-child(n) 和 :nth-of-type(n) 也可以这样去理解。
相关文章推荐
- css3-过渡动画效果
- 网页模仿
- 简单介绍CSS设置打印页面的方法及css里media的使用
- JS实现动态加载CSS和JS文件
- css3-动画样式
- css菜单样式反转
- css3-对齐、分类、导航栏
- 七个你可能不了解的CSS单位
- [学习记录][css]值与单位(em)
- 自定义圆环样式
- CSS中样式 display 属性 inline,block及inline-block
- css中zoom的作用
- css3 -- 自动生成序号(不使用JS,可任意排序)
- css:选择器
- 如何在浏览器控制台(console)里输出彩色样式调试信息
- CSS3第三日--动画
- div左边固定、右边自适应 和 上边固定、下边自适应
- CSS中的选择器优先级考虑
- css定位在屏幕固定位置
- css:清除浮动 overflow