</> Praktum

Главная / CSS / linear-gradient

Справочник · CSS

linear-gradient: плавный переход цветов

Редакция PraktumОбновлено 6 мин чтенияУровень: новичок

Функция linear-gradient() создаёт изображение, в котором цвета плавно переходят друг в друга вдоль прямой линии: background: linear-gradient(to right, #2a62d9, #8b5cf6). Градиент — это картинка, а не цвет, поэтому его задают в background или background-image, а не в background-color.

Коротко
  • linear-gradient(направление, цвет1, цвет2…) — значение для background.
  • Направление словами (to right) или углом (90deg).
  • По умолчанию — сверху вниз (to bottom, 180deg).
  • Две точки цвета в одной позиции дают резкую границу — так делают полосы.
  • Градиент нельзя задать в background-color: это изображение.

Минимальный пример

.hero {
  background: linear-gradient(135deg, #2a62d9, #8b5cf6);
  color: #fff;
}

Фон плавно переходит от синего в левом верхнем углу к фиолетовому в правом нижнем. Все цвета, которые понимает CSS, работают и в градиенте: hex, rgb с прозрачностью, названия цветов, transparent.

Направление и угол

Как задать направление
ЗаписьКуда идёт градиент
не указано или to bottomсверху вниз (180deg)
to rightслева направо (90deg)
to topснизу вверх (0deg)
to bottom rightв правый нижний угол
45degк правому верхнему краю под 45°
135degк правому нижнему краю

Угол отсчитывается от направления «вверх» по часовой стрелке: 0deg — снизу вверх, 90deg — слева направо. to bottom right и 135deg совпадают только у квадрата: «в угол» подстраивается под пропорции блока, а угол — нет.

Точки цвета

.a { background: linear-gradient(to right, #2a62d9, #22c55e, #f59e0b); }      /* три цвета поровну */
.b { background: linear-gradient(to right, #2a62d9 0%, #2a62d9 30%, #8b5cf6 100%); } /* синий держится 30% */
.c { background: linear-gradient(to right, #2a62d9 20%, #8b5cf6 80%); }              /* переход только в середине */

Без позиций цвета распределяются равномерно. Позиция после цвета говорит, где он должен быть «в чистом виде»: до первой позиции — первый цвет сплошной, после последней — последний. Позиции пишут в процентах или длинах.

Резкие переходы и полосы

/* половина синяя, половина белая */
.split { background: linear-gradient(to right, #2a62d9 50%, #fff 50%); }

/* повторяющиеся диагональные полосы */
.stripes {
  background: repeating-linear-gradient(45deg, #fde68a 0 10px, #fef3c7 10px 20px);
}

/* полоска-индикатор прогресса 65% */
.progress { background: linear-gradient(to right, #22c55e 65%, #e5e7eb 65%); }

Если два соседних цвета стоят в одной позиции, плавного перехода нет — получается чёткая граница. repeating-linear-gradient повторяет узор до конца блока: так рисуют полосы, разметку и предупреждающие ленты без картинок. Запись #fde68a 0 10px — цвет занимает отрезок от 0 до 10px.

Затемнение картинки

.cover {
  background:
    linear-gradient(rgb(0 0 0 / 0), rgb(0 0 0 / .65)),
    url("/images/cover.webp") center / cover;
  color: #fff;
}

В background можно перечислить несколько слоёв через запятую — первый рисуется сверху. Полупрозрачный градиент поверх фотографии делает белый текст читаемым на любом снимке. Это один из самых полезных приёмов с градиентами.

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

.gradient-title {
  background: linear-gradient(90deg, #2a62d9, #8b5cf6);
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

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

radial-gradient и conic-gradient

.glow { background: radial-gradient(circle at 30% 20%, #c7d2fe, transparent 60%); }
.pie  { background: conic-gradient(#2a62d9 0 40%, #22c55e 0 75%, #f59e0b 0); border-radius: 50%; }
Виды градиентов
ФункцияФормаДля чего
linear-gradientвдоль прямойфоны, полосы, затемнение
radial-gradientот точки кругами или эллипсамисвечение, пятна света
conic-gradientвокруг центра, как стрелка часовкруговые диаграммы, цветовые круги

Можно ли анимировать градиент

Обычный transition между двумя градиентами не работает: браузер не умеет плавно менять изображения и переключит их скачком. Варианты: анимировать background-position у широкого градиента, менять opacity у второго слоя-псевдоэлемента или объявить цвета через @property как типизированные CSS-переменные и анимировать их.

Градиент или картинка

CSS-градиент

Не весит ничего, масштабируется без потери качества, цвета меняются в стилях и темах.

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

Лишний запрос и вес файла, размывается при увеличении, цвета зашиты в файл.

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

  • Пишут градиент в background-color — свойство его не принимает.
  • Путают угол: 0deg — снизу вверх, а не слева направо.
  • Ставят светлый текст на градиент без проверки контраста по светлому краю.
  • Ждут плавного transition между двумя градиентами.
  • Забывают запасной цвет фона для текста на градиенте.

Доступность

Контраст текста проверяй по самому неудачному участку градиента — тому, где фон ближе всего к цвету текста. Под градиентом задай сплошной background-color как запасной: если градиент не загрузится или включён режим высокой контрастности, текст останется читаемым. Не передавай смысл только цветами градиента.

Поддержка браузерами

linear-, radial- и repeating-градиенты работают во всех браузерах без префиксов, conic-gradient — во всех актуальных. Запись с background-clip: text в части браузеров всё ещё требует дубля с префиксом -webkit-. Интерполяция цветов в других пространствах (linear-gradient(in oklch, …)) доступна в современных версиях.

Практика

Сделай три блока: фон первого экрана с диагональным градиентом от синего к фиолетовому, обложку статьи с затемнением снизу поверх фотографии и индикатор прогресса на 40% с чёткой границей без лишних элементов.

Показать решение
.hero {
  background-color: #2a62d9; /* запасной */
  background-image: linear-gradient(135deg, #2a62d9, #8b5cf6);
  color: #fff;
}
.cover {
  background:
    linear-gradient(to bottom, rgb(0 0 0 / 0) 40%, rgb(0 0 0 / .7)),
    url("/images/cover.webp") center / cover;
}
.progress {
  height: 8px;
  border-radius: 999px;
  background: linear-gradient(to right, #22c55e 40%, #e5e7eb 40%);
}

Открыть песочницу

Частые вопросы

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

background: linear-gradient(to right, #2a62d9, #8b5cf6). Направление можно задать словами или углом.

Почему градиент не работает в background-color?

Градиент — это изображение, а background-color принимает только цвет. Используй background или background-image.

Как сделать резкую границу в градиенте?

Поставь два цвета в одну позицию: linear-gradient(to right, red 50%, blue 50%).

Как наложить градиент на картинку?

Перечисли слои через запятую: background: linear-gradient(…), url(photo.jpg). Первый слой окажется сверху.

Можно ли плавно анимировать градиент?

Напрямую через transition — нет. Двигай background-position, меняй opacity второго слоя или анимируй цвета через @property.

Источники

Ещё в разделе CSS