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 相关文章推荐
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
Jul 26 Javascript
网页源代码保护(禁止右键、复制、另存为、查看源文件)
May 23 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
含有CKEditor的表单如何提交
Jan 09 Javascript
JavaScript也谈内存优化
Jun 06 Javascript
深入理解JavaScript系列(45):代码复用模式(避免篇)详解
Mar 04 Javascript
JavaScript 栈的详解及实例代码
Jan 22 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
Feb 09 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
Jul 12 Javascript
Angularjs的$http异步删除数据详解及实例
Jul 27 Javascript
jQuery事件blur()方法的使用实例讲解
Mar 30 jQuery
React Hooks 实现和由来以及解决的问题详解
Jan 17 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
php下使用以下代码连接并测试
2008/04/09 PHP
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php实现递归的三种基本方式
2020/07/04 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
PHP+ajax实现上传、删除、修改单张图片及后台处理逻辑操作详解
2020/02/12 PHP
php中数组最简单的使用方法
2020/12/27 PHP
JavaScript中Object和Function的关系小结
2009/09/26 Javascript
js,jQuery 排序的实现代码,网页标签排序的实现,标签排序
2011/04/27 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
js获取滚动距离的方法
2015/05/30 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
NodeJs模拟登陆正方教务
2017/04/28 NodeJs
H5上传本地图片并预览功能
2017/05/08 Javascript
Node.js五大应用性能技巧小结(必须收藏)
2017/08/09 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
微信小程序监听用户登录事件的实现方法
2019/11/11 Javascript
JS使用setInterval计时器实现挑战10秒
2020/11/08 Javascript
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python可视化实现代码
2019/01/15 Python
pip安装python库的方法总结
2019/08/02 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
餐饮业会计岗位职责
2013/12/19 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
2015年招聘工作总结
2014/12/12 职场文书
2015年车间主任工作总结
2015/05/21 职场文书
公司员工奖惩制度
2015/08/04 职场文书
2019单位介绍信怎么写
2019/06/24 职场文书