为什么不:访问而不是:访问链接?

Sun*_*nny 39 css css3 pseudo-element

我看过的每个示例和样式表都用于a:visited设置链接样式.除了a:visited具有更高的特异性外,不:visited应该等同和简单吗?

Shr*_*pta 48

TL; DR:在撰写本文时,您完全正确; a:visited和之间没有区别:visited.但是,使用a:visited是将来验证代码的最佳实践.

TL; DR EDIT:截至2016年8月,CSS4工作草案允许使用其他标签:visited.现在a:visited和之间存在功能差异:visited!谨防.

对于今天的Web开发语言,特别是HTML5和CSS3,你是对的:功能上没有区别a:visited:visited.现在,请谨慎对待:Web标准,元素和用户界面协议不断发展,这意味着将来:visited可能会引入与之兼容的新标签.

什么时候:visited在CSS中引入,W3C CSS1规范说:

在CSS1中,锚伪类对"a"以外的元素没有影响.因此,可以从选择器中省略元素类型: a:link { color: red }==:link { color: red }

但是,在CSS2规范中,:visited伪类的行为并不仅限于a标记:

文档语言确定哪些元素是超链接源锚点.例如,在HTML4中,链接伪类适用于a具有"href"属性的元素.

这意味着由文档语言和浏览器决定哪些元素兼容:visited.虽然当前的行业标准规定,对于HTML,只有a具有href属性的元素才有资格,但这可能会在以后的行中发生变化.

编辑,2016年8月:看起来CSS4工作草案证实了我的怀疑; 在新的规范中,:visited可以用于其他"链接式"元素,即<area><link>.规范说:

:any-link伪类表示充当超链接的源锚点的元素.例如,在[HTML5],任何<a>,<area><link>带有href属性的元素是超链接.

所以<a>,<area>并且<link>都被视为超链接,规范说:visited适用于所有超链接.因此,从CSS4开始,你最好包括ain a:visited.

  • 特别是对于`:hover`,它几乎兼容HTML规范中的所有其他标记 (7认同)
  • 此外,这很常见 - "a:link {} a:visited {} a:hover {} a:active {}`.当需要在其他伪类之前添加它时,省略`a:visited`中的`a`并不能使事情"更简单". (4认同)
  • 啊哈,我首先看到CSS3规格,这是模糊的,然后CSS2规格更清晰,但答案是在CSS1规范.. (2认同)

Alo*_*hci 14

根据Selectors Level 4 :visited适用于HTML中的任何超链接<a>,<area>以及<link>具有href属性的元素.

对该link元素的快速测试表明,Firefox至少部分尊重这一点:

在FF中尝试http://jsfiddle.net/rfdzpjLo/4/或参见下文

link:before { content:attr(href); }
link { display:block; }
:visited { color: red; }
:link { color:green; }
Run Code Online (Sandbox Code Playgroud)
<link href="http://stackoverflow.com/questions/27263128/why-not-visited-instead-of-avisited-for-links" />
<link href="example.net/lsjhuehbsi00ejjdus" />
Run Code Online (Sandbox Code Playgroud)


muk*_*nda 5

是的,但是如果引入了可以设置样式的新标签,它将来不会兼容:visited.

最贴心的证据我可以找到:

http://www.w3.org/TR/CSS21/selector.html#link-pseudo-classes

文档语言确定哪些元素是超链接源锚点.例如,在HTML4中,链接伪类适用于具有"href"属性的A元素.因此,以下两个CSS 2.1声明具有类似的效果:

a:link { color: red }
:link  { color: red }
Run Code Online (Sandbox Code Playgroud)