在编写 CSS 的时候,常常需要考虑游览器的兼容,需要给样式加上前缀。在 webpack 中直接写 CSS 的时候有 autoprefixer 插件帮我们自动添加,很方便。但是在 JS 中添加 CSS 的时候,插件就不起作用了,这个时候,就需要自己来添加了。所以可以实现一个函数,来为我们自动添加相应的游览器兼容前缀。
直接上代码:
let elementStyle = document.createElement('div').style
let vendor = (() => { let transformNames = { webkit: 'webkitTransform', Moz: 'MozTransform', O: 'OTransform', ms: 'msTransform', standard: 'transform' }
for (let key in transformNames) { if (elementStyle[transformNames[key]] !== undefined) { return key } }
return false })()
export function prefixStyle (style) { if (vendor === false) { return false } if (vendor === 'standard') { return style }
return vendor + style.charAt(0).toUpperCase() + style.substr(1) }
|
首先,使用 createElement() 方法得到 Element 对象,然后得到游览器支持的 style 样式。
然后使用一个立即执行函数,来获取到样式前缀。
然后导出一个 prefixStyle 函数,需要使用的时候直接 import 导入就可以了。
使用的例子:
import {prefixStyle} from 'common/js/dom'
const transform = prefixStyle('transform')
let m = document.querySelector('.box') m.style[transform] = 'scale(2)'
m.style['webkitTransform'] = 'scale(2)'
|
例如,游览器用的是 webkit 内核,那么 prefixStyle(‘transform’) 就可以得到 webkitTransform。
这样就很方便的给样式加上了前缀,因为使用了模块化的思想,所以可以很方便的重复使用。