CSS3 过渡属性的特征检测

2024-01-11

我只是想弄明白这个modernizr,他们如何检查用户的浏览器是否支持某个CSS属性,基本上我只是想要一个小脚本来告诉我用户的浏览器是否支持CSS转换。我将 Modernizr 代码抽象为如下所示:

Elem = document.createElement('Alx');
      eStyle = Elem.style;

      var cssProp = (function check(){
            props = ["transition", "WebkitTransition", "MozTransition", "OTransition", "msTransition"];
            for(var i in props) {
              var prop = props[i];
                console.log(prop);
                if (!contains('-' , prop) && eStyle[prop] !== undefined ) {
                        return prop;
                }
            }
      })();

    /* The contains function */

   function contains( str, substr ) {
      return !!~('' + str).indexOf(substr);
   }

Modernizr 做了几乎相同的事情,我只是做了一些更改并对数组值进行了硬编码以简化事情。该脚本按以下方式工作。

  • 创建一个 html 元素(不必是有效的 html 元素)。

  • 执行一个 IIFE,它基本上会遍历 css 属性的所有可能的浏览器版本以及标准 W3C 变体。检查 thing 属性是否可以应用于我们创建的 html 元素,如果不能应用于if条件失败并返回 undefined

  • 如果 if 条件通过,则返回正确的 css-3 支持的属性并将其存储在 cssProps 中。

我只是想知道,这是一种检查用户浏览器支持哪种转换的防弹方法吗?或者是否完全支持?

这确实是我第一次尝试浏览器功能检测,所以我想知道。


