JavaScript快速检测浏览器对CSS3特性的支持情况


Posted in Javascript onSeptember 26, 2012

在项目中需要快速检测浏览器是否支持某CSS3特性,比如检测是否支持“transform”,然后我的布局会有两种完全不同的版式。

当然除开本文介绍的这种快速方法,还有一种更有名和更通用的方法,那就是modernizr,运行脚本之后它会在html的class上加上浏览器支持的所有特性的列表。

优点:

js是可配置的,不需要的特性检测可以在配置脚本中去掉基于特性检测js库简单好用

JavaScript快速检测浏览器对CSS3特性的支持情况

除此之外还有一种不太好的方法,那就是判断浏览器的UA,不好的原因是UA可能会伪造,而且版本判断繁琐,还有不稳定。

优点:性能可能是最优的

最后就是本文介绍的这个方法,我写了一个函数快速检测是否浏览器支持某CSS特性,适合的场景是快速需要知道浏览器是否支持某一个CSS特性(而不是好几个)。

优点:

性能不错通用性强适合检测单个CSS特性
var supports = (function() { 
var div = document.createElement('div'), 
vendors = 'Khtml O Moz Webkit'.split(' '), 
len = vendors.length; 
return function(prop) { 
if ( prop in div.style ) return true; 
if ('-ms-' + prop in div.style) return true; 
prop = prop.replace(/^[a-z]/, function(val) { 
return val.toUpperCase(); 
}); 
while(len--) { 
if ( vendors[len] + prop in div.style ) { 
return true; 
} 
} 
return false; 
}; 
})(); 
if ( supports('textShadow') ) { 
document.documentElement.className += ' textShadow'; 
}

这就是最终代码,原理是:

1.创建一个div,然后可以获得div.style,这是它所支持的属性的数组列表。

JavaScript快速检测浏览器对CSS3特性的支持情况

2.检查text是否包含在数组中,如果是,直接返回true。

3.检查各种前缀,比如Webkit加上text,即webkitTransition,如果包含在style中,返回true。

4.值得注意的是在CSS中属性名为:-webkit-transition,但是在DOM的style中 ,却是对应webkitTransition。我也不知道为什么会这样。

参考资料:http://net.tutsplus.com/tutorials/html-css-techniques/quick-tip-detect-css-support-in-browsers-with-javascript/

Javascript 相关文章推荐
javascript json 新手入门文档
Dec 03 Javascript
FusionCharts图表显示双Y轴双(多)曲线
Nov 22 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
Apr 11 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
jquery分析文本里url或邮件地址为真实链接的方法
Jun 20 Javascript
javascript中Array()数组函数详解
Aug 23 Javascript
vue 项目如何引入微信sdk接口的方法
Dec 18 Javascript
代码详解javascript模块加载器
Mar 04 Javascript
JS数组去重的6种方法完整实例
Dec 08 Javascript
JS异步错误捕获的一些事小结
Apr 26 Javascript
关于JSON解析的实现过程解析
Oct 08 Javascript
VSCode Vue开发推荐插件和VSCode快捷键(小结)
Aug 08 Javascript
JavaScript 参数中的数组展开 [译]
Sep 21 #Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 #Javascript
使用apply方法处理数组的三个技巧[译]
Sep 20 #Javascript
js DOM 元素ID就是全局变量
Sep 20 #Javascript
JavaScript NaN和Infinity特殊值 [译]
Sep 20 #Javascript
JavaScript 更严格的相等 [译]
Sep 20 #Javascript
JavaScript 反科里化 this [译]
Sep 20 #Javascript
You might like
一个取得文件扩展名的函数
2006/10/09 PHP
Zend Framework框架路由机制代码分析
2016/03/22 PHP
如何直接访问php实例对象中的private属性详解
2017/10/12 PHP
PHP基于redis计数器类定义与用法示例
2018/02/08 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
javascript实现仿百度图片的瀑布流加载效果
2016/04/20 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
AngularJS ng-bind-template 指令详解
2016/07/30 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
微信小程序中的onLoad详解及简单实例
2017/04/05 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
Node.js path模块,获取文件后缀名操作
2020/11/07 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
详解Django框架中用context来解析模板的方法
2015/07/20 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python3+PyQt5+Qt Designer实现扩展对话框
2018/04/20 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
2019/09/18 Python
如何理解python中数字列表
2020/05/29 Python
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
美国家庭鞋店:Shoe Sensation
2019/09/27 全球购物
Boolean b = new Boolean(“abcde”); 会编译错误码
2013/11/27 面试题
CAD制图设计师自荐信
2014/01/29 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
歌颂祖国演讲稿
2014/05/04 职场文书
兽医医药专业求职信
2014/07/27 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2014年标准化工作总结
2014/12/17 职场文书
2016年六一文艺汇演开幕词
2016/03/04 职场文书
python3 实现mysql数据库连接池的示例代码
2021/04/17 Python