用JavaScript判断CSS浏览器类型前缀的两种方法


Posted in Javascript onOctober 08, 2015

不管我们对浏览器类型前缀有多么的讨厌,我们都不得不每天面对它,否者有些东西不能正常工作。这些前缀的用法有两种:在CSS里(例如“-moz-”)和在JS里。有一个神奇的 X-Tag 项目里有一段很聪明的JavaScript脚本,可以用来判断当前使用的是什么前缀——让我来展示它是如何工作的!

比如 CSS 前缀,IE 的是 "-ms-",旧版 Opera 的是 "-o-",Firefox 的是 "-moz-",Safari/Chrome 是 "-webkit-"。JavaScript 有多种方式判断它们。

方法1: 特性判断

// 取浏览器的 CSS 前缀
var prefix = function() {
  var div = document.createElement('div');
  var cssText = '-webkit-transition:all .1s; -moz-transition:all .1s; -o-transition:all .1s; -ms-transition:all .1s; transition:all .1s;';
  div.style.cssText = cssText;
  var style = div.style;
  if (style.webkitTransition) {
    return '-webkit-';
  }
  if (style.MozTransition) {
    return '-moz-';
  }
  if (style.oTransition) {
    return '-o-';
  }
  if (style.msTransition) {
    return '-ms-';
  }
  return '';
}();

通过创建一个div,给其分别添加 -webkit-、-moz-、-o-、-ms- 的前缀 css 样式,然后获取 style,通过 style.xxxTransition 判断是哪种前缀。

方法2: getComputedStyle 获取 documentElement 所有样式再解析

先通过 window.getComputedStyle 获取 styles,将 styles 转成数组

var styles = window.getComputedStyle(document.documentElement, '');
var arr = [].slice.call(styles);
console.log(arr);

Firefox arr 如下

用JavaScript判断CSS浏览器类型前缀的两种方法

Chrome arr 如下

用JavaScript判断CSS浏览器类型前缀的两种方法

能看到取到了具有各自浏览器自身实现的 CSS 前缀名称。

把所有属性连接成一个字符串,然后用正则表达式匹配就能找出前缀了

// 取浏览器的 CSS 前缀
var prefix = function() {
  var styles = window.getComputedStyle(document.documentElement, '');
  var core = (
    Array.prototype.slice
    .call(styles)
    .join('')
    .match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])
  )[1];
  return '-' + core + '-';
}();

 我们看到 方法2 比 方法1 代码量少了许多。无论是方法1 和 方法2 ,都采用匿名函数一次性执行后返回结果,不需要每次判断都调用一下函数。

以上内容就是小编通过两种方法给大家介绍的用JavaScript判断CSS浏览器类型前缀,希望大家喜欢。

Javascript 相关文章推荐
个人总结的一些关于String、Function、Array的属性和用法
Jan 10 Javascript
jQuery 表单验证扩展代码(一)
Oct 11 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
Jul 17 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成"...")
Nov 28 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
Dec 05 Javascript
node.js程序作为服务并在windows下开机自启动(用forever)
Mar 29 Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 Javascript
node前端开发模板引擎Jade的入门
May 11 Javascript
JS实现音量控制拖动
Jan 15 Javascript
在vue中实现清除echarts上次保留的数据(亲测有效)
Sep 09 Javascript
JS实现三个层重叠点击互相切换的方法
Oct 06 #Javascript
JS实现的文字与图片定时切换效果代码
Oct 06 #Javascript
JS实现淡蓝色简洁竖向Tab点击切换效果
Oct 06 #Javascript
JS+CSS相对定位实现的下拉菜单
Oct 06 #Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 #Javascript
javascript日期格式化方法汇总
Oct 04 #Javascript
jQuery插件Timelinr 实现时间轴特效
Oct 04 #Javascript
You might like
汉字转化为拼音(php版)
2006/10/09 PHP
PHP获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
PHP实现支持SSL连接的SMTP邮件发送类
2015/03/05 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
PHP生成唯一订单号
2015/07/05 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JavaScript Math.floor方法(对数值向下取整)
2015/01/09 Javascript
D3.js实现饼状图的方法详解
2016/09/21 Javascript
js实现水平滚动菜单导航
2017/07/21 Javascript
vue watch深度监听对象实现数据联动效果
2018/08/16 Javascript
详解easyui 切换主题皮肤
2019/04/04 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
浅谈Vue3.0新版API之composition-api入坑指南
2020/04/30 Javascript
[08:04]TI4西雅图DOTA2前线报道 海涛探访各路人马
2014/07/09 DOTA
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
[01:01:42]Secret vs Optic Supermajor 胜者组 BO3 第二场 6.4
2018/06/05 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
在Python中操作列表之List.pop()方法的使用
2015/05/21 Python
python 网络爬虫初级实现代码
2016/02/27 Python
python绘制铅球的运行轨迹代码分享
2017/11/14 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
python实现决策树分类
2018/08/30 Python
Python何时应该使用Lambda函数
2019/07/02 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
2020/12/05 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
安全责任书怎么写
2014/07/28 职场文书
安全教育主题班会教案
2015/08/12 职场文书
详细了解MVC+proxy
2021/07/09 Java/Android
SQL Server中常用截取字符串函数介绍
2022/03/16 SQL Server
python Tkinter模块使用方法详解
2022/04/07 Python
字节飞书面试promise.all实现示例
2022/06/16 Javascript