你知道hover、active这四个伪类为什么要按顺序写吗
刨根问底,你知道:hover等4个伪类为什么要按顺序排列吗
引言
:link,:visited,:hover,:active
这4个伪类大家都不陌生,4个伪类要按照LvHa这个爱恨原则来排(外国友人起的记忆方法),不然有些效果会出问题。
但是你们都想过这几个属性为什么要按顺序排吗?
:link
和:hover
当鼠标移动到a标签上时,会触发a标签上的:hover
效果,但同时,此时的:link
效果仍然存在于a标签上,既然两个效果都在a标签上起作用,那么根据css的就近原则,写在后面的css样式就覆盖了前面的效果,所以
<style>
#b1:hover{
color: red;
}
#b1:link{
color: green;
}
</style>
<a href="#" id="b1">点击我</a>
效果:
#b1:hover{
color: red;
}
#b1:link{
color: green;
}
可以看到,由于此时link位于hover之后,所以当我们鼠标移上a标签时,发现hover效果被覆盖了,并没有变成红色,如果我们把顺序换过来,那么就会看到我们预想中的效果了
<style>
#b2:link{
color: green;
}
#b2:hover{
color: red;
}
</style>
<a href="#" id="b2">点击我</a>
效果:
#b2:link{
color: green;
}
#b2:hover{
color: red;
}
此时,hover效果起作用了,所以我们可以得出结论一:hover要位于link之后
:link
、:hover
和:active
还是原本的思路分析,当鼠标点击时,此时:link
、:hover
和:active
都在a标签上产生效果,所以还是根据就近原则,上代码
<style>
#b3:hover{
color: red;
}
#b3:active{
color: blue;
}
#b3:link{
color: green;
}
</style>
<a href="#" id="b3">点击我</a>
#b3:hover{
color: red;
}
#b3:active{
color: blue;
}
#b3:link{
color: green;
}
由于:link
放在最后面,所以不管是:hover
还是:active
的效果都被:link
覆盖了,所以此时无论鼠标以上还是点击我们都无法看到效果
<style>
#b4:active{
color: blue;
}
#b4:link{
color: green;
}
#b4:hover{
color: red;
}
</style>
<a href="#" id="b4">点击我</a>
#b4:active{
color: blue;
}
#b4:link{
color: green;
}
#b4:hover{
color: red;
}
把:hover
放到了最后,此时我们可以看到,鼠标移上:hover
产生了效果,同时点击时仍然无法看到:active
的效果,因为此时的:active
仍被:hover
覆盖了
正确的代码
<style>
#b5:link{
color: green;
}
#b5:hover{
color: red;
}
#b5:active{
color: blue;
}
</style>
<a href="#" id="b5">点击我</a>
#b5:link{
color: green;
}
#b5:hover{
color: red;
}
#b5:active{
color: blue;
}
至此,我们终于看到了想要的效果,同时也得出第二个结论
hover必须位于link之后,同时active必须位于hover和link之后
所以目前我们的顺序就是link/hover/active
visited
那么visited应该放哪里呢?我们先试着把它放到最后
<style>
#b6:link{
color: green;
}
#b6:hover{
color: red;
}
#b6:active{
color: blue;
}
#b6:visited{
color: yellow;
}
</style>
<a href="#1" id="b6">点击我</a>
#b6:link{
color: green;
}
#b6:hover{
color: red;
}
#b6:active{
color: blue;
}
#b6:visited{
color: yellow;
}
鼠标移上,点击,乍一看好像没问题呀,所有的效果都正确的产生了。但是,当我们点击完了第一次a标签,再次进行点击的时候,发现:hover
和:active
都不起效果了,原来是因为此时:visited
起了作用,同时也由于:visited
写在最后,所以第二次点击的时候覆盖了之前的效果
最终的代码
<style>
#b7:link{
color: green;
}
#b7:visited{
color: yellow;
}
#b7:hover{
color: red;
}
#b7:active{
color: blue;
}
</style>
<a href="#2" id="b7">点击我</a>
#b7:link{
color: green;
}
#b7:visited{
color: yellow;
}
#b7:hover{
color: red;
}
#b7:active{
color: blue;
}
我们改了一下位置,把:visited
放到了:link
之后,这时,无论是第一次点击,还是第二次点击,:visited
的效果都正确的产生了,同时又没有覆盖:hover
和:active
的效果,而最终的这个顺序,也正是我们说的LvHa
原则
看完此文,希望大家能够对这4个伪类有更深刻的认识,同时也能理解它们排列的顺序,其实如果理解了这几个伪类为什么这样排之后,就不再需要借助LoHa
这样的窍门来记忆了,理解才是最好的记忆方法。
你知道hover、active这四个伪类为什么要按顺序写吗的更多相关文章
- <a>链接的四个伪类顺序
<a>元素的作用是可以创建一个链接,链接对应4个状态:未访问,已访问,鼠标悬停,鼠标点击瞬间. 为了给链接的4个状态应用样式,引入伪类的概念. 什么是伪类呢?简单点说,就是你没定义这个类, ...
- a 标签的四个伪类
link 有链接属性时visited 链接地址已被访问过active 被用户激活(在鼠标点击与释放之间发生的事件)hover 其鼠标悬停 <!DOCTYPE ...
- a标签的四个伪类
A标签的css样式 CSS为一些特殊效果准备了特定的工具,我们称之为“伪类”.其中有几项是我们经常用到的,下面我们就详细介绍一下经常用于定义链接样式的四个伪类,它们分别是: :link :v ...
- a链接四种伪类状态切换实现人机交互
常见的color, font-family, background 等css属性都能够设置链接的样式,a链接的特殊性在于能够根据它们所处的状态来设置它们的样式.a标签与人交互的4个状态属于伪类状态切换 ...
- html中a标签伪类的优先级与顺序
/** 这四个伪类的优先级相同,前一个会覆盖后一个 建议书写顺序: lvha => love hate(好记) */ a:link { color: red; } a:visited { col ...
- css伪类选择器的查找顺序
当伪类选择器last-child.first-child无效时,就是因为不了解css伪类选择器的查找顺序造成选中某一元素失败. 先给出一段dom <body> <div>第一个 ...
- 【CSS学习笔记】a标签的四种伪类
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...
- a标签的四个伪类是什么?如何排序?为什么?
爱恨分明原则: l v h a 注释:为了产生预期的效果,在 CSS 定义中,a:hover 必须位于 a:link 和 a:visited 之后 ! 注释:为了产生预期的效果,在 CSS 定义中,a ...
- a:link a:visited a:hover a:active四种伪类选择器的区别
a:link选择网页中所有没有被visited的a标签,就是没有鼠标悬停hover或者点击click(a链接没有被访问时的样式) a:visited选择网页中所有已经被click的a链接,用来告诉用户 ...
随机推荐
- go语法之一
Go语法: Go语言要求public的变量必须以 大写字母开头,private变量则以小写字母开头,这种做法不仅免除了public.private关键字,更重要的是统一了命名风格. Go语言对{ } ...
- UC/0S2之基础总结
堆栈,就是在存储器中按数据“后进先出(LIFO)[类比杯子]”的原则组织的连续存储空间,为了满足任务切换和响应中断保存CPU寄存器中的内容及存储任务私有数据的需要,每个任务都应该配有自己的堆栈, 注意 ...
- 几种经典排序算法的JS实现
一.冒泡排序 function BubbleSort(array) { var length = array.length; for (var i = length - 1; i > 0; i- ...
- if语句判断身高体重是否标准
1.判断身高,体重是否标准 Console.WriteLine("请输入您的身高:"); int sg = Convert.ToInt32(Console.ReadLine()); ...
- MVC DI
using System;using Microsoft.Practices.Unity; public class BizInstanceFactory { private static reado ...
- hadoop序列化机制与java序列化机制对比
1.采用的方法: java序列化机制采用的ObjectOutputStream 对象上调用writeObject() 方法: Hadoop 序列化机制调用对象的write() 方法,带一个DataOu ...
- cocos2dx工程
1. create-android-project.sh 进入 pro.android/ ln -s ../Resources ./Resources
- STL assign 和swap
首先看下在整个container上面的复制. c1=c2 可以等同于 c1.erase(c1.begin(),c1.end()) //delete all elems in c1 c1.insert( ...
- NOIP2015
现在来总结一下. 斗地主 这题的题目描述感觉不太清晰,当时有很多人去问,但都没有得到任何回应.好吧,虽然我也是似懂非懂,但是就算看清楚了题目又能怎么样呢. 首先这题只能够搜索吧,或者说是DP,不过有很 ...
- Eddy's爱好(dfs+容斥)
Eddy's爱好 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total S ...