码迷,mamicode.com
首页 > Web开发 > 详细

CSS中的未定义行为,浏览器的差异(一)

时间:2018-03-04 19:57:57      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:var   浏览器   sed   log   未定义   pos   补充   oct   meta   

今天看了张鑫旭大佬的新书的有感吧,记录一下。

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>

    <script>
        var button = document.getElementById("button");
        if (button.addEventListener) {
            button.addEventListener("mousedown", function(event) {
                // 此处省略N行
                event.preventDefault();    
            });
        }      
    </script>
</head>
<body>
    <a href="javascript:" class="active-btn">按下</a>
    <a href="javascript:" id="button" class="active-btn">按下</a>
</body>
</html>

也就是鼠标按下的时候,阻止按钮的默认行为,这样设置可以让拖动效果更流畅。

但是在Fiewfox浏览器中的:active阵亡了,而IE和Chrome的:active正常变红,符合预期。

原因就是规范上并没有对这种场景的具体描述,所以Firefox认为:active发生在mousedown事件之后。但是我现在还有一个疑问,已在社区上提问,等明白之后再回来补充。

CSS中的未定义行为,浏览器的差异(一)

标签:var   浏览器   sed   log   未定义   pos   补充   oct   meta   

原文地址:https://www.cnblogs.com/zhangmingzhao/p/8505517.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!