使用javascript设置供应商前缀的CSS

End*_*der 13 javascript css css3 vendor-prefix

......是一个巨大的痛苦.

var transform = 'translate3d(0,0,0)';
elem.style.webkitTransform = transform;
elem.style.mozTransform = transform;
elem.style.msTransform = transform;
elem.style.oTransform = transform;
Run Code Online (Sandbox Code Playgroud)

有没有图书馆/框架/更好的方法来做到这一点?最好只用一行JS?

Tik*_*vis 23

我不知道有没有这样做的库,但如果它们都只是前缀 - 也就是说,名称或语法没有区别 - 自己编写一个函数将是微不足道的.

function setVendor(element, property, value) {
  element.style["webkit" + property] = value;
  element.style["moz" + property] = value;
  element.style["ms" + property] = value;
  element.style["o" + property] = value;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在大多数情况下使用它.

  • 确保大写属性名称(`Transform`而不是`transform`).我发现这很难... (20认同)

cac*_*owe 13

现在是2015年底,情况略有改变.首先,McBrainy对上述资本化的评论很重要.该webkit前缀是现在Webkit,但幸运的是只有在这一点上使用Safari浏览器.Chrome和Firefox el.style.transform现在都支持没有前缀,我认为IE也是如此.以下是针对手头任务的稍微更现代的解决方案.它首先检查我们是否需要为transform属性添加前缀:

var transformProp = (function(){
  var testEl = document.createElement('div');
  if(testEl.style.transform == null) {
    var vendors = ['Webkit', 'Moz', 'ms'];
    for(var vendor in vendors) {
      if(testEl.style[ vendors[vendor] + 'Transform' ] !== undefined) {
        return vendors[vendor] + 'Transform';
      }
    }
  }
  return 'transform';
})();
Run Code Online (Sandbox Code Playgroud)

之后,我们可以使用简单的单行调用来更新transform元素的属性:

myElement.style[transformProp] = 'translate3d(0,' + dynamicY + 'px,0)';
Run Code Online (Sandbox Code Playgroud)


小智 6

您可以使用Javascript找到相应的供应商前缀,代码如下 -

var prefix = (function () {
  var styles = window.getComputedStyle(document.documentElement, ''),
    pre = (Array.prototype.slice
      .call(styles)
      .join('') 
      .match(/-(moz|webkit|ms)-/) || (styles.OLink === '' && ['', 'o'])
    )[1],
    dom = ('WebKit|Moz|MS|O').match(new RegExp('(' + pre + ')', 'i'))[1];
  return {
    dom: dom,
    lowercase: pre,
    css: '-' + pre + '-',
    js: pre[0].toUpperCase() + pre.substr(1)
  };
})();
Run Code Online (Sandbox Code Playgroud)

以上内容返回相应浏览器供应商前缀的对象.

在我的脚本中保存了很多重复的代码.

来源 - David Walsh的博客:https://davidwalsh.name/vendor-prefix