Html 是否有理由在我的样式表中使用a而不是:link或:visted?

Html 是否有理由在我的样式表中使用a而不是:link或:visted?,html,css,css-selectors,Html,Css,Css Selectors,有谁能告诉我,在我的样式表中是否有任何理由使用a{}而不是(或邻近)a:link,a:visted{}?我在不同的浏览器、网站等测试中都遇到了不一致的结果,所以我从来没有给出满意的答案。我也无法在谷歌上找到答案 当然,这是假设永远不会有理由使用没有href值的标记。也许这是一个错误的假设 **编辑** 我知道这些选择器是做什么的。我正在寻找为什么我会使用a而不是a:link或a:visted,因为a始终具有href属性。但正如Chris Blake和Ryan P在回答中所说,还有和javascr

有谁能告诉我,在我的样式表中是否有任何理由使用
a{}
而不是(或邻近)
a:link,a:visted{}
?我在不同的浏览器、网站等测试中都遇到了不一致的结果,所以我从来没有给出满意的答案。我也无法在谷歌上找到答案

当然,这是假设永远不会有理由使用没有
href
值的
标记。也许这是一个错误的假设

**编辑**


我知道这些选择器是做什么的。我正在寻找为什么我会使用
a
而不是
a:link
a:visted
,因为
a
始终具有
href
属性。但正如Chris Blake和Ryan P在回答中所说,还有
和javascript用法,这两种用法都不需要
href
属性。

使用

a:link
a:visted
分别为正常链接和已访问链接指定自定义(浏览器默认除外)颜色,而
a{}
用于覆盖所有样式,包括
a:link
a:visted
a:active
。例如,无论链接是否处于活动状态、是否已访问或悬停,以下内容都将具有相同的颜色:

a { color:red; }

您可以通过使用单独的样式来避免这种情况,例如
a:pseudoClass
表示法。

您可以有一个锚,它只是一个锚。比如说,

<a href="#top">Return to top</a>

<a name="top">Top</a>

顶部
这纠正了你的错误假设(尽管“顶端”不需要锚,但它在哲学上是最正确的)


此外,正如Sarfraz所说,
a{}
如果设置了样式(并且假设
a{}
在其他
a:
声明之后),则会覆盖其他
a:
样式属性的所有引用。

a:link
a:visted
具有特定的含义
a
本身将影响所有
元素,而
a:link
将只影响尚未访问的链接,
a:visited
将只影响已访问的链接。

有两种情况下,
a
可能没有
href
属性。第一种是常规锚(即
),第二种是纯Javascript交互(即
)。这些不是“链接”,也不应该设置相同的样式

编辑:为了澄清,
a:link
相当于
a[href]
(我相信前面的符号在属性选择器可用或标准化之前就存在了)。因此,使用
a
而不是
a:link
的原因是,如果您希望所有锚定标记的样式相同。某些浏览器中的默认样式显示这两种不同的样式,例如下划线仅应用于
a:link
,而不应用于
a

当然,这是假设永远不会有理由使用
并提及命名锚,我要补充的是,尽管
name
属性仍然盛行,命名锚仍然会继续流行,这仅仅是因为传统和传统

也就是说,继续,建议作者使用
id
属性和未命名的锚定来指定文档锚定片段

另外,
是我在这个主题上的:

选择器
a
应匹配任何
),而不是
a
。请注意,属性是否有值并不重要,只要它存在,伪类就会匹配,因此
[href]
。还要注意的是,所有当前的HTML标准都是如此,我相信这包括HTML5,因为如上所述,
href
在任何现有规范中都不是必需的属性

请记住,其他语言可能会为
:link
:visted
定义完全不同的语义-它们恰好与HTML中同样特定的选择器一致,下面将介绍这一点

特异性 这是一个巨大的难题:
a
没有
a:link
a:visted
那么具体,这是一个非常常见的特殊性问题来源,当分别将样式应用于
a
a:link
a:visted
时,这些问题尤为明显。这就导致了各种各样的
!重要信息
hacks绕过对特定性缺乏理解的问题

例如,考虑这个CSS:

/*所有未访问的链接应为红色*/
a:链接{
颜色:红色;
}
/*所有访问的链接都应该稍微暗一点*/
a:参观了{
颜色:栗色;
}
/*但无论如何,标题链接必须始终为白色*/
正文>标题>a{
颜色:白色;
}
这并没有像预期的那样起作用,因为
a:link
a:visted
(我称之为通用规则/选择器)比
body>header>a
(我称之为专用规则/选择器)更为具体,所以实际上,header链接永远不会是白色的:

/*1伪类,1类型->特异性=(0,1,1)*/
a:链接,a:已访问
/*3种类型->特异性=(0,0,3)*/
正文>标题>a
现在,大多数CSS程序员想到的第一件事就是加入
!重要的
,完全胜过特殊性:

body>header>a{
颜色:白色!重要;
}
但这会让你名声扫地,对吧?所以我们不要这样做

选择器级别4为您提供的不是一个解决方案,而是两个解决方案。这些新的解决方案在Internet Explorer和Microsoft Edge Legacy(UWP/EdgeHTML/not Chromium one)中不受支持,但谢天谢地,还有第三个解决方案在Internet Explorer 7和更高版本中可用,即属性选择器
a[href]