`
jdhh_hcm
  • 浏览: 11170 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

<a>标签的伪类书写顺序问题(转载)

阅读更多

原文地址: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.25.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

希望对大家有帮助

分享到:
评论

相关推荐

    css(层叠样式表)规范文档

    一、基本书写规范&lt;br&gt;1.书写时重定义的最先,伪类其次,自定义最后。&lt;br&gt;2.所有单位均以px为单位标识(所有单位,全部要带px,包括0px,符合w3c书写规范)&lt;br&gt;3.所有的css书写均以英文小写字母书写...属性书写顺序&lt;br&gt;

    设计模式part2

    设计一个文档编&lt;br&gt;辑器 22&lt;br&gt;2.1 设计问题 23&lt;br&gt;2.2 文档结构 23&lt;br&gt;2.2.1 递归组合 24&lt;br&gt;2.2.2 图元 25&lt;br&gt;2.2.3 组合模式 27&lt;br&gt;2.3 格式化 27&lt;br&gt;2.3.1 封装格式化算法 27&lt;br&gt;2.3.2 Compositor和Composition ...

    设计模式part1

    设计一个文档编&lt;br&gt;辑器 22&lt;br&gt;2.1 设计问题 23&lt;br&gt;2.2 文档结构 23&lt;br&gt;2.2.1 递归组合 24&lt;br&gt;2.2.2 图元 25&lt;br&gt;2.2.3 组合模式 27&lt;br&gt;2.3 格式化 27&lt;br&gt;2.3.1 封装格式化算法 27&lt;br&gt;2.3.2 Compositor和Composition ...

    《设计模式》

    设计一个文档编&lt;br&gt;辑器 22&lt;br&gt;2.1 设计问题 23&lt;br&gt;2.2 文档结构 23&lt;br&gt;2.2.1 递归组合 24&lt;br&gt;2.2.2 图元 25&lt;br&gt;2.2.3 组合模式 27&lt;br&gt;2.3 格式化 27&lt;br&gt;2.3.1 封装格式化算法 27&lt;br&gt;2.3.2 Compositor和Composition ...

    设计模式中文版 1

    设计模式中文版这个有10m很大我分2次传&lt;br&gt;目 录&lt;br&gt;序言&lt;br&gt;前言&lt;br&gt;读者指南&lt;br&gt;第1章 引言 1...237&lt;br&gt;6.11 临别感想 237&lt;br&gt;附录A 词汇表 238&lt;br&gt;附录B 图示符号指南 241&lt;br&gt;附录C 基本类 244&lt;br&gt;参考文献 249&lt;br&gt;

    谭浩强C语言

    1 C语言概述 2&lt;br&gt;1.1 C语言的发展过程 2&lt;br&gt;1.2 当代最优秀的程序设计...&lt;br&gt;1.10 书写程序时应遵循的规则 6&lt;br&gt;1.11 C语言的字符集 6&lt;br&gt;1.12 C语言词汇 7&lt;br&gt;1.13 Turbo C 2.0集成开发环境的使用 8&lt;br&gt;1.13.1 ...

    一本FPGA方面未出版的书

    约束文件的编写&lt;br&gt;第5节 ISE与第三方软件&lt;br&gt;第5节 Verilog代码书写规范&lt;br&gt;第5节 XPS软件的高级操作&lt;br&gt;第5节 XPS软件的高级操作2&lt;br&gt;第5节 ystem Generator的高级应用&lt;br&gt;第5节 半_并行FIR滤波器&lt;br&gt;第5节 使用...

    Web前端开发技术-JavaScript代码编写.pptx

    内嵌式(嵌入式):使用&lt;script&gt;标签包裹JavaScript代码,&lt;script&gt;标签可以写在&lt;head&gt;或&lt;body&gt;标签中 外部式(外链式):将JavaScript代码写在一个单独的文件中,一般使用“js”作为文件的扩展名,在HTML页面中使用...

    《图像模式识别之VC++技术实现》的附带光盘(上篇:分类程序)

    &lt;br&gt;② 按住鼠标右键可以擦除书写的数字。&lt;br&gt;③ 在工具条中单击【清除并重写检验样品】按钮,或者选择菜单中的【文件】→【清除并重写检验样品】选项,可以将手写的数字全部擦除。&lt;br&gt;(2) 打开已有的手写数字&lt;br&gt;...

    前端开发规范,需要的同学可自行下载

    模块书写顺序 [建议] template -&gt; script -&gt; style template根节点: template 根节点只允许包含一个直接子节点,以下情况都是不允许的: 根结点为空; 根结点是文字; 根结点有多个元素; 在根结点使用循环; 在根...

    设计模式面面观(10):桥接模式(Bridge Pattern)-结构型模式

    组合模式(Composite Pattern)-结构型模式 (0%)&lt;br&gt; &lt;br&gt;&lt;br&gt;讲义书写模式&lt;br&gt;在实际的讲解中我会用一套模式来讲述我对设计模式的理解&lt;br&gt;1.给出当前章节模式的名称&lt;br&gt;2.讲述一个小故事,提出问题&lt;br&gt;3.回答这个...

    Visual BAT - 非常批处理

    Visual BAT 用来批量处理一切,提供工作效率&lt;br&gt;&lt;br&gt;1.将bat文件直接编译成exe文件;&lt;br&gt;2.外置大量帮助文档案,帮助您更好的书写bat脚本;&lt;br&gt;3.修正bat文件隐藏bug&lt;br&gt;&lt;br&gt;里面有大量实例,比如很实用的显示当前...

    桌面图标排列助手(情人节特别版)修改版

    &lt;br&gt;&lt;br&gt;情人节之际,你想在桌面上书写自己的“爱”吗? 请拿起这个小具,把你的桌面图标排成心形,为生活添一份爱。&lt;br&gt;&lt;br&gt;桌面图标排列助手还能实现图标靠右,靠上和靠下排列。&lt;br&gt;&lt;br&gt;它还可以将桌面图标排形成...

    SCWS简体中文分词辞典txt格式

    &lt;br&gt;它是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的&lt;br&gt;切分成词,因为词是汉语的基本语素单位,而书写的时候不像英语会在词之间&lt;br&gt;用空格分开,所以如何准确快速的分词一直是中文分词的...

    《Web应用技术》实验

    &lt;tr&gt; &lt;td&gt;&lt;div align="center"&gt;Email地址&lt;/div&gt;&lt;/td&gt; &lt;td&gt;&lt;div align="left"&gt; &lt;%=email%&gt;&lt;%=select%&gt;&lt;/div&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;div align="center"&gt;登录密码&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&lt;div align="left"&gt;&lt;%=pwd%&gt;&lt;/div&gt;&lt;/td&gt;...

    谭浩强C语言教程Word版

    5&lt;br/&gt;1.9 C源程序的结构特点 6&lt;br/&gt;1.10 书写程序时应遵循的规则 6&lt;br/&gt;1.11 C语言的字符集 6&lt;br/&gt;1.12 C语言词汇 7&lt;br/&gt;1.13 Turbo C 2.0集成开发环境的使用 8&lt;br/&gt;1.13.1 Turbo C 2.0简介和启动 8&lt;br/&gt;1.13.2 ...

    SCWS繁体中文分词辞典txt格式

    &lt;br&gt;它是一套基于词频词典的机械中文分词引擎,它能将一整段的汉字基本正确的&lt;br&gt;切分成词,因为词是汉语的基本语素单位,而书写的时候不像英语会在词之间&lt;br&gt;用空格分开,所以如何准确快速的分词一直是中文分词的...

    一个用于制作C# 或者VB.NET编辑器

    Office XP 以及 VS.NET,这个编辑器&lt;br&gt;可以支持书写 C#、ASP.NET、ADO.NET、XML、HTML 等多种代码, 支持基&lt;br&gt;于项目或者是文件的开发,可以对 C#、HTML、ASP、ASP.NET、VB.NET、V&lt;br&gt;Bscript、XML 提供彩色语法...

    HTML5&CSS3网页制作:output元素.pptx

    output 元素 output 元素 ...在其他地方,&lt;option&gt; 标签是无意义的。 output 元素 示例:利用output元素实现如下计算 总结 02 熟知output元素的用法 掌握output元素书写形式并熟练运用 总结 THANKS

Global site tag (gtag.js) - Google Analytics