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实现单一html页面两套css切换代码
Apr 11 Javascript
自动设置iframe大小的jQuery代码
Sep 11 Javascript
js时间比较示例分享(日期比较)
Mar 05 Javascript
jquery使用jxl插件导出excel示例
Apr 14 Javascript
js中自定义方法实现停留几秒sleep
Jul 11 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
jQuery自定义滚动条完整实例
Jan 08 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
Aug 17 Javascript
js实现unicode码字符串与utf8字节数据互转详解
Mar 21 Javascript
layui添加动态菜单与选项卡
Jul 26 Javascript
浅谈react useEffect闭包的坑
Jun 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
咖啡的传说和历史
2021/03/03 新手入门
新闻分类录入、显示系统
2006/10/09 PHP
我用php+mysql写的留言本
2006/10/09 PHP
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
2016/01/07 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
jQuery1.9.1源码分析系列(十六)ajax之ajax框架
2015/12/04 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
微信小程序中使元素占满整个屏幕高度实现方法
2016/12/14 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
JS中IP地址与整数相互转换的实现代码
2017/04/10 Javascript
使用node.js搭建服务器
2017/05/20 Javascript
在Angular中使用JWT认证方法示例
2018/09/10 Javascript
Vue+ElementUI table实现表格分页
2019/12/14 Javascript
[02:26]DOTA2英雄米拉娜基础教程
2013/11/25 DOTA
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
PyChar学习教程之自定义文件与代码模板详解
2017/07/17 Python
Python程序运行原理图文解析
2018/02/10 Python
Python使用matplotlib绘图无法显示中文问题的解决方法
2018/03/14 Python
Windows下安装Scrapy
2018/10/17 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python 解决OPEN读文件报错 ,路径以及r的问题
2019/12/19 Python
解决pycharm下pyuic工具使用的问题
2020/04/08 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
IRO美国官网:法国服装品牌
2018/03/06 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
食品流通安全承诺书
2014/05/22 职场文书
交通事故协议书范本
2014/11/18 职场文书
解除同居协议书
2015/01/29 职场文书
2015年求职自荐信范文
2015/03/04 职场文书
2015年暑假生活总结
2015/07/13 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
MySQL中一条update语句是如何执行的
2022/03/16 MySQL