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 相关文章推荐
jQuery.ajax 用户登录验证代码
Oct 29 Javascript
一个简单的jQuery计算器实现了连续计算功能
Jul 21 Javascript
JavaScript是如何实现继承的(六种方式)
Mar 31 Javascript
详解照片瀑布流效果(js,jquery分别实现与知识点总结)
Jan 01 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
Apr 27 Javascript
JS全角与半角转化实例(分享)
Jul 04 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
Sep 06 Javascript
微信小程序动态生成二维码的实现代码
Jul 25 Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
Vue 表情包输入组件的实现代码
Jan 21 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
Oct 16 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 过滤危险html代码
2009/06/29 PHP
浅析php中常量,变量的作用域和生存周期
2013/08/10 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP的openssl加密扩展使用小结(推荐)
2016/07/18 PHP
PHP实现的简单AES加密解密算法实例
2017/05/29 PHP
PHP代码覆盖率统计详解
2020/07/22 PHP
网页自动跳转代码收集
2009/09/27 Javascript
javascript模版引擎-tmpl的bug修复与性能优化分析
2011/10/23 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
JavaScript中解析JSON数据的三种方法
2015/07/03 Javascript
Bootstrap创建可折叠的组件
2016/02/23 Javascript
详解angular element()方法使用
2017/04/08 Javascript
详解Javascript中new()到底做了些什么?
2018/03/29 Javascript
对layui初始化列表的CheckBox属性详解
2019/09/13 Javascript
原生JS生成指定位数的验证码
2020/10/28 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
Python  连接字符串(join %)
2008/09/06 Python
django 取消csrf限制的实例
2020/03/13 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
2020/07/14 Python
python palywright库基本使用
2021/01/21 Python
css3实现input输入框颜色渐变发光效果代码
2014/04/02 HTML / CSS
Canvas 文本转粒子效果的实现代码
2019/02/14 HTML / CSS
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
医学检验专业个人求职信范文
2013/12/04 职场文书
企业项目策划书
2014/01/11 职场文书
党员贯彻十八大精神思想汇报范文
2014/10/25 职场文书
2014年绿化工作总结
2014/12/09 职场文书
采购员岗位职责
2015/02/03 职场文书
工作简历自我评价
2015/03/11 职场文书
奖励通知
2015/04/22 职场文书
员工规章制度范本
2015/08/07 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python