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实现的仿sohu博客更换页面风格(简单版)
Mar 22 Javascript
jQuery asp.net 用json格式返回自定义对象
Apr 07 Javascript
javaScript矢量图表库-gRaphael几行代码实现精美的条形图/饼图/点图/曲线图
Jan 09 Javascript
JS的千分位算法实现思路
Jul 31 Javascript
node.js中的fs.createWriteStream方法使用说明
Dec 17 Javascript
javascript原型模式用法实例详解
Jun 04 Javascript
Node.js 文件夹目录结构创建实例代码
Jul 08 Javascript
js阻止冒泡和默认事件(默认行为)详解
Oct 20 Javascript
Javascript中字符串和数字的操作方法整理
Jan 22 Javascript
Vue.js实现一个todo-list的上移下移删除功能
Jun 26 Javascript
基于Vue单文件组件详解
Sep 15 Javascript
js判断输入框不能为空格或null值的实现方法
Mar 02 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
JAVA/JSP学习系列之六
2006/10/09 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
php校验表单检测字段是否为空的方法
2015/03/20 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
JSON 学习之JSON in JavaScript详细使用说明
2010/02/23 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
javascript 图片裁剪技巧解读
2012/11/15 Javascript
javascript 原型链维护和继承详解
2014/11/26 Javascript
详解Bootstrap的aria-label和aria-labelledby应用
2016/01/04 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
小程序开发中如何使用async-await并封装公共异步请求的方法
2019/01/20 Javascript
layer.confirm()右边按钮实现href的例子
2019/09/27 Javascript
Python标准库之随机数 (math包、random包)介绍
2014/11/25 Python
Python中使用copy模块实现列表(list)拷贝
2015/04/14 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Django2.1集成xadmin管理后台所遇到的错误集锦(填坑)
2018/12/20 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python操作Jira库常用方法解析
2020/04/10 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
Python文件操作及内置函数flush原理解析
2020/10/13 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
手机业务员岗位职责
2013/12/13 职场文书
小学英语教学反思案例
2014/02/04 职场文书
2014年公务员工作总结
2014/11/18 职场文书
2014年人事部工作总结
2014/12/03 职场文书
新闻通讯稿范文
2015/07/22 职场文书
幼儿园音乐教学反思
2016/02/18 职场文书
mysql备份策略的实现(全量备份+增量备份)
2021/07/07 MySQL
Nginx 配置 HTTPS的详细过程
2022/05/30 Servers