以前用CSS一直没有遇到过这个问题,在最近给一个本科同学做的项目里面。出现一些问题,搜索引擎查了一些网站和资料,发现很多人问到这个问题,给出的结果我试了试,大部分都不正确。
 
给出我试的顺序,可能会对大家有一些帮助:


代码

A:link {
 color: #000000;
 TEXT-DECORATION: none
}
A:visited {
 COLOR: #000000;
 TEXT-DECORATION: none
}
A:hover {
 COLOR: #ff7f24;
 text-decoration: underline;
}
A:active {
 COLOR: #ff7f24;  
 text-decoration: underline;
}
 
今天看到一位匿名朋友的问题,又去查了一些资料,这个人讲的非常透彻:引自灵眸●第一炉沉香博客
 
a :link、a:hover、a:visited这几个元素,定义CSS时候的顺序不同,也会直接导致链接显示的效果不同。
我想,原因就在于浏览器解释CSS时遵循的“就近原则”。

举例来说:
我想让未访问链接颜色为蓝色,活动链接为绿色,已访问链接为红色:

  • 第一种情况:我定义的顺序是a:visited、a:hover、a:link,这时会发现:把鼠标放到未访问过的蓝色链接上时,它并不变成绿色,只有放在已访问的红色链接上,链接才会变绿。
  • 第二种情况:我把CSS定义顺序调整为:a:link、a:visited、a:hover,这时,无论你鼠标经过的链接有没有被访问过,它都会变成绿色啦。
这是因为,一个鼠标经过的未访问链接同时拥有a:link、a:hover两种属性,在第一种情况下,a:link离它最近,所以它优先满足a:link,而放弃a:hover的重复定义。
在第二种情况,无论链接有没有被访问过,它首先要检查是否符合a:hover的标准(即是否有鼠标经过它),满足,则变成绿色,不满足,则继续向上查找,一直找到满足条件的定义为止。

一句话:在CSS中,如果对于相同元素有针对不同条件的定义,宜将最一般的条件放在最上面,并依次向下,保证最下面的是最特殊的条件。
这样,浏览器在显示元素时,才会从特殊到一般、逐级向上验证条件,才会使你的每一个CSS语句都起到效果。
当然,如果故意打乱顺序,也会造成一些特殊的效果。比如,可以为链接制造出下划线颜色与文字颜色的差异。

近日突然发现,原来这个CSS问题早已有高人提出啦。还是个老外呢。他给总结了一个便于记忆的“爱恨原则”(LoVe/HAte),即四种伪类的首字母:LVHA。
再重复一遍正确的顺序:a:link、a:visited、a:hover、a:active .

 
 
 
 

最后经验补充:

1.鼠标经过的“未访问链接”同时拥有a:link、a:hover两种属性,后面的属性会覆盖前面的属性定义;

2.鼠标经过的“已访问链接”同时拥有a:visited、a:hover两种属性,后面的属性会覆盖前面的属性定义

所以说,a:hover定义一定要放在a:link、a:visited的后面,,,

最新文章

  1. Entity Framework 教程——什么是Entity Framework
  2. 安装CentOS7文字界面版后,无法联网,用yum安装软件提示 cannot find a valid baseurl for repo:base/7/x86_64 的解决方法
  3. PHP读写文件
  4. 关于SQLSERVER2012版本远程登录问题
  5. HashMap vs TreeMap vs Hashtable vs LinkedHashMap
  6. cocos2dx中对象的两步初始化
  7. js中的引用类型-object
  8. Swift—析构函数-备
  9. Tiny210编译和烧写u-boot步骤
  10. anaconda相关使用方法
  11. 利用 Google Chart API 生成二维码大小不一致
  12. 什么是JDK?什么是JRE?JDK与JRE的区别和用途
  13. Typescript 学习笔记二:数据类型
  14. 从源码的角度看 React JS 中批量更新 State 的策略(下)
  15. Spark机器学习(1):线性回归算法
  16. HBuilder-svn安装与使用【原创】
  17. git 更新代码到本地
  18. ActiveMQ -5.9和jms-1.1源码下载
  19. 柯朗微积分与数学分析习题选解(1.1 节 e)
  20. MFC连接Mysql数据库执行查询和插入

热门文章

  1. MVC4.0系统开发新手历程(四)数据列表查询
  2. bzoj 1194
  3. java开发经验分享(二)
  4. socket pro
  5. mysql c haracter
  6. 关于bootstrap--表单(下拉<select>、输入框<input>、文本域<textare>复选框<checkbox>和单选按钮<radio>)
  7. THREE.JS + Blender(obj、mtl加载代码)
  8. 解决方案--java执行cmd命令ProcessBuilder--出错Exception in thread "main" java.io.IOException: Cannot run program "dir d:\": CreateProcess error=2(xjl456852原创)
  9. python标准库之字符编码详解
  10. input文本框获取焦点和失去焦点判断