zoukankan      html  css  js  c++  java
  • CSS中的未定义行为,浏览器的差异(一)

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

    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事件之后。

    然后我提了这个问题:
    这里写图片描述
    有大佬回答:
    这里写图片描述

  • 相关阅读:
    js中给一个元素添加事件
    asp.net客户端回调
    (转)web元素之input (javascript)功能
    在wcf中使用基于证书的授权和保护
    (转)IE与FireFox的js和css几处不同点
    IE&FF兼容性问题
    solaris UFS文件系统 要点
    perl命令行 代替 各种shell 一则
    nginx中的验证模块
    漂亮的正则,素数查找
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8505517.html
Copyright © 2011-2022 走看看