Back to Course

Продвинутый CSS

0% Complete
0/0 Steps
Lesson 2 of6
In Progress

Градиенты в CSS

05.05.2022

Когда мы говорим о градиентах в CSS, мы говорим о цветных градиентах.

В CSS существует два типа градиентов:

  • линейные: цвета идут от одной точки к другой, по прямой линии; 
  • радиальные: цвета идут от центра круга к его краям, во всех направлениях.

Градиент считается фоновым изображением и должен использоваться с соответствующим свойством.

linear-gradient

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

  • определить желаемые цвета
  • где эти цвета должны появиться вдоль оси (в начале, середине, конце и т. д.); 
  • в каком направлении должен идти градиент.

Давайте начнём с простого градиента из двух цветов:

CSS

div { background-image: linear-gradient(red, blue); }

HTML

<div>Простой вертикальный фоновый градиент.</div>

По умолчанию:

  • направление вертикальное, сверху вниз; 
  • первый цвет в начале (вверху); 
  • второй цвет в конце (внизу).

Изменение направления

Если направление сверху вниз вам не подходит, вы можете поменять его на один из вариантов:

  • определить назначение градиента, с помощью таких ключевых слов, как to left top; 
  • определить конкретный угол в градусах, вроде 45deg.

Это направление должно быть установлено перед цветом:

CSS

div { 
 background-image: linear-gradient(to bottom right, yellow, purple); 
 width: 200px; 
}

HTML

<div>Диагональный градиент от левого верхнего угла в правый нижний угол.</div>

Если вы хотите задать конкретный угол, то можете использовать значение в градусах:

  • 0deg — снизу вверх;
  • 20deg — немного по диагонали, идущей по часовой стрелке;
  • 90deg — подобно 15 часам, слева направо;
  • 180deg — это значение по умолчанию, сверху вниз.

CSS

div { 
 background-image: linear-gradient(20deg, green, blue); 
 width: 150px; 
}

HTML

<div>Диагональный градиент с углом 20 градусов.</div>

Добавление большего количества цветов

Вы можете вставить столько цветов, сколько захотите. Они будут равномерно распределены вдоль оси:

  • два цвета: 0% и 100% 
  • три цвета: 0%, 50% и 100% 
  • четыре цвета: 0%, 33%, 67% и 100%

CSS

div { 
 background-image: linear-gradient(orange, grey, yellow);
 width: 150px; 
}

HTML

<div>Довольно некрасивый градиент, но тут важна идея.</div>

Определение конкретных точек цвета

Если вы не хотите, чтобы цвет распределялся равномерно, то можете установить определённые позиции цвета, используя либо проценты (%), либо пиксели (px):

CSS

div { 
 background-image: linear-gradient(orange, grey 10%, yellow 50%);
 width: 150px; 
}

HTML

<div>Тоже уродливый градиент, но тут важна идея.</div>

В данных параметрах:

  • у цвета orange не задана позиция цвета, так что значение по умолчанию равно 0%;
  • цвет grey ближе к верху, на 10% вместо 50%; 
  • цвет yellow занимает половину градиента, от 50% и до конца 100%.

radial-gradient

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

  • форму: круг или эллипс; 
  • начальную точку: которая будет центром круга или эллипса; 
  • конечную точку: где будет край круга или эллипса.

CSS

div { 
 background-image: radial-gradient(red, yellow);
 padding: 1rem; 
 width: 300px; 
}

HTML

<div>Это очень похоже на солнце, не так ли?</div>

По умолчанию:

  • градиент является эллипсом
  • первый цвет начинается в центре
  • последний цвет заканчивается в самом дальнем углу.

Начальная позиция

Начальная позиция работает как background-position. Вы можете установить её через ключевое слово at.

CSS

div { 
 background-image: radial-gradient(at top right, black, lightgrey);
 padding: 1rem; 
 width: 300px; 
}

HTML

<div>Мрачный день.</div>

Конечная позиция

По умолчанию форма завершается в самом дальнем углу. Вы можете выбрать:

  • closest-side
  • closest-corner
  • farthest-side
  • farthest-corner

Разница одновременно трудна для понимания и представления, поэтому я не буду вдаваться в подробности. У Mozilla есть хорошее описание различных значений.

CSS

div { 
 background-image: radial-gradient(closest-corner at 20px 20px, green, blue); 
 padding: 1rem; width: 300px; 
}
div:hover { background-image: radial-gradient(farthest-side at 20px 20px, green, blue); }

HTML

<div>Наведите указатель мыши на эту зелёную звезду в небе, 
чтобы увидеть как она расширяется.</div>

Фиксированный размер

Вместо установки начальной и конечной позиций, вы можете просто задать конкретные размеры:

CSS

div { 
 background-image: radial-gradient(20px 10px at 75% 50%, darkviolet, pink); 
 padding: 1rem;
 width: 300px; 
}

HTML

<div>Небольшой фиолетовый диск в море розового цвета.</div>

Градиенты в CSS являются мощным средством, учитывая бесконечное число вариантов.

Примеры на этой странице умышленно сделаны «некрасивыми», с ярко выраженными различиями цветов, чтобы лучше объяснить, как работает каждое свойство.

Но довольно легко писать едва уловимые градиенты, особенно для кнопок:

CSS

.button-grey { background-image: linear-gradient(#f2f2f2, #f2f2f2); }
.button-yellow { background-image: linear-gradient(#fce374, #fcdf5b); }
.button-orange { background-image: linear-gradient(#f58a38, #f57c20); }
.button-red { background-image: linear-gradient(#ed6d64, #ed574c); }
.button-purple { background-image: linear-gradient(#847bba, #7568ba); }
.button-blue { background-image: linear-gradient(#42b0e3, #2ba9e3); }
.button-green { background-image: linear-gradient(#97cc76, #8bcc62); }