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的原型继承
Jul 25 Javascript
JavaScript实现网页图片等比例缩放实现代码及调用方式
Feb 25 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
创建js对象和js类的方法汇总
Dec 24 Javascript
jquery使用remove()方法删除指定class子元素
Mar 26 Javascript
简单谈谈node.js 版本控制 nvm和 n
Oct 15 Javascript
javascript中UMD规范的代码推演
Aug 29 Javascript
vue下拉菜单组件(含搜索)的实现代码
Nov 25 Javascript
微信小程序实现的3d轮播图效果示例【基于swiper组件】
Dec 11 Javascript
微信小程序实现购物车代码实例详解
Aug 29 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 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
Dedecms V3.1 生成HTML速度的优化办法
2007/03/18 PHP
解析php中curl_multi的应用
2013/07/17 PHP
Smarty使用自定义资源的方法
2015/08/08 PHP
php实现微信公众号主动推送消息
2015/12/31 PHP
php模板引擎技术简单实现
2016/03/15 PHP
php模拟post上传图片实现代码
2016/06/24 PHP
Extjs ajax同步请求时post方式参数发送方式
2009/08/05 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jquery photoFrame 图片边框美化显示插件
2010/06/28 Javascript
JS判断数组中是否有重复值得三种实用方法
2013/08/16 Javascript
jQuery实现平滑滚动的标签分栏切换效果
2015/08/28 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
详解js的事件处理函数和动态创建html标记方法
2016/12/16 Javascript
canvas实现粒子时钟效果
2017/02/06 Javascript
浅谈react.js 之 批量添加与删除功能
2017/04/17 Javascript
input file样式修改以及图片预览删除功能详细概括(推荐)
2017/08/17 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
[01:08]DOTA2次级职业联赛 - Shield战队宣传片
2014/12/01 DOTA
使用Python的内建模块collections的教程
2015/04/28 Python
python实现堆和索引堆的代码示例
2018/03/19 Python
pandas 根据列的值选取所有行的示例
2018/11/07 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Hotels.com南非:酒店预订
2017/11/02 全球购物
意大利单身交友网站:Meetic
2020/07/12 全球购物
大四自我鉴定
2014/02/08 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
邀请函模板
2015/02/02 职场文书
工作能力自我评价2015
2015/03/05 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
2016秋季田径运动会广播稿
2015/12/21 职场文书
python如何在word中存储本地图片
2021/04/07 Python
Redis批量生成数据的实现
2022/06/05 Redis
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL