视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
CSS3的first-child选择器实战代码
2020-11-27 18:52:35 责编:小采
文档


这篇文章主要介绍了CSS3的first-child选择器实战攻略,包括first-child和:first-of-child的区别以及针对IE兼容问题的讲解,需要的朋友可以参考下

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

<ul>
 <li>1</li>
 <li>2</li>
 <li>3</li>
</ul>
<hr>
<ul>
 <li>1</li>
 <li>2</li>
 <li>3</li>
</ul>

CSS

// 只套用编号 1 的 li 
li:first-child { 
 color: green; 
}

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

<p>
 <p>第1个元素</p>
 <h1>第2个元素</h1>
 <span>第3个元素</span>
 <span>第4个元素</span>
</p>

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

<ul class="example">
 <li>aa</li>
 <li>bb</li>
 <li>cc</li>
 <li>dd</li>
</ul>

CSS部分:

.example li{float:left;margin-left:10px;}

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

.example li{float:left;margin-left:10px;} 
.example li:first-child{margin-left:0;}

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

.example li{float:left; margin-left:10px; _margin-left:expression(this.previousSibling==null?'0px':'10px');} 
.example li:first-child{margin-left:0;}

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

下载本文
显示全文
专题