对于您更重要的观点“这是一种检查用户浏览器支持哪种转换的防弹方法”,答案是否定的。虽然这几乎肯定会让你获得 99.99% 的支持它的浏览器,但不可避免地会出现一些奇怪的组合(中端三星 Android 设备上的 webview 使用webkit/chrome 的自定义版本 http://www.quirksmode.org/blog/archives/2015/02/counting_chromi.html是一个常见的罪魁祸首),这将使您无法真正“防弹”。

话虽这么说,虽然你在提取 Modernizr 所做的逻辑方面做得很好,但我会质疑你这样做的必要性。

正如其他评论者所提到的,您始终可以创建一个包含您想要的内容的自定义构建。话虽这么说,如果您想要尽可能精简的 javascript 构建,那么做您所做的事情是有意义的(因为 Modernizr 几乎肯定对与您正在做的事情完全无关的事情提供支持/代码)。 如果是这种情况,那么我建议您检查一下caniuse http://caniuse.com/#search=transition过渡的结果。其基本上all除较旧的 android 之外,没有前缀。

这意味着您的检测可以小得多

var supportsTransitions = function() {
  var style = document.documentElement.style;

  return 'transition' in style || 'webkitTransition' in style
}

这将为您提供几乎相同的结果(诚然,忽略旧版浏览器 - 这取决于您是否重要),并且占用空间要小得多。

无论哪种方式 - 特征检测的美好开始,我希望很快看到您为 Modernizr 做出自己的贡献!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS3 过渡属性的特征检测 的相关文章

  • 将模板添加为innerHTML 时,Angular 2 绑定/事件不起作用

    我正在尝试创建一个可配置的可重用表 单元格可以配置为具有 html 模板 我正在配置列 Review 拥有带有带有点击事件的锚标记的 html 模板 审核 行 到目前为止 我尝试将此模板作为innerHTML 插入 但所有角度绑定都不起作用
  • 将对象传递给jquery中的回调函数

    我最近正在开发小型聊天模块 该模块需要不断检查服务器是否有新消息 我正在向服务器发送 ajax 请求 服务器将保持连接 直到找到新消息 长轮询 Code var chatController function other variable
  • jqGrid如何将额外的类应用于标题列

    我想在特定列上应用一个额外的类 我知道通过在 colModel 中指定这一点对于行是可能的 但这些类仅应用于 结果行 中的列 而不应用于标题 我想要达到的是通过简单的类名隐藏较小视口的特定列 与 Twitter Bootstrap 一起使用
  • 如何解决输入字段上的错误行高?

    如何为具有固定高度的输入字段提供其所包含文本的跨浏览器垂直对齐方式 截至目前看来line height是我最好的选择 但是 在 Chrome 或 Safari 等 webkit 浏览器上 复制 粘贴时光标会跳至顶部对齐 我注意到 WordP
  • border-radius 在 safari 下失败(丑陋的剪辑)

    有人知道 Safari 中以下 错误 的解决方法吗 当我使用border radius在 CSS3 中创建圆角边框 它在 Safari FF 等上工作得很好 但是 当边框颜色是背景颜色时 您可以看到容器背景与边框重叠 你可以在这里尝试一下
  • 无需源代码即可部署网站

    我用php开发了网站 我想在没有源代码的情况下部署它 用php可以吗 我可以将网站代码转换为某种中间形式然后进行部署吗 您可以使用 Zend Guard 来编码您的代码 这样它就无法被逆向工程 http www zend com en pr
  • 跨浏览器兼容音频有哪些选项?

    我正在使用这个功能 function playSound file MyAudio new Audio file MyAudio play 不幸的是 我正在努力寻找一种适用于所有浏览器的文件类型 Mp3 适用于 Chrome Safari
  • Rails:包括外部 JavaScript

    我想使用 JavaScript 库 例如 jQuery 插件 我是否使用 Rails 资产管道 或者我应该将其包含在 javascript include tag 中 我有哪些选择以及推荐的做法是什么 您会仅在几个页面上还是在整个应用程序中
  • 是否可以将选择框中的文本居中?

    我试过这个 http jsfiddle net ilyaD KGcC3 http jsfiddle net ilyaD KGcC3 HTML
  • TypeError:React 中的循环对象值

    这是我的代码 sendMail e e preventDefault fetch https uczsieapp mailer herokuapp com var name document getElementById name var
  • 我可以使用 javascript 生成 JSON 文件吗?

    我想在域 example1 com 上创建一个页面 并获取 解析另一个域 example2 com json json 上的 JSON 文件 可以使用 javascript 生成 json 文件 在 example2 com 上 吗 我认为
  • 网页优化:为什么组合文件速度更快?

    我读过 将所有 css 文件合并为一个大文件 或将所有脚本文件合并为一个脚本文件 可以减少 HTTP 请求的数量 从而加快下载速度 但我不明白这一点 我认为如果你有多个文件 最多有一个限制 我相信在现代浏览器上是 10 个 浏览器会并行下载
  • 如何将背景颜色(或自定义 css 类)应用于网格中的列 - ExtJs 4?

    看起来应该很简单 但我根本无法完成此任务 我什至不需要动态完成它 例如 假设我有一个简单的 2 列网格设置 如下所示 columns header USER dataIndex firstName width 70 cls red head
  • 如何判断CKEditor是否已加载?

    如何确定 CKEditor 是否已加载 我查看了API文档 但只能找到loaded事件 我想检查 CKEditor 是否已加载 因为如果我第二次加载它 我的文本区域就会消失 The loaded活动对我不起作用 instanceReady
  • 解析器阻塞与渲染阻塞

    我一直在阅读有关优化网络性能的 Google 开发人员文档 我对那里使用的术语有点困惑 CSS 和 JavaScript 文件都会阻止 DOM 构建 但是 CSS 被称为渲染阻塞 而 JavaScript 被称为解析器阻塞 解析器阻塞 和
  • 添加 sigma.js 导航按钮

    我是 javascript 和 sigma js 的新手 我试图让导航按钮在画布中向上 向下 向左 向右滚动 就像发现的那样here http jcml fr jacomyal osdc2012 demo 到目前为止 我有一个简单的例子 我
  • 使用 puppeteer 部署 firebase 功能时说即使我启用了 --no-sandbox 也找不到 chrome

    我正在尝试将 firebase 函数部署到使用 puppeteer 的 firebase 项目 我让它在本地计算机上运行 但是当它尝试在 firebase 上运行时 我收到此错误 Exception from a finished func
  • 如何自动加载 Webpack 中给定目录中的所有 JSON 文件? [复制]

    这个问题在这里已经有答案了 编辑 有一个现有的问题 https stackoverflow com questions 29421409 how to load all files in a subdirectories using web
  • 在 Safari for Lion (OS X 10.7) 中设置滚动条颜色

    Lion 中的新滚动条似乎会根据 body 元素的背景颜色调整 Safari 中的颜色 有没有办法手动设置滚动条是深色还是浅色 我知道有 webkit CSS 选项来设置滚动条的样式 这实际上早于新的 Lion 滚动条 我使用该方法的唯一问
  • gulp-uglify 不会保留文件顺序

    当我使用吞咽丑化 https github com terinjokes gulp uglify为了缩小 Javascript 文件 顺序变得混乱 可以说我让这个任务按预期工作 var gulp require gulp var renam

随机推荐