深入理解CSS伪类

×

目录

[1]锚点 [2]UI元素 [3]结构伪类[4]其他

前面的话

  伪类经常与伪元素混淆,伪元素的效果类似于通过添加一个实际的元素才能达到,而伪类的效果类似于通过添加一个实际的类来达到。实际上css3为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。本文将详细介绍伪类的详细知识

锚点

  关于锚点<a>,有常见的5个伪类,分别是:link,:hover,:active,:focus,:visited

a:link{background-color:pink;}/*品红,未访问*/
a:hover{background-color:lightblue;}/*浅蓝,鼠标悬停*/
a:active{background-color:lightgreen;}/*浅绿,正被点击*/
a:focus{background-color:lightgrey;}/*浅灰,拥有焦点*/
a:visited{color:orange;}/*字体颜色为橙色,已被访问*/
/*[注意]visited伪类只能设置字体颜色的样式*/

伪类顺序

  对于伪类顺序,有一个口诀是love-hate,代表着伪类的顺序是link、visited、focus、hover、active。但是否伪类的顺序只能如此呢?为什么是这个顺序呢?

  CSS层叠中有一条法则十分重要,就是后面覆盖前面,所以伪类的顺序是需要精心考虑的。

  【1】link和visited必须在最前面,且没有先后顺序,否则link或visited的效果将被覆盖

  [注意]link和visited称为静态伪类,只能应用于超链接

  【2】hover、active、focus这三个伪类必须是focus、hover、active的顺序,因为在focus状态下,也需要触发hover和active,而要触发active一定要先触发hover,所以active要放在hover后面

  [注意]hover、active、focus称为动态伪类,可应用于任何元素,但IE7-浏览器不支持:focus,:hover和:active在IE6-浏览器下只支持给<a>设置

  所以最终的顺序只有两种:link、visited、focus、hover、active或visited、link、focus、hover、active

a:link{background-color:pink;}/*品红,未访问*/
a:visited{color:orange;}/*字体颜色为橙色,已被访问*/
a:focus{background-color:lightgrey;}/*浅灰,拥有焦点*/
a:hover{background-color:lightblue;}/*浅蓝,鼠标悬停*/
a:active{background-color:lightgreen;}/*浅绿,正被点击*/

UI元素伪类

  UI元素伪类包括:enabled、:disabled、:checked三个,主要针对于HTML中的form元素,IE8-浏览器不支持

:enabled    可用状态
:disabled   不可用状态
:checked    选中状态    
input:enabled{
    border: 1px solid black;
    background-color: transparent;
}
input:disabled{
    border: none;
    background-color: gray;
}
input:checked{
    outline: 2px solid lightblue;
}
<button onclick = "btn.disabled = false;">按钮可用</button><button onclick = "btn.disabled = true;">按钮不可用</button><input type="button" id="btn" value="按钮"><br>
<label>Male<input type="radio" name="sex" /></label><label>Female<input type="radio" name="sex"  /></label>

  [注意]input和:和enabled之间都不可以有空格

结构伪类

  结构伪类可分为以下3种情况,IE8-浏览器不支持

  //以下情况都是E为父元素,F为子元素

【1】:nth-child(n)、:nth-last-child(n)、first-child、last-child、:only-child

E F:nth-child(n)           选择父元素的第n个子元素
E F:nth-last-child(n)      选择父元素的倒数第n个子元素
E F:first-child            父元素的第一个子元素,与E F:nth-child(1)等同
E F:last-child             父元素的最后一个子元素,与E F:nth-last-child(1)等同
E F:only-child             选择父元素中只包含一个子元素

  [注意]:firsr-child和:last-child只有IE6-浏览器不支持

  n可以是整数(从1开始),也可以是公式,也可以是关键字(even、odd)

