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

IT技术 javascript css vendor-prefix
2021-02-10 17:36:41

……是巨大的痛苦。

var transform = 'translate3d(0,0,0)';
elem.style.webkitTransform = transform;
elem.style.mozTransform = transform;
elem.style.msTransform = transform;
elem.style.oTransform = transform;

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

5个回答

我不知道有任何库可以做到这一点,但如果它们都只是前缀——也就是说,名称或语法没有区别——自己编写函数将是微不足道的。

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;
}

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

确保您将属性名称大写(Transform而不是transform)。我发现这很难...
2021-03-17 17:36:41

现在是 2015 年底,情况略有变化。首先,McBrainy 上面关于大写的评论很重要。webkit前缀是现在Webkit,但幸运的是只有在这一点上使用Safari浏览器。Chrome 和 Firefoxel.style.transform现在都支持没有前缀,我认为 IE 也支持。下面是针对手头任务的稍微更现代的解决方案。它首先检查我们是否甚至需要为我们的转换属性添加前缀:

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';
})();

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

myElement.style[transformProp] = 'translate3d(0,' + dynamicY + 'px,0)';
似乎 Firefox 对非前缀转换的支持现在非常普遍:caniuse.com/#search=transform
2021-03-15 17:36:41

您可以通过以下代码使用 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)
  };
})();

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

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

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

请直接在此处发布外部链接答案的相关部分,因为外部来源可能会发生变化。
2021-03-24 17:36:41
此方法基于这样一个事实,即样式声明中总会有一个以供应商为前缀的属性。
2021-04-07 17:36:41

有这个 jquery 插件可以处理它 https://github.com/codler/jQuery-Css3-Finalize

@AdamArold 他要求“一个图书馆/框架/更好的方法来做到这一点”。这可以是一个 jQuery 插件
2021-03-25 17:36:41
他没有要求使用 jquery 工具。
2021-03-29 17:36:41

例如,如果您使用 Gulp 设置工作流程,则可以使用 Postcss autoprefixer,它是解决浏览器供应商前缀的便捷工具。它使用 JS 来转换你的 css。