原文地址:http://topic.csdn.net/u/20100630/14/7223adb9-3d4b-4869-9eaa-a424badeaeac.html
向作者致敬!
曾经在调试自己的网页是发现过一个问题,链接的文字只有在 IE6 下当鼠标移到上面的时候会变色,在 IE7、IE8 和其它浏览器里都不变色,感觉很奇怪。
先来看一下我原来的代码:
HTML code
<!DOCTYPE html>
<style type="text/css">
a:hover{color:red;}
a:link{color:black;}
a:visited{color:blue;}
a:active{color:green;}
</style>
<a href="#">test test test</a>
页面为标准模式(声明 DOCTYPE 为 <!DOCTYPE html> 即可,稍后会在“浏览器兼容性”系列中详细介绍浏览器模式)。
以上代码中,我的本意是想让文字在没有访问 (:link) 的时候是黑色,在悬停在文本上方 (:hover) 时是红色,点击到文本上方未释放鼠标时 (:active) 是绿色,而访问过 (:visited) 以后就变成了蓝色。
但是,事与愿违,在 IE6 下,当鼠标移到链接上时,文字会变红,而其他浏览器中都还是黑色。
相信大家也曾经遇到过类似的问题吧。
后来,查了一下W3C标准-- 5.11.2 和 5.11.3 才知道,原来<a>标签的伪类样式定义是有顺序要求的。
简单的介绍一下A 标签的4个伪类:
1. ':link' :适用于未被访问的链接;
2. ':visited' :适用于已经访问过的链接;
3. ':hover' :在可视化客服端上,适用于光标(鼠标指针)指向一个元素,但还未激活它时;
4. ':active' :适用于一个元素被用户激活时。
W3C制定的CSS21规范中指出:这四个伪类的声明顺序应该是:':link'、':visited'、':hover'、':active'。A:hover必须放置在A:link和A:visited之后,否则将隐藏A:hover内定义的相同规则。同理,A:active应在A:hover之后,否则A:active中的相同规则将被隐藏。
我想,标准这样制定的原因应该就在于浏览器解释CSS时遵循的“就近原则”。
举例来说:(测试结果中不包含IE6)
我想让未访问链接颜色为黑色,访问过的链接为蓝色,当鼠标移到链接上面的时候变为红色,就像我上面的代码里写的那样。
第一种情况:我定义的顺序是 a:hover、a:link、a:visited,这时会发现:把鼠标放到链接上时,它不会变成红色。
第二种情况:定义顺序变做 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 的标准(即是否有鼠标悬浮在上面),满足,则变成红色,不满足,则继续向上查找,一直找到满足条件的定义为止。
上面的结果是对 IE7/IE8、火狐、Chrome 和苹果的 Safari 测试得到的。IE6 没有按照标准做,故它在这三种情况下,当鼠标悬浮到链接上的时候链接都会变红。
推荐大家以后按照 L-V-H-A 的顺序来定义 <a> 标签的伪类样式。这样在各个浏览器里就都一样了。
为了好记,可以记这两个词:LOVE--HATE
希望对大家有帮助
分享到:
相关推荐
一、基本书写规范<br>1.书写时重定义的最先,伪类其次,自定义最后。<br>2.所有单位均以px为单位标识(所有单位,全部要带px,包括0px,符合w3c书写规范)<br>3.所有的css书写均以英文小写字母书写...属性书写顺序<br>
设计一个文档编<br>辑器 22<br>2.1 设计问题 23<br>2.2 文档结构 23<br>2.2.1 递归组合 24<br>2.2.2 图元 25<br>2.2.3 组合模式 27<br>2.3 格式化 27<br>2.3.1 封装格式化算法 27<br>2.3.2 Compositor和Composition ...
设计一个文档编<br>辑器 22<br>2.1 设计问题 23<br>2.2 文档结构 23<br>2.2.1 递归组合 24<br>2.2.2 图元 25<br>2.2.3 组合模式 27<br>2.3 格式化 27<br>2.3.1 封装格式化算法 27<br>2.3.2 Compositor和Composition ...
设计一个文档编<br>辑器 22<br>2.1 设计问题 23<br>2.2 文档结构 23<br>2.2.1 递归组合 24<br>2.2.2 图元 25<br>2.2.3 组合模式 27<br>2.3 格式化 27<br>2.3.1 封装格式化算法 27<br>2.3.2 Compositor和Composition ...
设计模式中文版这个有10m很大我分2次传<br>目 录<br>序言<br>前言<br>读者指南<br>第1章 引言 1...237<br>6.11 临别感想 237<br>附录A 词汇表 238<br>附录B 图示符号指南 241<br>附录C 基本类 244<br>参考文献 249<br>
1 C语言概述 2<br>1.1 C语言的发展过程 2<br>1.2 当代最优秀的程序设计...<br>1.10 书写程序时应遵循的规则 6<br>1.11 C语言的字符集 6<br>1.12 C语言词汇 7<br>1.13 Turbo C 2.0集成开发环境的使用 8<br>1.13.1 ...
约束文件的编写<br>第5节 ISE与第三方软件<br>第5节 Verilog代码书写规范<br>第5节 XPS软件的高级操作<br>第5节 XPS软件的高级操作2<br>第5节 ystem Generator的高级应用<br>第5节 半_并行FIR滤波器<br>第5节 使用...
内嵌式(嵌入式):使用<script>标签包裹JavaScript代码,<script>标签可以写在<head>或<body>标签中 外部式(外链式):将JavaScript代码写在一个单独的文件中,一般使用“js”作为文件的扩展名,在HTML页面中使用...
<br>② 按住鼠标右键可以擦除书写的数字。<br>③ 在工具条中单击【清除并重写检验样品】按钮,或者选择菜单中的【文件】→【清除并重写检验样品】选项,可以将手写的数字全部擦除。<br>(2) 打开已有的手写数字<br>...
模块书写顺序 [建议] template -> script -> style template根节点: template 根节点只允许包含一个直接子节点,以下情况都是不允许的: 根结点为空; 根结点是文字; 根结点有多个元素; 在根结点使用循环; 在根...
组合模式(Composite Pattern)-结构型模式 (0%)<br> <br><br>讲义书写模式<br>在实际的讲解中我会用一套模式来讲述我对设计模式的理解<br>1.给出当前章节模式的名称<br>2.讲述一个小故事,提出问题<br>3.回答这个...
Visual BAT 用来批量处理一切,提供工作效率<br><br>1.将bat文件直接编译成exe文件;<br>2.外置大量帮助文档案,帮助您更好的书写bat脚本;<br>3.修正bat文件隐藏bug<br><br>里面有大量实例,比如很实用的显示当前...
<br><br>情人节之际,你想在桌面上书写自己的“爱”吗? 请拿起这个小具,把你的桌面图标排成心形,为生活添一份爱。<br><br>桌面图标排列助手还能实现图标靠右,靠上和靠下排列。<br><br>它还可以将桌面图标排形成...
<br>它是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的<br>切分成词,因为词是汉语的基本语素单位,而书写的时候不像英语会在词之间<br>用空格分开,所以如何准确快速的分词一直是中文分词的...
<tr> <td><div align="center">Email地址</div></td> <td><div align="left"> <%=email%><%=select%></div></td> </tr> <tr><td><div align="center">登录密码</div></td><td><div align="left"><%=pwd%></div></td>...
5<br/>1.9 C源程序的结构特点 6<br/>1.10 书写程序时应遵循的规则 6<br/>1.11 C语言的字符集 6<br/>1.12 C语言词汇 7<br/>1.13 Turbo C 2.0集成开发环境的使用 8<br/>1.13.1 Turbo C 2.0简介和启动 8<br/>1.13.2 ...
<br>它是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的<br>切分成词,因为词是汉语的基本语素单位,而书写的时候不像英语会在词之间<br>用空格分开,所以如何准确快速的分词一直是中文分词的...
Office XP 以及 VS.NET,这个编辑器<br>可以支持书写 C#、ASP.NET、ADO.NET、XML、HTML 等多种代码, 支持基<br>于项目或者是文件的开发,可以对 C#、HTML、ASP、ASP.NET、VB.NET、V<br>Bscript、XML 提供彩色语法...
output 元素 output 元素 ...在其他地方,<option> 标签是无意义的。 output 元素 示例:利用output元素实现如下计算 总结 02 熟知output元素的用法 掌握output元素书写形式并熟练运用 总结 THANKS