Статьи

Альтернативы префиксу

Некоторое время назад потрясающий Джеффри Уэй создал инструмент под названием Prefixr, который должен был помочь в обременительной задаче управления префиксами поставщиков в ваших таблицах стилей. Он работал, анализируя вашу таблицу стилей и автоматически добавляя версию различных правил с префиксом поставщика в вывод, который затем можно вставить в файл. Это был довольно приятный инструмент.

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

Первым вариантом, наиболее близким к функциональности Prefixr, является сайт Express Prefixr . Он был создан замечательным TJ Holowaychuk, который не только был экспертом по разработке Node.js, но и создал среду веб-приложений Express для Node.js.

С помощью Express Prefixr вы получаете два поля textarea : одно для ввода ваших стилей, а второе для получения префиксного вывода из сервиса. Это очень похоже на работу Prefixr:

Чтобы проверить это, я беру тот же пример кода, который Джеффри использовал в своей оригинальной статье:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
.box {
   opacity: .5;
}
  
.container {
   box-shadow: 20px;
   -moz-transition: box-shadow 2s;
   -webkit-border-radius: 4px;
   animation: slide 1s alternate;
   background: linear-gradient(top, #e3e3e3 10%, white);
}
  
@-webkit-keyframes «slide» {
   0% { left: 0;
   100% { left: 50px;
}

Затем, нажав на кнопку « Префикс это! », Я могу сразу же отправить мне свои префиксные стили:

Вот полный результат:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.box {
    -webkit-opacity: .5;
    -moz-opacity: .5;
    -ms-opacity: .5;
    -o-opacity: .5;
}
 
.container {
    -webkit-box-shadow: 20px;
    -moz-box-shadow: 20px;
    -ms-box-shadow: 20px;
    -o-box-shadow: 20px;
    -moz—webkit-transition: box-shadow 2s;
    -moz-transition: box-shadow 2s;
    -ms-transition: box-shadow 2s;
    -o-transition: box-shadow 2s;
    -webkit—webkit-border-radius: 4px;
    -moz-border-radius: 4px;
    -ms-border-radius: 4px;
    -o-border-radius: 4px;
    -webkit-animation: slide 1s alternate;
    -moz-animation: slide 1s alternate;
    -ms-animation: slide 1s alternate;
    -o-animation: slide 1s alternate;
    background: linear-gradient(top, #e3e3e3 10%, white);
    background: -webkit-linear-gradient(top, #e3e3e3 10%, white);
    background: -moz-linear-gradient(top, #e3e3e3 10%, white);
    background: -ms-linear-gradient(top, #e3e3e3 10%, white);
    background: -o-linear-gradient(top, #e3e3e3 10%, white);
}
 
@-webkit-keyframes «slide» {
    0% {
        left: 0;
    }
 
    100% {
        left: 50px;
    }
}

Кроме того, Express Prefixr также предоставляет API, который вы можете использовать для интеграции в свои приложения или использования сторонних инструментов, таких как curl . Итак, взяв следующий фрагмент:

1
curl http://expressprefixr.herokuapp.com/api/processor -d css=’body { border-radius: 10px}’

И вставив его в окно terminal я получаю следующие результаты:

1
2
3
4
5
6
reys-mbp:~ rey$ curl http://expressprefixr.herokuapp.com/api/processor -d css=’body { border-radius: 10px}’
body {
    -webkit-border-radius: 10px;
    -moz-border-radius: 10px;
    -ms-border-radius: 10px;
    -o-border-radius: 10px;

Еще одна замечательная особенность Express Prefixr — это то, что код доступен на GitHub, что позволяет легко его раскошелиться и настроить программное обеспечение под ваши нужды.

Следующая опция на самом деле предназначена для большей интеграции в ваш рабочий процесс, а не в качестве инструмента визуального интерфейса. Autoprefixer фактически добавляет префиксы, где это уместно, используя правила, предоставляемые популярным сайтом Can I Use Слоган Автопрефиксера:

«Напишите свои правила CSS без префиксов поставщиков (на самом деле, забудьте о них полностью)»

И это верно. Это означает, что в ваших таблицах стилей вы можете сосредоточиться на использовании основанного на стандартах синтаксиса, а Autoprefixer будет обрабатывать добавление в префиксных правилах, если это необходимо.

Давайте посмотрим на некоторый код:

1
2
3
:fullscreen a {
    transition: transform 1s
}

Приведенный выше код будет обновлен Autoprefixer следующим образом:

01
02
03
04
05
06
07
08
09
10
11
:-webkit-full-screen a {
    -webkit-transition: -webkit-transform 1s;
    transition: transform 1s
}:-moz-full-screen a {
    transition: transform 1s
}:-ms-fullscreen a {
    transition: transform 1s
}:fullscreen a {
    -webkit-transition: -webkit-transform 1s;
    transition: transform 1s
}

Внимательно посмотрите на синтаксис. Обратите внимание, что правило transition было в значительной степени оставлено в покое, за исключением добавления двух записей, специфичных для Webkit. Это потому, что Autoprefixer применяет префиксы вендоров только тогда, когда это необходимо. В этом случае transition широко поддерживается в современных браузерах и не требует префикса.

Но псевдокласс :fullscreen все еще развивается и должен иметь правильный префикс. Автопрефиксер, использующий данные «Могу ли я использовать», достаточно умен, чтобы определить, когда начинать добавлять префикс, исходя из уровня поддержки функции браузером. Очень круто!

Следует отметить, что Autoprefixer должен быть включен в ваш обычный рабочий процесс развертывания. Это не клиентская библиотека, и вы используете ее через любое количество сторонних интеграций. Это включает:

И так много других вариантов. Даже новый редактор Atom теперь имеет пакет atom-autoprefixer, который показывает, что Autoprefixer в хорошем состоянии.

Если вы хотите увидеть Autoprefixer в действии, перейдите к следующей демонстрации и добавьте несколько CSS-правил, которые у вас традиционно были, чтобы установить префикс поставщика, и посмотрите, как он работает для вас.

Последний вариант — это отличная клиентская библиотека от Lea Verou, которая называется -prefix-free . Ли долгое время был сторонником кросс-браузерной разработки и создавал эту библиотеку для того, чтобы обеспечить, чтобы ваш сайт использовал все правильные префиксы вендоров. Она построила его в то время, когда, к сожалению, многие веб-разработчики просто забыли добавить все соответствующие префиксы, из-за чего сайты некорректно отображались во всех современных браузерах.

Ключевое различие между этим и двумя другими, о которых я упоминал ранее, заключается в том, что -prefix-free — это библиотека JavaScript, которая просматривает ваши таблицы стилей во время выполнения и добавляет при необходимости префиксы поставщика.

Использовать библиотеку так же просто, как добавить следующую строку в head вашей страницы:

1
<script src=»prefixfree.js»></script>

Нет, серьезно. Вот и все. Библиотека обрабатывает каждую таблицу стилей в элементах link или style и добавляет при необходимости префикс поставщика. Это особенно полезно для сайтов, которые уже развернуты, и может быть невозможно вернуться и обновить его.

Он также имеет надежную поддержку браузера, совместим с IE9 +, Opera 10+, Firefox 3.5+, Safari 4+ и Chrome для настольных ПК и Mobile Safari, браузером Android, Chrome и Opera Mobile на мобильных устройствах.

Замечательно иметь альтернативы Prefixr, и эти решения, безусловно, отвечают всем требованиям. В конечном счете, однако, префиксы вендоров стали более сложными, чем они того стоят, и многие разработчики не уважают их первоначальное намерение (например, назначить экспериментальные функции) и используют их в производственных системах, надеюсь, они исчезнут в будущем. ближайшее будущее.

К счастью, Google объявил, когда они объявили о своем механизме рендеринга Blink, что они перейдут на модель флагов функций, которая будет скрывать экспериментальные функции за трудно устанавливаемыми флагами, которые не доступны через код. Слава Богу!