CSS3的first-child选择器实战攻略


Posted in HTML / CSS onApril 28, 2016

CSS 中的 :first-child Selector 可以选择到特定元素的第一组物件(同一个 parent)
HTML

XML/HTML Code复制内容到剪贴板
  1. <ul>  
  2.     <li>1</li>  
  3.     <li>2</li>  
  4.     <li>3</li>  
  5. </ul>  
  6. <hr>  
  7. <ul>  
  8.     <li>1</li>  
  9.     <li>2</li>  
  10.     <li>3</li>  
  11. </ul>  

CSS

CSS Code复制内容到剪贴板
  1. // 只套用编号 1 的 li   
  2. li:first-child {   
  3.     colorgreen;   
  4. }  

first-child和:first-of-child的区别
假如我们有这样的一段HTML代码:

XML/HTML Code复制内容到剪贴板
  1. <div>  
  2.     <p>第1个元素</p>  
  3.     <h1>第2个元素</h1>  
  4.     <span>第3个元素</span>  
  5.     <span>第4个元素</span>  
  6. </div>  

CSS选择器:
我们要查找其中的元素,如果使用下面的定义方法——
p:first-child  匹配到的是p元素,因为p元素是div的第一个子元素;
h1:first-child  匹配不到任何元素,因为在这里h1是div的第二个子元素,而不是第一个;
span:first-child  匹配不到任何元素,因为在这里两个span元素都不是div的第一个子元素;
:first-child  匹配到的是p元素,因为在这里div的第一个子元素就是p。
上面应用的样式,有两个是匹配不到的,但是别慌张,CSS中还定义了:first-of-child伪类,请看他的用法和讲解:
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) 也可以这样去理解。

IE的兼容型问题
先看如下一段代码,HTML部分:

XML/HTML Code复制内容到剪贴板
  1. <ul class="example">  
  2.     <li>aa</li>  
  3.     <li>bb</li>  
  4.     <li>cc</li>  
  5.     <li>dd</li>  
  6. </ul>  

CSS部分:

CSS Code复制内容到剪贴板
  1. .example li{float:left;margin-left:10px;}  

如果需要将第一个li的margin-left设为0px,则可以通过下面这个方法实现:

CSS Code复制内容到剪贴板
  1. .example li{float:left;margin-left:10px;}   
  2. .example li:first-child{margin-left:0;}  

然而,IE6不支持:child-first方法,因此我们需要使用表达式从来实现IE6也支持:child-first,代码如下:

CSS Code复制内容到剪贴板
  1. .example li{float:leftmargin-left:10px; _margin-left:expression(this.previousSibling==null?'0px':'10px');}   
  2. .example li:first-child{margin-left:0;}  

当然,我们也可以给第一个li添加一个class来重新定义margin-left,如果说是静态页面这样做还可以,如果说程序需要循环输出li的话使用child-first会好些,至少可以使程序少做一条判断。

HTML / CSS 相关文章推荐
CSS3教程:新增加的结构伪类
Apr 02 HTML / CSS
css3 自定义字体font-face使用介绍
May 14 HTML / CSS
CSS3 display知识详解
Nov 25 HTML / CSS
使用CSS3的font-face字体嵌入样式的方法讲解
May 13 HTML / CSS
结合 CSS3 transition transform 实现简单的跑马灯效果的示例
Feb 07 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
Jun 25 HTML / CSS
Html5上传图片 移动端、PC端通用代码
Jun 08 HTML / CSS
IE10 Error.stack 让脚本调试更加方便快捷
Apr 22 HTML / CSS
html5+svg学习指南之SVG基础知识
Dec 17 HTML / CSS
HTML5拖放API实现拖放排序的实例代码
May 11 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
Aug 18 HTML / CSS
HTML+CSS+JavaScript实现图片3D展览的示例代码
Oct 12 HTML / CSS
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
Apr 26 #HTML / CSS
CSS3实现超酷的黑猫警长首页
Apr 26 #HTML / CSS
CSS3实现千变万化的文字阴影text-shadow效果设计
Apr 26 #HTML / CSS
什么是CSS3 HSLA色彩模式?HSLA模拟渐变色条
Apr 26 #HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
Apr 26 #HTML / CSS
CSS3不透明度实例讲解
Apr 26 #HTML / CSS
CSS3弹性盒模型开发笔记(二)
Apr 26 #HTML / CSS
You might like
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
实用函数8
2007/11/08 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
PHP 写文本日志实现代码
2010/05/18 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
2012/01/10 PHP
浅谈php安全性需要注意的几点事项
2014/07/17 PHP
CodeIgniter错误mysql_connect(): No such file or directory解决方法
2014/09/06 PHP
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
Javascript中拼接大量字符串的方法
2015/02/05 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
VUE长按事件需求详解
2017/10/18 Javascript
深入理解vuex2.0 之 modules
2017/11/20 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
JQuery获取元素尺寸、位置及页面滚动事件应用示例
2019/05/14 jQuery
vue实现路由监听和参数监听
2019/10/29 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
Selenium执行JavaScript脚本的方法示例
2020/12/31 Javascript
python正则表达式中的括号匹配问题
2014/12/14 Python
Python使用multiprocessing创建进程的方法
2015/06/04 Python
编写Python小程序来统计测试脚本的关键字
2016/03/12 Python
Python设置默认编码为utf8的方法
2016/07/01 Python
python实现百度语音识别api
2018/04/10 Python
Python下简易的单例模式详解
2019/04/08 Python
Pycharm 使用 Pipenv 新建的虚拟环境(图文详解)
2020/04/16 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
中学生期末评语
2014/02/03 职场文书
致跳远运动员广播稿
2014/02/11 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
JavaScript实现一键复制内容剪贴板
2022/07/23 Javascript