CSS:link和:visited伪类 - 是否符合规范的网络浏览器?

Dis*_*oat 10 css hyperlink visited css-selectors

W3.org CSS规范规定如下(重点煤矿):

  • :link伪类适用于尚未访问过的链接.
  • :一旦用户访问了链接,就会应用:visited伪类.

这两个州是相互排斥的.

这意味着应用于:link选择器的任何样式应仅应用于未访问的链接.然而,唯一的属性似乎是这样color.将字体大小,背景等应用于:link选择器会定位所有链接.

页面下方还有一条说明:

注意.样式表作者可能滥用:link和:visited伪类来确定用户未经用户同意访问过哪些网站.

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

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

这是一个JS小提琴,显示了这个问题.这些浏览器是否偏离规范,或者是否存在我遗漏的内容?

And*_*y E 2

这条线,

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

不适用于仅由 JavaScript 返回的样式 - 正如其听起来一样。这意味着浏览器可能会完全忽略某些属性:visited(这就是本例中发生的情况)。由于这font-size会增加包含元素的大小,因此允许链接的属性不同:visited会破坏浏览器实施的其他安全措施。

如果浏览器愿意,可以选择在不应用样式的情况下重新计算尺寸。:visited当然,这比仅仅禁止某些属性需要更多的工作并且性能更低。很明显,这个决定是基于这样一个事实做出的:没有真正需要使用不同的字体大小、背景等来区分已访问和未访问的链接,并且通常大多数开发人员都会坚持只稍微修改颜色。

所以不,他们并没有偏离规范,他们只是利用了允许的例外。

  • @DisgruntledGoat:http://dbaron.org/mozilla/visited-privacy 上有一篇不错的读物,它解释了问题并建议只允许一些选定的属性。不同浏览器允许的属性可能会有所不同。 (2认同)