zoukankan      html  css  js  c++  java
  • 判定浏览器是否支持原生透明

    原生透明判定是浏览器特征侦探的重要一环,之后的许多特效就靠它选择是原生透明还是滤镜透明。自从IE9决定支持原生透明后,此判定复杂多了,jQuery对于它的判定隐含深意。下面是jQuery1.42的代码:

         div.innerHTML = "   <a href='/a' style='float:left;opacity:.25;'>a</a>";
          // Make sure that element opacity exists
          // (IE uses filter instead)
          // Use a regex to work around a WebKit issue. See #5145
          // http://dev.jquery.com/ticket/5145
          opacity: /^0.55$/.test( a.style.opacity ),
    

    先不提IE8,IE7,IE6它们,肯定返回false。jQuery它为何选择如此特别的一个数字作为透明度呢?原先在jQuery1.32中,opacity是设为.5的,但发现firefox会错误地返回"0,5","0.5"不等于"0,5",因此出错。而为何使用正则表达式,我想这应该另有考量,但jQuery的类库作者们通常很少泄漏这些天机。

    原因可能大部分来自新出的IE9技术预览版,由于缺少测试平台,下面的结论都是来自外国的:

    • IE之外的标准浏览器的opacity的类型为String,这是正确的,因为DOM的特性都该如此。
    • IE8等版本的opacity的类型是不确定,由代入值的类型确定,换言之,el.style.opacity = "0.5",那么类型为String,如果el.style.opacity = 0.5 ,那么类型为Number。
    • IE9最新预览版的opacity的类型为Number。
    • 当el.style.cssText = "opacity:.25"之时,IE8直接返回 ".25" ,而IE9pp2返回0.25。

    最后赠送一个重要的信息:

    0.25转换为二进制时非无限循环小数,因此在各平如一致,其他符合此条件的数值也可行。但像0.5,它在Opera9.2x中就会判定失败,因为会返回“0.50”。

    因此我的判定如下:

          div.innerHTML = "   <a href='/a' style='float:left;opacity:.25;'>a</a>";
          //IE8返回 ".25" ,IE9pp2返回0.25,chrome等返回"0.25"
          w3cOpacity: a.style.opacity == "0.25",
    
  • 相关阅读:
    sql limit 的用法
    浅谈XSS攻击
    python dns 服务器
    简单的文件上传下载服务器
    Linux下pyftplib简单的脚本
    浅谈optparse 解析命令行参数库
    爬虫下载脚本
    python 递归算阶乘 (转载)
    遍历目录及其子目录的文件
    Oracle数据导入导出
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/1736535.html
Copyright © 2011-2022 走看看