CSS伪类:first-child与:first-of-type的异同

CSS里关于元素匹配里面有两个非常类似却又不尽相同的选择器,伪类 :first-child 和 :first-of-type

两者在匹配方式上有很大差异,其实在一开始自己也没去注意这个细节,直到上次一个同事遇到同级元素匹配失败的问题后才发现原来以前的理解都不正确。

先来看看可爱的同事遇到的问题:

HTML代码

1 <div id="add_road">
2      <span class="input-title">路段 I D</span>
3      <input id="road_id" placeholder="road-id" value="S12"/>
4      <span class="required">*</span>
5      <span class="input-title">路段名称</span>
6      <input id="road_name" placeholder="rode-name" value="苏州桥"/>
7      <span class="required">*</span>
8 </div>

CSS代码

1 .add_input input:first-child{
2     color:#3c0;
3 }
4 .add_input input:last-child{
5     color:#c30;
6 }

在此为了测试方便对代码做了一些调整。效果如图:

可是发现我们对字体颜色进行设置的CSS代码没有效果,这跟我之前理解的:first-child和:last-child就有些出入。

那么接下来我们把最后一个<span>去掉

即:

删减后的HTML代码

1 <div id="add_road">
2      <span class="input-title">路段 I D</span>
3      <input id="road_id" placeholder="road-id" value="S12"/>
4      <span class="required">*</span>
5      <span class="input-title">路段名称</span>
6      <input id="road_name" placeholder="rode-name" value="苏州桥"/>
7 </div>

效果如图:

我们发现:咦~ :last-child生效了,可我们想要的效果是一个为绿色,一个为红色,这显然还有差距。

然后我们再把第一个span删掉:

删减后的HTML代码

1 <div id="add_road">
2      <input id="road_id" placeholder="road-id" value="S12"/>
3      <span class="required">*</span>
4      <span class="input-title">路段名称</span>
5      <input id="road_name" placeholder="rode-name" value="苏州桥"/>
6 </div>

效果如图:

结果不错,虽然没有标题很丑,但是至少两个伪类都有效果了。

那现在我们需要分析一下为什么会出现这种结果。

首先对:first-child和:first-of-type用一句话做出总结:

A B:first-child     —— A元素的第一个子元素,且这个子元素为B,如果不是则CSS失效
A B:first-of-type  —— A元素的第一个为B的子元素

也就是说在使用:first-child 时需要注意元素之前不能有其他同级元素,不然会使得样式失效,而在不确定的情况下可使用first-of-type属性

CSS参考手册上有个关于:nth-child 的例子挺不错,可以帮助我们更有效地理解这个伪类

示例代码

1 <div>
2     <p>第1个p</p>
3     <p>第2个p</p>
4     <span>第1个span</span>
5     <p>第3个p</p>
6     <span>第2个span</span>
7     <p>第4个p</p>
8     <p>第5个p</p>
9 </div>

