以下变体似乎产生相同的结果:
/* 1 */
a, a:visited, a:active { color: black; }
a:hover { color: red; }
/* 2 */
a, a:link, a:visited, a:active { color: black; }
a:hover { color: red; }
/* 3 */
a:link, a:visited, a:active { color: black; }
a:hover { color: red; }
网络上的大多数指南使用2或3.为什么不选择最简单的1?如果您只需要一种普通链接样式和一种悬停样式,我就找不到适用:link
的理由。
不使用:link
是最佳做法吗?为什么或为什么不呢?
我不关心链接是否被访问过。两者都收到相同的样式。我只关心悬停或不悬停。这个问题不是关于变体的作用 - 都做同样的事情。它是关于最佳变体的内容。其中一个变种有缺陷吗?哪一个是最佳实践?
答案 0 :(得分:68)
因为不是每个a
都是链接。
<a name="table_of_contents">Table of Contents</a>
不是链接,它是可以与<a href="#table_of_contents">
链接的锚点。
a
会与之匹配,a:link
则不会。
答案 1 :(得分:21)
它用于区分具有href属性的简单锚点和锚点。 See demo jsfiddle here
<style>
a { color: red; }
a:link { color: blue; }
</style>
<a name="anchor">No href</a><br />
<a href="http://stackoverflow.com/">With href</a>
编辑:
因此,重要的是涵盖CSS中的所有情况。选项2是完全涵盖所有案例的唯一选择。如果您没有没有href
属性的锚元素,那么使用选项1是安全的。
答案 2 :(得分:2)
a:link
专门针对尚未访问过的链接。 a适用于所有<a>
元素。如您所说
我不关心链接是否被访问
然后您可以避免使用a:link
...仅使用a...a:hover...a:active
将满足您的需求
a:link
但href
会做,那么并且a
也无法正常工作
答案 3 :(得分:1)
我想你可以使用
<a>
创建一个按钮,以便产生替代结果......
我总是使用a:link
答案 4 :(得分:1)
这完全取决于你的意图,所以对于你的例子,我只是将所有锚元素设置为一种颜色,并且只在元素悬停时改变样式。
a {color: #000;}
a:hover {color: #f00;}
在您的情况下,您只是在链接悬停时更改链接的颜色。您需要在基本规则之后添加hover伪元素,否则由于样式表的级联而会覆盖它。
如果您在这种情况下使用了所有的伪元素,并且您希望唯一的区别是悬停,它将如下所示:
a:link, a:visited, a:focus, a:active {color: #000;}
a:hover {color: #f00;}
伪类名称是不言自明的:
使用伪类的好处是它具有比仅仅定位锚元素更高的特异性。但是,在您的情况下,可能不需要它。