3

案子

  • 我们有一个在 CSS 中指定状态的<a>元素:active
  • 在 JavaScript 代码中,我们监听mousedown事件并event.preventDefault()出于某些原因调用 :)
  • 结果:在Firefox中,当我将鼠标光标移到锚上并单击它时——锚不显示为:active
  • 我还在一些 Chrome/Opera/IE 版本中测试了这个问题——所有浏览器都像这样装饰了锚点:active

这是一个案例的测试:http: //jsbin.com/azajex/4

问题

在 W3C 上没有深入的描述,必须考虑什么active以及何时考虑。

但是除了 FF 之外的所有浏览器(也许,不是全部?)首先由 CSS 引擎处理 mousedown 并将元素呈现为:active. 这似乎是一个长期的问题,我在 FF 3.6、8.0、13.0 中测试了这个案例——所有版本的行为都完全相同。

那么,在这种情况下,浏览器的正确行为是什么?

4

1 回答 1

2

没有“正确的行为”。它取决于浏览器的实现,不应依赖。这称为未定义行为。在软件工程中,不应该依赖未定义的行为,因为它没有真正的文档,结果也无法验证。

CSS 没有定义哪些元素可能处于上述状态[伪类::hover、:active 和 :focus],或者状态如何进入和离开。脚本可能会改变元素是否对用户事件做出反应,并且不同的设备和 UAs[浏览器] 可能有不同的指向或激活元素的方式。- W3C CSS 选择器

于 2012-07-13T06:00:06.253 回答