p:first-child       代表的并不是<p>的第一个子元素,而是<p>元素是某元素的第一个子元素
p > i:first-child    匹配所有<p>元素中的第一个<i>元素
p:first-child i     匹配所有作为第一个子元素的<p>元素中的所有<i>元素
li:nth-child(odd){color: red;}
li:nth-last-child(3){color: green;}
li:first-child{color: blue;}
li:last-child{color: yellow;}
div:only-child{background-color:lightgrey;}
<ul>
    <li><div>第一个DIV</div></li>
    <li><div>第二个DIV</div></li>
    <li><div>第三个DIV</div></li>
    <li><div>第四个DIV</div></li>
    <li><div>第五个DIV</div></li>
    <li><div>第六个DIV</div></li>
</ul>

【2】:nth-of-type(n)、:nth-last-of-type(n)、:first-of-type、:last-of-type、:only-of-type

E F:nth-of-type(n)          选择父元素的具有指定类型的第n个子元素
E F:nth-last-of-type(n)     选择父元素的具有指定类型的倒数第n个子元素
E F:first-of-type           选择父元素中具有指定类型的第1个子元素,与E F:nth-of-type(1)相同
E F:last-of-type            选择父元素中具有指定类型的最后1个子元素,与E F:nth-last-of-type(1)相同
E F:only-of-type           选择父元素中只包含一个同类型的子元素
.box div:nth-of-type(even){color: red;}
.box p:nth-last-of-type(3){color: green;}
.box div:first-of-type{color: blue;}
.box p:last-of-type{color: yellow;}
.box div:only-of-type{color: pink;}
<div class="box">
    <div>第一个div</div>
    <p>第一个p</p>
    <div>第二个div</div>
    <p>第二个p</p>
    <div class="in">第三个div</div>
    <p>第三个p</p>
</div>
<div class="box">
    <div>第四个div</div>
</div>

【3】:root、:not、:empty、:target

:root         选择文档的根元素,即<html>元素
:not          选择除某个元素之外的所有元素
:empty         选择没有子元素的元素,而且该元素也不包含任何文本节点
:target       匹配锚点对应的目标元素

  [注意]:not选择器只有safari9+及ios9.2+浏览器支持

:root{color:red;}
div:not{background-color: lightgrey;}
p:empty{height:30px;width:30px;background:pink;}
:target{color:blue;}
<body>
    <a href="#test">测试</a>
    <div>第一个div</div>
    <p>第一个p</p>
    <div id="test">第二个div</div>
    <p>第二个p</p>
    <p></p>
</body>

其他

【1】:lang()   匹配某个语言,IE7-浏览器不支持

p:lang(en) 匹配语言为"en"的<p>

【2】不仅可以使用单一伪类,也可以伪类结合使用

  [注意]顺序无关

div:hover:first-child{background-color: lightgreen;}
div:last-of-type:active{background-color: lightblue;}    
    <div>第一个div</div>
    <div>第二个div</div>
时间: 2024-10-25 07:45:01

深入理解CSS伪类的相关文章

CSS伪类的理解

因为之前一直对css伪类没有过多的了解,在网上看到一段css代码,不能理解 a:hover span.title{ color:red; ......... } 现通过查询css手册,其实css伪类只是表示了一种状态,a:hover只是表示了鼠标悬浮状态下的a标签,和一般的a标签用法没有区别,a:hover span.title即表示为鼠标悬浮状态的a标签的span的样式,和a span.title 用法没有区别

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&g

应用越来越广泛的css伪类

说起css伪类,学习web前端网页设计的同学们应该对此应该不是很陌生,以前很多的网页的特效大多是通过js来实现的.但是随着CSS3不断开发,利用css实现网页的特效不仅响应不错,而且还减少了很多的代码量.开发网页代码的效率也极大提高,今天我就跟大家分享一下学习css伪类的一些小经验. 对于开始接触css的朋友来说,在看其他人的代码的时候会经常看到 :hover,:foucs,:before,:after等相关代码,其实这些就是css伪类代码.简单来说应用css伪类就是增加了一个块. 接下来我们看

关于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