2012-03-10 3 views
13

Когда я хочу, чтобы создать градиент фона в CSS3 я должен сделать это:Есть ли способ сделать кросс-браузерный CSS3-код DRY?

background-color: #3584ba; 
background-image: -webkit-gradient(linear, left top, left bottom, from(#54a0ce), to(#3584ba)); /* Safari 4+, Chrome */ 
background-image: -webkit-linear-gradient(top, #54a0ce, #3584ba); /* Safari 5.1+, Chrome 10+ */ 
background-image: -moz-linear-gradient(top, #54a0ce, #3584ba); /* FF3.6 */ 
background-image:  -o-linear-gradient(top, #54a0ce, #3584ba); /* Opera 11.10+ */ 
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#54a0ce', endColorstr='#3584ba'); /* IE */ 

и это действительно раздражает. Есть ли лучшее решение, например, плагин JQuery, который сделает мой код кросс-браузер совместимый, если я просто использовать:

background-image: -webkit-linear-gradient(top, #54a0ce, #3584ba); /* Safari 5.1+, Chrome 10+ */ 

, например? Есть ли инструмент, который поможет мне написать код CSS3 проще?

+2

Напишите свой собственный, если это так раздражает ... http://prefixr.com/ –

+0

+1 за то, что вы подняли свою мысль с высокой мыслью – abhijit

+3

@webarto - зачем изобретать велосипед? :) –

ответ

20

Есть много инструментов для этого:

Они, как правило, называют CSS препроцессоров.

Вы бы в конечном итоге писать что-то вроде этого один раз, как определение функции (обычно называется "Mixin"):

.linear-gradient(@start, @end) { 
    background-color: @end; 
    background-image: -webkit-gradient(linear, left top, left bottom, from(@start), to(@end)); /* Safari 4+, Chrome */ 
    background-image: -webkit-linear-gradient(top, @start, @end); /* Safari 5.1+, Chrome 10+ */ 
    background-image: -moz-linear-gradient(top, @start, @end); /* FF3.6 */ 
    background-image:  -o-linear-gradient(top, @start, @end); /* Opera 11.10+ */ 
    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='@start', endColorstr='@end'); /* IE */ 
} 

Затем применять:

.my-class { 
    .linear-gradient(#54a0ce, #3584ba); 
} 
.my-other-class { 
    .linear-gradient(#ccc, #aaa); 
} 

Очень рекомендую.

+1

Я лично очень рекомендую LESS и LESSPHP. +1 для широкого спектра решений. – Bojangles

+0

Существует также [cssmin] (http://code.google.com/p/cssmin/) для PHP, который является немного более «традиционным» в том смысле, что он просто добавляет специальные свойства браузера для вас, но он нигде не близок так же полезны, как mixins и вложенные стили (хотя ваш код «ухудшает» обратно на стандартный CSS лучше). –

+0

[Bourbon] (https://github.com/thoughtbot/bourbon) коллекция mixin для Sass имеет много смешений CSS3, которые обрабатывают все проблемы совместимости с браузером. – Tomas

2

Есть ли лучшее решение, например, JQuery плагин, который сделает мой код кросс-браузер совместим

Для решения на стороне клиента вы можете использовать http://lea.verou.me/prefixfree/

Сценарий, который позволяет использовать только неподписанные свойства CSS везде. Он работает за кулисами, добавив префикс текущего браузера к любому коду CSS, только когда это необходимо.

Вы только тогда нужно будет использовать функцию без префикса, которая таинственным образом отсутствует в вашем CSS:

background-image: linear-gradient(top, #54a0ce, #3584ba); 
+2

Эти плагины медленны с ограниченной функцией. Или идите с SASS/LESS или не используйте. – vincicat

+0

Да, препроцессор на стороне сервера обычно является лучшим выбором. Однако стоит упомянуть опцию на стороне клиента. – thirtydot

0

Я нашел ответ на этот вопрос. Это программа под названием «autoprefixer», она бесплатна и использует Grunt (а также пару других вещей). Вы даете ему файл или каталог с неотредактированным css и автоматически добавляет префиксы на основе определенных браузеров, на которые вы хотите настроить таргетинг, и выводит их в новый файл. Вот статья о том, как ее использовать.

Сообщение о Autoprefixer автор: http://css-tricks.com/autoprefixer/ Как использовать Grunt для абсолютного новичка: http://24ways.org/2013/grunt-is-not-weird-and-hard/ Тогда вы можете посмотреть его на Github найти ридми.

Я искал то же самое, и это было лучшее решение, которое я нашел, что просто обрабатывает обычный CSS. Надеюсь, это поможет.

0

https://autoprefixer.github.io/ Попробуйте этот вариант. Это не обязательно поможет вам написать более простой код, это не библиотека javascript. Но он добавляет префиксы поставщиков и удаляет бесполезный код css.

background-image: -webkit-linear-gradient(top, #54a0ce, #3584ba); 
background-image: linear-gradient(top, #54a0ce, #3584ba); 

Включая ваш код, это результат, который я получаю. (Я удалил -webkit- из исходного кода, чтобы получить этот результат).

Смежные вопросы