今天看了张鑫旭大佬的新书的有感吧,记录一下。
Web标准未对一些场景做出明确规范,所以各大浏览器厂家只能根据自己的理解和喜好去实现,表现差异不是浏览器的bug,用计算机领域的术语描述为"未定义行为"。
比如一个例子:
CSS中的一个伪类,最常用的一个伪类:active,鼠标按下,执行改伪类对应的CSS样式,鼠标抬起还原。
但是这种情况呢:
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><style>.active-btn {display: inline-block; background-color: #cd0000;}.active-btn:active {background-color: #ae0000;}</style></head>
<body><a href="javascript:" class="active-btn">按下</a><a href="javascript:" id="button" class="active-btn">按下</a><script>var button = document.getElementById("button");if (button.addEventListener) {button.addEventListener("mousedown", function(event) {// 此处省略N行event.preventDefault(); });} </script>
</body>
</html>
也就是鼠标按下的时候,阻止按钮的默认行为,这样设置可以让拖动效果更流畅。
但是在Fiewfox浏览器中的:active阵亡了,而IE和Chrome的:active正常变红,符合预期。
原因就是规范上并没有对这种场景的具体描述,所以Firefox认为:active发生在mousedown事件之后。
然后我提了这个问题:
有大佬回答: