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 相关文章推荐
JS获取父节点方法
Aug 20 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
JavaScript 对象链式操作测试代码
Apr 25 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
用js设置下拉框为只读的小技巧
Apr 10 Javascript
jQuery验证插件validation使用指南
Apr 21 Javascript
javascript事件委托的方式绑定详解
Jun 10 Javascript
jQuery实现有动画淡出效果的二级折叠菜单代码
Oct 17 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
jquery实现拖动效果
Aug 10 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
Feb 11 Javascript
js实现图片粘贴到网页
Dec 06 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中的时间处理
2006/10/09 PHP
用php过滤危险html代码的函数
2008/07/22 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
js列举css中所有图标的实现代码
2011/07/04 Javascript
js动态加载以及确定加载完成的代码
2011/07/31 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
jQuery实现的仿百度分页足迹效果代码
2015/10/30 Javascript
js操作数组函数实例小结
2015/12/10 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
用js读写cookie的简单方法(推荐)
2016/08/08 Javascript
基于jQuery和Bootstrap框架实现仿知乎前端动态列表效果
2016/11/09 Javascript
JavaScript获取中英文混合字符串长度的方法示例
2017/02/04 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
解决vue页面刷新或者后退参数丢失的问题
2018/03/13 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
2019/03/29 Javascript
vue使用axios上传文件(FormData)的方法
2019/04/14 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
python编程实现12306的一个小爬虫实例
2017/12/27 Python
pandas groupby 分组取每组的前几行记录方法
2018/04/20 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
2018/07/18 Python
jupyter修改文件名方式(TensorFlow)
2020/04/21 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
秦兵马俑教学反思
2014/02/07 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
厨房管理计划书
2014/04/27 职场文书
2014年医院党建工作总结
2014/12/20 职场文书
先进班集体事迹材料
2014/12/25 职场文书
酒店圣诞节活动总结
2015/05/06 职场文书
致男子1500米运动员的广播稿
2019/11/08 职场文书
详解缓存穿透击穿雪崩解决方案
2021/05/28 Redis
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
centos7安装mysql5.7经验记录
2022/05/02 Servers
Web应用开发TypeScript使用详解
2022/05/25 Javascript