JS控制CSS3,添加浏览器兼容前缀

不同浏览器对于有些css3属性名字定义的时候,会带上特有的前缀,所以在css编写的时候,经常会一个属性写多个不同的前缀进行兼容。比如:

div
{
transform: rotate(30deg);
-ms-transform: rotate(30deg);        /* IE 9 */
-webkit-transform: rotate(30deg);    /* Safari and Chrome */
-o-transform: rotate(30deg);        /* Opera */
-moz-transform: rotate(30deg);        /* Firefox */
}

有时候,我们需要通过js动态控制css3属性,这时候就需要根据不同的浏览器添加不同的前缀。当然,我们也可以将所有的前缀全部设置,就像以下这种方式:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
    <title>JS控制CSS3,添加浏览器兼容前缀</title>
  </head>
  <body>
       <div id="target" style="background: blue">
      测试
   </div>
  </body>
  <script type="text/javascript">
    var target = document.getElementById("target");
    target.style.MozTransform = ‘rotate(30deg)‘;
    target.style.OTransform = ‘rotate(30deg)‘;
    target.style.msTransform = ‘rotate(30deg)‘;
    target.style.transform = ‘rotate(30deg)‘;
    target.style.webkitTransform = ‘rotate(30deg)‘;

  </script>
</html>

这种方式能够设置属性成功,但是看起来就不是很优雅。代码冗余,而且设置了很多无效的属性。这里可以通过以下的方式,给不同的浏览器加上合适的前缀。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0">
    <title>JS控制CSS3,添加浏览器兼容前缀</title>
  </head>
  <body>
    <div id="target" style="background: blue">
      测试
    </div>
  </body>
  <script type="text/javascript">
  var elementStyle = document.createElement(‘div‘).style;
  var vendor = (function(){
  var transformNames = {
      webkit: ‘webkitTransform‘,
      Moz: ‘MozTransform‘,
      O: ‘OTransform‘,
      ms: ‘msTransform‘,
      standard: ‘transform‘
    };

    for (var key in transformNames) {
      if (elementStyle[transformNames[key]] !== undefined) {
        return key;
      }
    }

    return false;
  })();

  function prefixStyle(style) {
    if (vendor === false) {
      return false;
    }

    if (vendor === ‘standard‘) {
      return style;
    }

    return vendor + style.charAt(0).toUpperCase() + style.substr(1);
  }
  target.style[prefixStyle(‘transform‘)] = ‘rotate(30deg)‘
  </script>
</html>

采用类似于能力检测的方式,找到对应浏览器内核支持的前缀。然后按照规则修改属性,添加前缀。

时间: 2024-10-10 17:24:05

JS控制CSS3,添加浏览器兼容前缀的相关文章

js快速判断IE浏览器(兼容IE10与IE11)

在很多时候,我们一般采用navigator.userAgent和正则表达来判断IE浏览器版本,下面介绍用IE浏览器中不同特性来判断IE浏览器   1 判断IE浏览器与非IE 浏览器 IE浏览器与非IE浏览器的区别是IE浏览器支持ActiveXObject,但是非IE浏览器不支持ActiveXObject.在IE11浏览器还没出现的时候我们判断IE和非IE经常是这么写的 ? 1 2 3 function isIe(){        return window.ActiveXObject ? tr

webpack3中使用postcss-loader和autoprefixer给css3样式添加浏览器兼容

1.在webpack中需要处理css必须先安装如下两个loader npm install --save-dev css-loader style-loader 2.要处理sass和添加浏览器前缀需要下载如下插件和loader //sass-loader依赖于node-sass,所以还要安装node-sass//postcss-loader autoprefixer postcss 处理浏览器兼容 npm install --save-dev sass-loader node-sass post

Js控制Div在浏览器中的高度

//需求是,我需要通过浏览器内容可视化的高度来控制div的高度boxheight(); //执行函数function boxheight(){ //函数:获取尺寸 //获取浏览器窗口高度 var winHeight=0; if (window.innerHeight) winHeight = window.innerHeight; else if ((document.body) && (document.body.clientHeight)) winHeight = document.b

js Date()日期函数浏览器兼容问题解决方法

一般 直接new Date() 是不会出现兼容性问题的,而 new Date(datetimeformatstring) 常常会出现浏览器兼容性问题,为什么,datetimeformatstring中的某些格式浏览器不兼容. 1. 无参 //无参 所有浏览器都兼容 var dateTime = new Date(); 2.日期参数 //日期参数 格式1 var dateTime = new Date("2017-09-12"); a. IE > IE9-(不兼容) > IE

针对css3特性浏览器兼容 封装less

//--------------------------------------------------- // LESS Prefixer //--------------------------------------------------- // // All of the CSS3 fun, none of the prefixes! // // As a rule, you can use the CSS properties you // would expect just by

js 控制 css3高级运动 keyframes

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <script> 7 window.onload=function(){ 8 var arr=[-45,60,-75,90]; 9 var i=0; 10 box.onclick=func

浏览器兼容前缀

-moz-:Firefox -webkit-:Safari,Chrome 无:其他(IE) 如:-moz-border-shadow: #333 3px 3px 4px; -webkit-boder-shadow: #333 3px 3px 4px; border-shadow: #333 3px 3px 4px

浏览器兼容问题及解决方案

1.图片间隙 A)div中的图片间隙(该bug出现在IE6以及更低版本当中) 描述:在div中插入图片时,图片会将div下方撑大三像素 hack1:将</div>和<img>写在一行上 hack2:将<img>转化为块状元素,给<img>添加声明:display:block; B)dt,li中的图片间隙(IE6) hack1:将<img>转化为块状元素,给<img>添加声明:display:block; hack2:<img&g

css之浏览器引擎前缀

Vendor prefix—浏览器引擎前缀,是一些放在CSS属性前的小字符串,用来确保这种属性只在特定的浏览器渲染引擎下才能识别和生效.谷歌浏览器和 Safari浏览器使用的是WebKit渲染引擎,火狐浏览器使用的是Gecko引擎,Internet Explorer使用的是Trident引擎,Opera以前使用Presto引擎,后改为WebKit引擎.一种浏览器引擎里一般不实现其它引擎前缀标 识的CSS属性,但由于以WebKit为引擎的移动浏览器相当流行,火狐等浏览器在其移动版里也实现了部分We