惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 三生石上(FineUI控件)
月光博客
月光博客
S
SegmentFault 最新的问题
有赞技术团队
有赞技术团队
Stack Overflow Blog
Stack Overflow Blog
Engineering at Meta
Engineering at Meta
T
The Blog of Author Tim Ferriss
The GitHub Blog
The GitHub Blog
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
宝玉的分享
宝玉的分享
A
About on SuperTechFans
Vercel News
Vercel News
P
Proofpoint News Feed
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
Visual Studio Blog
Jina AI
Jina AI
Y
Y Combinator Blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Last Week in AI
Last Week in AI

博客园 - 北极熊,我来了!

C#获取类以及类下的方法(用于Asp.Net MVC) 使用JavaScript判断用户是否为手机设备 手机端页面自适应解决方案 Asp 邮件发送代码 js 日期字符串转换成日期类型,判断星期几 C#读取Rss功能函数 《中文防止乱码的万能解决方案》 《小偷程序:自动获取百度天气预报》 Asp.NET使用HTML控件上传文件 《JS两级联动菜单学习全接触》 活动目录ADSI实现添加系统帐号问题!!! ADSI管理Windows2003系统帐号 中国频道空间使用Jmail发送邮件 《IP地址和数字之间转化的算法》 《单域名下整合动网、动易、OBlog程序》 JS读取XML数据 Asp.NET读取Excel数据 [XML系列]Flash读取XML数据 《省市联动功能菜单的实现》
浅析a标签的4个伪类
北极熊,我来了! · 2012-08-02 · via 博客园 - 北极熊,我来了!

关于伪类,大家最熟悉的还是a标签的4个伪类:
:link        有链接属性时
:visited   
链接地址已被访问过
:active     被用户激活(在鼠标点击与释放之间发生的事件)
:hover     
其鼠标悬停

关于这四个伪类的排列次序,很多地方都能查到,可是为什么这么排列?从来没有见过有人提及。这里我就从技术、用户体验、优先级几个角度简单的阐述下我们为什么这么排列。

首先从技术层面上,

a的这四个伪类,分别表示了a的四种状态,要注意的是,a可以只具有一种状态(:link),或者同时具有2种或者三种状态!比如说,任何一个有HREF属性的a标签,在未有任何操作时都已经具备了:link的条件,也就是满足了有链接属性这个条件;如果访问过的a标签,同时会具备
:link :visited 两种状态。把鼠标移到访问过的a标签上的时候,a标签就同时具备了 :link :visited
:hover三种状态。

其次从用户体验的角度,

在用户使用超链接的时候,为了最佳的用户体验,要做到下面几点:第一:不管是否是被访问过的超链接,只要我鼠标移上的时候(:hover)都要有写变化,比如变色、加下划线等等,告诉用户选中的是可以点击的超链接。第二:不管是否访问过,在a标签被激活时(:active),都应该有相同的样式变化。也就是说,同一个a标签,未访问过时在被用户激活和被访问时再被用户激活时要有相同的样式。这个也很好理解,用户点下同一个超链接时的效果不应该有差别。第三:访问过的a标签可能要跟没有访问过的a相区分。

从CSS优先级角度,

前面的文章讲过具体的css优先级,这里我要说的是对于同一优先级的相冲突样式,浏览器的选择问题。比如:

.test {color:red; color:green;}
或者:
.test {color:red;}
.test
{color:green;}
上面两个例子中,大家都知道,对于这个.test指向的内容,浏览器会显示后一个属性设置。也就是color:green.

说到这里,很多人可能已经有头绪了。结合上面的三点,不难分析我们为什么要这么排。

第一:不管什么情况下鼠标悬停都应该有一个样式变化(:hover),我们就把hover放在最后,防止具备其他状态时,被其他状态的设置覆盖掉。
第二:当a被激活时(:active),我们要求不管是否访问过,都应该有相同的样式,也就是这个状态的效果应该能够覆盖未被访问时(:link)与
已访问过(:visited)两种状态。应该放在 :link
:hover的后面。
第三:被访问过的a(:visited)可能会有不一样的样式属性,用来区别a是否被访问过。也就是说:visited
状态的属性可以覆盖掉:link状态的属性, 即 :visited 要放在 :link
的后面。

10.20日编辑记录

今天下午的时候,我的助教联系我问“a的四个伪类是不是 L V H A啊?而不是你讲的L V A
H。新浪什么的都是这样的。我是从书上看的 love and hate。“ 

看到这个问题,我们不妨来看下H 和A 的关系。hover 和
active 分别表示鼠标悬浮在 a标签上
和鼠标点下没有弹起的时候。不难发现,这两种状态是不会并存的,也不会存在谁要覆盖谁的问题。所以,不管是LVHA还是LVAH
,他们的效果都是一样的。

不过用LOVE AND HATE 的方式来记住这个排序是一种不错的方法,推荐新手使用。