Настройка CSS с префиксом поставщика с использованием javascript
... это огромная боль.
var transform = 'translate3d(0,0,0)';
elem.style.webkitTransform = transform;
elem.style.mozTransform = transform;
elem.style.msTransform = transform;
elem.style.oTransform = transform;
Есть ли библиотека/структура/лучший способ сделать это? Предпочтительно только с одной линией JS?
Ответы
Ответ 1
Я не знаю ни одной библиотеки, которая делает это, но если все они просто префиксы - то есть нет разницы в имени или синтаксисе - писать функцию самостоятельно было бы тривиально.
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;
}
Тогда вы можете просто использовать это в большинстве случаев.
Ответ 2
В настоящее время в конце 2015 года ситуация немного изменилась. Прежде всего, важно, чтобы McBrainy прокомментировал вышеприведенную капитализацию. Префикс webkit
теперь webkit
, но, к счастью, используется только Safari в этой точке. И Chrome, и Firefox поддерживают el.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)';
Ответ 3
Вы можете найти соответствующий префикс поставщика с помощью 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)
};
})();
Вышеупомянутый возвращает объект соответствующего префикса поставщика браузера.
Сохранено много дубликатов кода в моих сценариях.
Источник - Дэвид Уолш блог: https://davidwalsh.name/vendor-prefix
Ответ 4
Вот этот плагин jquery, который позаботится об этом
https://github.com/codler/jQuery-Css3-Finalize
Ответ 5
Если вы настраиваете рабочий процесс с помощью Gulp, например, вы можете использовать Postcss autoprefixer, что является удобным инструментом при решении браузера префиксы поставщиков. Он использует JS, чтобы преобразовать вас в css.