CSS :link和:visited伪类 - 网页浏览器是否遵循规范?

10

W3.org CSS specification指出以下内容(重点是我的):

  • :link伪类适用于尚未访问的链接。
  • :visited伪类在用户访问链接后应用。

这两种状态是互斥的

这意味着应该仅将应用于:link选择器的任何样式应用于未访问的链接。但是,唯一适用此规则的属性似乎是color。将字体大小、背景等应用于:link选择器会针对所有链接。

页面下方有一个注释,指出:

注意。样式表作者可能滥用:link和:visited伪类,以确定用户已访问哪些站点,而不经过用户的同意。

因此,UA可以将所有链接视为未访问的链接,或实施其他措施来保护用户的隐私,同时以不同方式呈现已访问和未访问的链接。

但据我所知,这仅适用于Javascript返回的样式,而不适用于样式本身的显示。

这里是一个JS fiddle,展示了这个问题。浏览器是否偏离了规范,还是我漏了什么?


+1 对于今天我看到的第一个像样提问的问题。 - Andy E
2个回答

2

这句话的意思是,用户代理程序可以将所有链接视为未访问的链接,或者实现其他措施来保护用户的隐私,同时以不同方式呈现已访问和未访问的链接。这并不仅适用于JavaScript返回的样式 - 它就像它听起来的那样。这意味着浏览器可能会完全忽略:visited上的某些属性(在这种情况下就是这样)。由于font-size会增加包含元素的大小,允许对:visited链接使用不同的属性将削弱浏览器实施的其他安全措施。

如果浏览器希望,可以选择在没有应用:visited样式的情况下重新计算尺寸。自然而然地,这比禁止某些属性更费力且性能更差。显然,这个决定是基于这样一个事实做出的:没有必要使用不同的字体大小、背景等来区分已访问和未访问的链接,通常大多数开发人员只会稍微修改颜色。

所以,他们没有偏离规范,而是利用了一种可允许的例外。


1
好的回答,我没有想到改变一些样式会影响页面上的其他非链接元素。顺便说一下,大多数浏览器似乎只应用颜色和背景颜色,但不应用其他任何样式。然而,Opera仍然将所有样式应用于已访问的链接。 - DisgruntledGoat
2
@DisgruntledGoat:在http://dbaron.org/mozilla/visited-privacy上有一篇不错的文章,解释了问题并建议只允许少数几个属性。很可能允许的属性会因浏览器而异。 - Andy E

0
据我所了解,浏览器将:link视为a来避免滥用已访问状态。因此,无论是否使用JavaScript,实际应用于所有链接的样式都是:link,而:visited仅在访问时重载样式。

但是color属性没有被:link类覆盖,而其他样式被覆盖了。请参见此处:http://jsfiddle.net/SEjJg/3/ - DisgruntledGoat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接