当我们使用 p:nth-child(3){color:#f00;} 时发现并没有任何效果,而再尝试 p:nth-child(4){color:#f00;} 可以看到 <p>第3个p</p> 这一元素变为了红色而不是 <p>第4个p</p>

在此对于 :nth-child(n) 的解释为: E:nth-child(n) 会选择父元素的第n个子元素E,如果第n个子元素不是E,则是无效选择符,但n会递增

大家可以据此理解两个伪类之间的区别于联系。

祝生活愉快~

时间: 2024-11-03 22:02:43

CSS伪类:first-child与:first-of-type的异同的相关文章

CSS 伪类(Pseudo-classes)

CSS伪类是用来添加一些选择器的特殊效果. 语法 伪类的语法: selector:pseudo-class {property:value;} CSS类也可以使用伪类: selector.class:pseudo-class {property:value;} anchor伪类 在支持 CSS 的浏览器中,链接的不同状态都可以以不同的方式显示 实例 a:link {color:#FF0000;} /* 未访问的链接 */a:visited {color:#00FF00;} /* 已访问的链接 *

css总结12:CSS 伪类(Pseudo-classes)

1 伪类作用:CSS伪类是用来添加一些选择器的特殊效果. 2 常用示例: 2.1anchor伪类:代码:   正常语法: a{color:#FF0000;}/* 文字颜色 */   伪类语法: a:link {color:#FF0000;} /* 未访问的链接 */ a:visited {color:#00FF00;} /* 已访问的链接 */ a:hover {color:#FF00FF;} /* 鼠标划过链接 */ a:active {color:#0000FF;} /* 已选中的链接 */

关于css伪类的一些兼容性测试

测试环境:xp ,ie7~8  chrome. link 伪类 :(:link,:visited)  这个是链接专用 动态伪类 :(:hover,:active,:focus) <!DOCTYPE html> <html> <head></head> <style type="text/css"> a:link,input:hover{color:blue;} a:visited{color:green;} a:active{

CSS伪类和伪元素的区别

CSS - 伪类和伪元素的区别 本文转载于http://www.cnblogs.com/iceflorence/p/5796083.html 伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: CSS伪类 (Pseudo-classes):用于向某些选择器添加特殊的效果,即在元素当前静态样式的基础上添加特殊效果(一般都是动态效果),所以一个元素达到一个特定状态时,它

第十二节课,css伪类 (转)

一.特殊选择器 1.* 用于匹配任何的标记 2.> 用于指定父子节点关系 3.E + F 毗邻元素选择器,匹配所有紧随E元素之后的同级元素F 4.E ~ F 匹配所有E元素之后的同级元素F 5.名称[表达式] 5.1 E[att] 匹配所有具有att属性的E元素([att]获取所有的定义了att的标签:E[att=val] 匹配所有att属性等于“val”的E元素: 5.2 [att=val] 获取所有定义了att属性并且属性值等于val的标签: 5.3 [att^=val]获取所有定义了att

【从0到1学Web前端】CSS伪类和伪元素

1.CSS中的伪类 CSS 伪类用于向某些选择器添加特殊的效果. 语法: selector : pseudo-class {property: value} CSS 类也可与伪类搭配使用 selector.class : pseudo-class {property: value} 如下面的一段代码: a.red : visited {color: #FF0000} <a class="red" href="css_syntax.asp">CSS Syn

超链接标签的CSS伪类link,visited,hover,active

CSS伪类,是一种特殊的类,它针对到CSS选择器起作用,使选中的标签或元素产生特定的效果. CSS伪类的语法就是: 选择器 : 伪类名 { 属性 : 属性值 } 用的最多的伪类就是超链接a的伪类,有:link,:visited,:hover,:active,而且需要按照这个顺序设置,有个简单的记法是,取首字母组成 love hate,记住“爱恨”就行了. 1,  查看超链接a标签的默认样式 新建一个网页a.html,复制下面的内容: <html> <head> </head&

CSS伪类和伪元素

一.伪类 CSS伪类用于向某些选择器添加特殊的效果,在W3C规范中,CSS伪类有如下几个: :active:向被激活的元素添加样式(激活是指点击鼠标那一下) :focus:向拥有键盘输入焦点的元素增加样式 :hover:当鼠标悬浮在元素上方时,向元素增加样式 :link:向未被访问的链接增加样式 :visited:向已被访问的链接增加样式 :first-child:向元素的第一个子元素增加样式 :lang:向带有指定lang属性的元素增加样式 提示: 1.伪类名称对大小写不敏感.比如:ACTIV

CSS - 伪类和伪元素的区别

伪类和伪元素皆独立于文档结构.它们获取元素的途径也不是基于id.class.属性这些基础的元素特征,而是在处于特殊状态的元素(伪类),或者是元素中特别的内容(伪元素).区别总结如下: CSS伪类 (Pseudo-classes):用于向某些选择器添加特殊的效果,即在元素当前静态样式的基础上添加特殊效果(一般都是动态效果),所以一个元素达到一个特定状态时,它可能得到一个伪类的样式:当状态改变时,它又会失去这个样式. 属性 描述 :active 向被激活的元素添加样式 :focus 向拥有键盘输入焦

HTML转义字符 Unicode和CSS伪类介绍

CSS 伪类用于向某些选择器添加特殊的效果. a:link {color: #FF0000} /* 未访问的链接 */ a:visited {color: #00FF00} /* 已访问的链接 */ a:hover {color: #FF00FF} /* 鼠标移动到链接上 */ a:active {color: #0000FF} /* 选定的链接 */ p:first-child {font-weight: bold;} /* 伪类来选择元素的第一个子元素 */ a:focus {color: