Градиенты CSS

Градиенты CSS

От автора: В точности так, как вы можете объявить фон элемента в CSS сплошным цветом, точно так же можно объявить его градиентом. Для управления и производительности лучше подходит применение заявленных в CSS градиентов вместо использования файла изображения.

Градиенты обычно состоят из одного цвета, переходящего в другой, но в CSS можно контролировать каждый аспект этого процесса, от его направления до цветов (сколько угодно много) до того, где будет происходить изменение этих цветов. Давайте все из них рассмотрим.

Градиенты – это фоновое изображение

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

Линейный градиент

Возможно, самый привычный и нужный вид градиента — linear-gradient(). Ось координат может идти слева направо, сверху вниз или под любым выбранным вами углом. Если не заявлять угол, то будет подразумеваться сверху вниз:

Разделенные запятыми цвета отображают обычно применяемый вами цвет: Hex, именованные цвета, rgba, hsla и т.д. Чтобы сделать градиент слева направо, передайте дополнительный параметр в начале функции linear-gradient(), начинающейся со слова to, означающем направление, например to right:

Синтаксис to также работает для углов. Например, если вам нужна ось градиента, начинающаяся с нижнего левого угла и идущая в верхний правый угол, можно сказать to top right:

Если бы блок был квадратным, то угол такого градиента стал бы 45°, но это не так. Если нужно гарантировать 45°, можно это заявить:

Также вы не ограничены всего двумя цветами. Фактически, можно получить столько разделенных запятыми цветов, сколько нужно. Вот четыре:

Также можно заявить, где должен начинаться любой из отдельных цветов. Это называется «цветовыми остановами». Скажем, если вам нужно, чтобы желтый занимал больше всего места, а красный – совсем немного в самом начале, можно сделать color-stop желтого цвета довольно рано:

Мы склонный считать градиенты исчезающими цветами, но если у вас есть два одинаковых цветовых стопа, можно сделать немедленную смену одного плотного цвета другим плотным цветом. Это может пригодиться при заявлении фона в полную высоту, имитирующего колонки.

Браузерная поддержка/Префиксы

До сих пор мы рассматривали только новый синтаксис, но градиенты CSS уже довольно долго побыли в употреблении. У них хорошая браузерная поддержка. Ненадежными они становятся в синтаксисе и с префиксами. Браузеры поддерживают три разных синтаксиса. Официально они так не называются, но можете называть их:

Старый: исходный способ, применимый исключительно к WebKit, с такими штуками, как from() и color-stop()

Подростковый: старая система углов, например, left

Молодой: свежеиспеченная система углов, например, to right

А также префиксы. Давайте составим список:

Chrome

1-9: Старый, с префиксом

10-25: Подростковый, с префиксом

26: Молодой, без префикса

Safari

3-: Поддержка отсутствует

4-5.0: Старый, с префиксом

6.1: Молодой, без префикса

Firefox

3.5-: Поддержка отсутствует

3.6-15: Подростковый, с префиксом

16: Молодой, без префикса

Opera

11.0-: Поддержка отсутствует

11.1-11.5: Подростковый, с префиксом, только линейный

11.6-12: Подростковый, с префиксом, добавлен радиальный

12.1: Подростковый, без префикса

15: Молодой, без префикса

IE

8-: Поддержка отсутствует

9: Только фильтры

10+: Молодой, без префикса (также поддерживается Подростковый с префиксом)

Android

2.0-: Поддержка отсутствует

2.1-3.0: Подростковый, с префиксом

4.0-4.3: Молодой, с префиксом

4.4+: Молодой, без префикса

iOS

3-: Поддержка отсутствует

3.2-4.3: Подростковый, с префиксом

5.0-6.1: Молодой, с префиксом

7.0: Молодой, без префикса

Здесь имеется небольшое наложение. Например, когда браузер поддерживает «молодой» синтаксис, он, возможно, также поддерживает более старые синтаксисы, включающие префикс. Лучше всего поступать так: если поддерживается «молодой», то его и применяйте. Так что, если вам нужна абсолютная глубочайшая браузерная поддержка, линейный градиент будет выглядеть примерно так:

Тут ужасно много кода. Писать его вручную – это возможные ошибки и большое количество труда. Справиться с ним помогает Autoprefixer, позволяющий отрезать фрагменты кода, когда вы решите, какие браузеры будете поддерживать. Примесь-миксин Compass умеет делать URI данных SVG для IE 9, если вам это важно.

Фильтры IE

Internet Explorer (IE) 6-9, хотя и не поддерживает синтаксис градиентов CSS, предлагает программный метод создания фоновых градиентов

Вот некоторые рассуждения на тему, применять их или нет:

filter обычно считается плохим для производительности,

