Как проверить, принимает ли transitionProperty (и др.) имена свойств стиля с префиксом поставщика или нормализованные?

Вот отрывок кода JS, который устанавливает CSS:

function hyphen_style(style) {
    return style.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-');
}


var css = "#debug_element_highlighter_container * {"+
hyphen_style(Modernizr.prefixed('transitionDuration')) + ": 2s, 2s;" + 
hyphen_style(Modernizr.prefixed('transitionProperty')) + ": transform, opacity;" + 

... 

// append a style tag to head 
var head = document.getElementsByTagName("head")[0];
var style = document.createElement("style");
style.type = "text/css";
if (style.styleSheet){
    style.styleSheet.cssText = css;
} else {
    style.appendChild(document.createTextNode(css));
}

Теперь это работает, но я помню, что не так давно у меня были браузеры, отказывавшиеся сотрудничать без установки transitionProperty с использованием префикса поставщика версии свойства стиля transform, т. е. CSS должен был прочитать -webkit-transition-property: -webkit-transform, opacity;, чтобы браузер вел себя как так, как я хочу.

Ясно, что это должно по-прежнему работать сегодня с браузерами, которые также поддерживают -webkit-transition-property: transform, opacity;, но мы видим, что есть четыре различных возможности комбинирования для того, следует ли добавлять префикс поставщика к имени стиля или свойствам стиля, установленным для этих стилей. Не исключено, что в какой-то момент в будущем какой-нибудь веб-браузер внезапно перестанет проверять префиксы -webkit-.

Modernizr (и документация Modernizr) предоставляет нам примитивы (prefixed() и подобные) для преобразования между ними, но мне не ясно, как провести надежное тестирование, требуют ли стили после моды transitionProperty установки имен свойств стиля с префиксом или нет. Довольно просто протестировать сами стили, чтобы увидеть, нужно ли им префикс, просто назначив стили без префикса и посмотрев, «принимает ли он». Но я менее уверен, что этот же подход будет работать для особого случая указания имен свойств стиля.

Конечно, я могу просто использовать гиперпортативный излишний подход, который заключается в установке всех четырех комбинаций объявлений CSS всякий раз, когда возникает такая ситуация, что не оставляет браузеру места, чтобы найти что-то неприятное, если он поддерживает какое-либо из стили.


person Steven Lu    schedule 10.02.2013    source источник


Ответы (1)


Я недостаточно знаю ваше приложение, чтобы знать, сработает ли оно для вас, но такие сайты, как http://prefixr.com/ предлагает API, через который вы можете запускать CSS, который добавит любые префиксы поставщиков к вашему CSS, если они потребуются.

person ChrisC    schedule 10.02.2013
comment
Спасибо, я думаю, что prefixr будет для меня полезным инструментом. - person Steven Lu; 13.02.2013