:link,:visited,:hover,:active
这4个伪类你们都不陌生,4个伪类要按照LvHa这个爱恨原则来排(外国友人起的记忆方法),否则有些效果会出问题。css
可是大家都想过这几个属性为何要按顺序排吗?code
:link
和:hover
当鼠标移动到a标签上时,会触发a标签上的:hover
效果,但同时,此时的:link
效果仍然存在于a标签上,既然两个效果都在a标签上起做用,那么根据css的就近原则,写在后面的css样式就覆盖了前面的效果,因此it
<style> #b1:hover{ color: red; } #b1:link{ color: green; } </style> <a href="#" id="b1">点击我</a>
效果:方法
点击我样式
能够看到,因为此时link位于hover以后,因此当咱们鼠标移上a标签时,发现hover效果被覆盖了,并无变成红色,若是咱们把顺序换过来,那么就会看到咱们预想中的效果了移动
<style> #b2:link{ color: green; } #b2:hover{ color: red; } </style> <a href="#" id="b2">点击我</a>
效果:vi
点击我标签
此时,hover效果起做用了,因此咱们能够得出结论一:hover要位于link以后co
: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>
因为:link
放在最后面,因此无论是:hover
仍是:active
的效果都被:link
覆盖了,因此此时不管鼠标以上仍是点击咱们都没法看到效果
<style> #b4:active{ color: blue; } #b4:link{ color: green; } #b4:hover{ color: red; } </style> <a href="#" id="b4">点击我</a>
把:hover
放到了最后,此时咱们能够看到,鼠标移上:hover
产生了效果,同时点击时仍然没法看到:active
的效果,由于此时的:active
仍被:hover
覆盖了
正确的代码
<style> #b5:link{ color: green; } #b5:hover{ color: red; } #b5:active{ color: blue; } </style> <a href="#" id="b5">点击我</a>
至此,咱们终于看到了想要的效果,同时也得出第二个结论
hover必须位于link以后,同时active必须位于hover和link以后
因此目前咱们的顺序就是link/hover/active
那么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>
鼠标移上,点击,乍一看好像没问题呀,全部的效果都正确的产生了。可是,当咱们点击完了第一次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>
咱们改了一下位置,把:visited
放到了:link
以后,这时,不管是第一次点击,仍是第二次点击,:visited
的效果都正确的产生了,同时又没有覆盖:hover
和:active
的效果,而最终的这个顺序,也正是咱们说的LvHa
原则
看完此文,但愿你们可以对这4个伪类有更深入的认识,同时也能理解它们排列的顺序,其实若是理解了这几个伪类为何这样排以后,就再也不须要借助LoHa
这样的窍门来记忆了,理解才是最好的记忆方法。