background-image отменяет фильтр, поэтому если вам нужно применить его для альтернативного варианта, фильтры останутся за бортом. Если в качестве альтернативы подходит плотный цвет (background-color), можно применить фильтр

Даже хотя фильтры работают только со значениями hex, все равно можно получить alpha-прозрачность, поставив префикс к значению hex с количеством прозрачности от 00 (0%) до FF (100%). Пример:

Радиальные градиенты

Радиальные градиенты отличаются от линейных тем, что начинаются в одной точке и «исходят» наружу. Градиенты часто используют для имитации освещения, которое, как мы знаем, не всегда прямое, поэтому ими можно пользоваться для того, чтобы сделать градиент еще натуральнее.

По умолчанию первый цвет начинается в (самом центре) элемента и затухает по направлению к краю элемента. Затухание происходит равными величинами, неважно в каком направлении.

Видно, как этот градиент создает фигуру-эллипс, так как элемент не квадратный. Это градиент по умолчанию (с ellipse в качестве первого параметра), но если мы скажем, что хотим окружность, то можем ее сделать:

Обратите внимание, что градиент округлый, но затухает на всей протяженности до конца цвета к дальнему краю. Если нужно, чтобы эта окружность находилась полностью внутри элемента, можно было бы обеспечить это, определив, что нам нужно затухание, оканчивающееся к ближайшей стороне closest-side, как отделенное запятыми значение фигуры, вроде этого:

Здесь возможны значения: closest-corner, closest-side, farthest-corner, farthest-side. О них можно думать так: «Мне нужно, чтобы этот радиальный градиент затухал от центральной точки до __________, приспосабливался и заполнял все вокруг».

Радиальному градиенту также не нужно по умолчанию начинаться в центре, вы можете назначить определенную точку, использовав at ______ в качестве первого параметра, как здесь:

Я проясню здесь все, приведя пример квадрата и регулировки цветового останова:

Браузерная поддержка

В основном такая же, как у linear-gradient(), за исключением того, что, когда начиналась поддержка градиентов, в очень старой версии Opera были только линейные, а не радиальные. Как и линейный, radial-gradient() претерпел некоторые изменения синтаксиса. И опять здесь: «Старый», «Подростковый» и «Молодой».

Критерии следующие:

Старый: с префиксом -webkit-, штуки вроде from() и color-stop()

Подростковый: первый параметр – место центра. Теперь полностью ломается в браузерах, поддерживающих новый синтаксис без префикса, поэтому убедитесь, что у Подросткового синтаксиса имеется префикс.

Молодой: многословный первый параметр, типа circle closest-corner at top right

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

Повторные градиенты

У повторных градиентов ненамного меньшая браузерная поддержка. У них есть как линейные, так и радиальные разновидности.

Применительно к неповторным градиентам существует способ их создания так, чтобы тот был крошечным прямоугольником, и при выравнивании с прочими крошечными прямоугольными версиями самого себя создавал повторяющийся узор. Поэтому сначала сделайте такой градиент и установите background-size, чтобы получился такой маленький прямоугольник. Теперь легко создаются полоски, которые затем можно вращать и делать все, что угодно.

Пользуясь repeating-linear-gradient(), не приходится прибегать к подобным хитростям. Размер градиента определяется последним цветовым стопом. Если он происходит на 20px, то размер градиента (который затем повторяется) – это квадрат 20px на 20px.

То же самое с радиальным:

Неуместная загрузка альтернативы

Как мы уже говорили, некоторые действительно старые браузеры вообще не поддерживают синтаксиса градиентов CSS. Если вам требуется альтернатива, являющаяся градиентом, то сотворить такое чудо (.jpg / .png) может изображение. Самое ужасное то, что в некоторых слегка менее старых браузерах, которые уже начали поддерживать градиенты CSS, загрузится альтернативное изображение. Если так, то сделайте запрос HTTP к изображению, даже если он отобразит градиент CSS. Вот что сделал Firefox 3.5.8 (смотрите скриншот), а также Chrome 5- и Safari 5.0.1. Смотрите:

Safari 5.0.1 неправильно загружает альтернативные варианты

Хорошая новость – это больше не проблема. Единственными проблемными браузерами были Chrome и Safari, а Chrome так не делает уже с версии 6 и Safari – с 5.1, а с тех пор прошло уже три года.

Дополнительные ресурсы

Смотрите блок CSS, объясняющий все префиксы/синтаксисы, на CSS3 Please!

Можно ли применять градиенты

Документация Mozilla для линейного градиента, повторного линейного градиента, радиального градиента и повторного линейного градиента.

Галерея градиентов (из градиентов можно делать умопомрачительные узоры)

Автор: Chris Coyier

Источник: //css-tricks.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: