如何使用 vanilla JavaScript 将供应商前缀的渐变添加到元素中?[复制]

How to add vendor prefixed gradients to an element with vanilla JavaScript? [duplicate]

提问人:Madara's Ghost 提问时间:6/15/2015 更新时间:6/15/2015 访问量:207

问:

我想以编程方式为元素添加渐变背景。

使用适当的 CSS,这将是这样的

background: -moz-linear-gradient(top, #000000 0%, #ffffff 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#000000), color-stop(100%,#ffffff)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #000000 0%,#ffffff 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #000000 0%,#ffffff 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #000000 0%,#ffffff 100%); /* IE10+ */
background: linear-gradient(to bottom, #000000 0%,#ffffff 100%); /* W3C */

现在,我想用 JavaScript 来做到这一点。所以我想到了这样的事情:

gradientList.forEach(gradient => el.style.background = gradient)

但是,这是行不通的。每次都会覆盖 background 属性,并且仅应用列表中的最后一个渐变。

对于大多数其他属性,供应商之间的属性名称不同,但是,它们都是 .linear-gradientbackground

现在,我知道我可以向元素添加一个类名并附加一个节点(这就是我现在正在做的事情),但它非常黑客,我想要一种更好的 DOM 做事方式。styledocument.head

简而言之,如何使用 vanilla JavaScript 将供应商前缀渐变添加到 DOM 元素中?

JavaScript HTML CSS

评论

1赞 Florian Margaine 6/15/2015
在我的脑海中,我只是上了一堂课。
0赞 ndugger 6/15/2015
我也会上一堂课。否则,你必须遍历所有 DOM 对象,只是为了检查它们是否有背景,然后为它添加前缀。您可以按类选择它,但您也可以将前缀添加到类中。
1赞 Harry 6/15/2015
我正要发布这个,然后它被标记为欺骗:)浏览器前缀识别脚本来自 Lea Verou 的网站
0赞 Aurelio 6/15/2015
或者,您可以通过属性设置内联样式,就像在这个素材箱中一样。我在这里回答了另一个问题,增加了更多的解释。style
1赞 Madara's Ghost 6/15/2015
@Nobita这绝对有效。我认为这是迄今为止最好的方法。

答:

2赞 Benjamin Gruenbaum 6/15/2015 #1

假设您不想浏览库,那么简单的方法是检测浏览器,然后执行以下操作:

el.style.background = browserPrefix + gradient;

总的来说,无前缀的库还为渐变规范了一堆其他东西,所以我强烈推荐它。

评论

0赞 Madara's Ghost 6/15/2015
浏览器检测也是一种方法,但如果可能的话,我想避免它。仍然比添加节点 IMO 更好的选择。无前缀是否适用于注入 JavaScript 的样式?style
1赞 Benjamin Gruenbaum 6/15/2015
大卫·威尔士(David Welsh)在这里写了一篇关于快速和肮脏的文章:davidwalsh.name/vendor-prefix
0赞 Benjamin Gruenbaum 6/15/2015
@MadaraUchiha 是的 - prefix-free 可以选择这样做 - 检查文档。