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 相关文章推荐
JavaScript DOM学习第八章 表单错误提示
Feb 19 Javascript
理解JavaScript中的对象 推荐
Jan 09 Javascript
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
May 24 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
Sep 21 Javascript
jquery序列化表单去除指定元素示例代码
Apr 10 Javascript
全面解析Bootstrap弹窗的实现方法
Dec 01 Javascript
JavaScript简单实现鼠标移动切换图片的方法
Feb 23 Javascript
浅谈vuejs实现数据驱动视图原理
Feb 23 Javascript
详解jQuery中的getAll()和cleanData()
Apr 15 jQuery
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
Jul 18 Javascript
vue 调用 RESTful风格接口操作
Aug 11 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加速 eAccelerator配置和使用指南
2009/06/05 PHP
PHP中的命名空间详细介绍
2015/07/02 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
用函数式编程技术编写优美的 JavaScript_ibm
2008/05/16 Javascript
Javascript 面向对象 对象(Object)
2010/05/13 Javascript
js getBoundingClientRect() 来获取页面元素的位置
2010/11/25 Javascript
js实现动态改变字体大小代码
2014/01/02 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
2015/05/18 Javascript
JavaScript实现将数组数据添加到Select下拉框的方法
2015/08/21 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
vue.js 实现评价五角星组件的实例代码
2018/08/13 Javascript
谈谈我在vue-cli3中用预渲染遇到的坑
2020/04/22 Javascript
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
[01:07:17]EG vs Optic Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
python快速排序代码实例
2013/11/21 Python
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
python多线程操作实例
2014/11/21 Python
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
Sanic框架异常处理与中间件操作实例分析
2018/07/16 Python
Python实现的括号匹配判断功能示例
2018/08/25 Python
详解python项目实战:模拟登陆CSDN
2019/04/04 Python
基于 Python 实践感知器分类算法
2021/01/07 Python
matplotlib交互式数据光标实现(mplcursors)
2021/01/13 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
Html5定位终极解决方案
2020/02/05 HTML / CSS
亚洲最大旅游体验平台:KKday
2017/10/21 全球购物
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
ORLY官网:美国专业美甲一线品牌
2019/12/11 全球购物
世界上最好的野生海鲜和有机食品:Vital Choice
2020/01/16 全球购物
测试时代收集的软件测试面试题
2013/09/25 面试题
党建示范点实施方案
2014/03/12 职场文书
新年寄语大全
2014/04/12 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技