Menu

Градиент в CSS: радиальный, линейный и конический

Градиенты CSS это изображения, которые браузер рисует из цветов. Разберем radial-gradient (форма, размер, позиция), linear-gradient (направление и углы), conic-gradient, цветовые точки, резкие переходы для полос, повторяющиеся градиенты и градиентный текст.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

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

radial-gradient() смешивает цвета наружу от центральной точки. Как и любой градиент CSS, это изображение, поэтому он пишется в background-image (или в сокращенном свойстве background):

Полный синтаксис: radial-gradient(shape size at position, color stops). Все, что перед цветами, необязательно.

ЧастьЗначенияПо умолчанию
Формаcircle, ellipseellipse
Размерclosest-side, closest-corner, farthest-side, farthest-corner или длиныfarthest-corner
Позицияat center, at top left, at 30% 70%, at 20px 40pxat center
Цветовые точкиДва и больше цветов, у каждого необязательная позиция

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

Попробуйте circle farthest-corner at 30% 50%, #f59e0b, #2563eb, ellipse at bottom, white, #16a34a и circle 40px, #f59e0b 99%, transparent (точка с резким краем).

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

linear-gradient() смешивает цвета вдоль прямой линии. Сначала направление или угол, затем цвета:

Углы начинаются с 0deg, направленного вверх, и идут по часовой стрелке, поэтому 90deg это to right, а 180deg это to bottom по умолчанию. to right остается физическим и на страницах справа налево; отразите его сами, если градиент должен следовать направлению чтения.

Цветовые точки и резкие переходы

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

Точка может принимать и две позиции, #111827 12px 24px, это рисует сплошную полосу от 12px до 24px.

Конические градиенты

conic-gradient() проводит цвета по кругу вокруг центральной точки, как стрелки часов. С резкими переходами он рисует круговую диаграмму без изображений и JavaScript:

Диаграмма, нарисованная в CSS, невидима для программ чтения с экрана, поэтому продублируйте числа текстом.

Градиентный текст

Обрежьте градиентный фон по буквам и сделайте сам текст прозрачным:

.gradient-text {
  background: linear-gradient(90deg, #2563eb, #db2777);
  -webkit-background-clip: text; /* older browsers need the prefix */
  background-clip: text;
  color: transparent;
}

Помните о запасном обычном color: если обрезка не сработает, текст исчезнет. У градиентного текста еще и неравномерная контрастность, поэтому используйте его только для крупных заголовков.

Градиенты складываются с изображениями и другими градиентами в одном списке background-image; слои, размер и позиция разобраны на странице фоновое изображение.

Частые ошибки

  • background-color: linear-gradient(...). Градиент это изображение: используйте background-image или background.
  • Градусы не в ту сторону. 0deg направлен вверх, а не вправо. 90deg идет вправо.
  • Градиент на элементе без высоты. Ничего не видно; дайте элементу содержимое или размер.
  • Грязные цвета посередине. Смешение двух насыщенных противоположных цветов, например красного и зеленого, в sRGB проходит через серо-коричневый. Добавьте среднюю точку или смешивайте в другом цветовом пространстве: linear-gradient(in oklch, red, green).
  • Ступеньки на больших мягких градиентах. Очень близкие цвета на большой площади показывают ступени; помогает чуть больший контраст между точками.

Часто задаваемые вопросы

Как сделать радиальный градиент в CSS?

Используйте background-image: radial-gradient(#93c5fd, #1e3a8a);. Перед цветами можно добавить форму и позицию, например radial-gradient(circle at top left, #93c5fd, #1e3a8a).

Чем circle отличается от ellipse в radial-gradient?

ellipse (по умолчанию) растягивается по пропорциям блока, поэтому в широком блоке он широкий. circle сохраняет градиент круглым при любой форме блока.

Как задать направление линейного градиента?

Поставьте первым направление или угол: linear-gradient(to right, red, blue) или linear-gradient(45deg, red, blue). По умолчанию to bottom (180deg); 0deg направлен вверх, а углы идут по часовой стрелке.

Как сделать резкие полосы вместо плавного перехода?

Задайте двум цветам одну и ту же позицию: linear-gradient(90deg, #2563eb 50%, #f59e0b 50%) меняет цвет посередине без перехода. repeating-linear-gradient повторяет узор из таких точек.

Можно ли использовать градиент как background-color?

Нет. Градиент это изображение, поэтому он пишется в background-image или в сокращенном свойстве background. background-color: linear-gradient(...) невалидно и игнорируется.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