Градиенты

CSS-градиенты — это изображения, генерируемые кодом: linear-gradient, radial-gradient, conic-gradient и их repeating-* версии. Градиенты не требуют загрузки файлов и идеально масштабируются.

Зачем нужно

Градиенты заменяют растровые изображения для плавных переходов цветов, создают декоративные фоны, паттерны и сложные визуальные эффекты без лишних HTTP-запросов. Это чистый CSS — лёгкий, масштабируемый, анимируемый.

Где используется

  • Фоны секций, кнопок, карточек
  • Hero-секции
  • Декоративные полосы и паттерны
  • Оверлеи поверх изображений
  • Маски и затухания
  • Диаграммы и прогресс-бары

Предпосылки


linear-gradient — линейный градиент

Базовый синтаксис

/* Сверху вниз (по умолчанию) */
.basic {
  background: linear-gradient(red, blue);
}

/* С направлением */
.right {
  background: linear-gradient(to right, red, blue);
}

/* По диагонали */
.diagonal {
  background: linear-gradient(to bottom right, red, blue);
}

/* С углом */
.angle {
  background: linear-gradient(45deg, red, blue);
}

Направления

Синтаксис Угол Описание
to top 0deg Снизу вверх
to right 90deg Слева направо
to bottom 180deg Сверху вниз (default)
to left 270deg Справа налево
to top right ~45deg В правый верхний угол
135deg 135deg Произвольный угол

Color Stops (точки цвета)

/* Несколько цветов */
.rainbow {
  background: linear-gradient(
    to right,
    red, orange, yellow, green, blue, indigo, violet
  );
}

/* С указанием позиций */
.positioned {
  background: linear-gradient(
    to right,
    red 0%,
    yellow 30%,
    green 100%
  );
}

/* Резкая граница — два цвета в одной точке */
.sharp {
  background: linear-gradient(
    to right,
    #3498db 50%,
    #e74c3c 50%
  );
}

/* Color hints — управление серединой перехода */
.hint {
  background: linear-gradient(
    to right,
    red,
    30%,   /* Серединная точка перехода */
    blue
  );
}

Практические примеры linear-gradient

/* Кнопка с градиентом */
.btn-gradient {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  color: white;
  border: none;
  padding: 12px 24px;
  border-radius: 8px;
}
.btn-gradient:hover {
  background: linear-gradient(135deg, #764ba2 0%, #667eea 100%);
}

/* Подчёркивание-градиент */
.gradient-underline {
  background: linear-gradient(to right, #667eea, #764ba2);
  background-size: 100% 3px;
  background-position: bottom;
  background-repeat: no-repeat;
  padding-bottom: 4px;
}

/* Затухание текста */
.fade-bottom {
  position: relative;
}
.fade-bottom::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
  background: linear-gradient(to bottom, transparent, white);
}

radial-gradient — радиальный градиент

Базовый синтаксис

/* Круг из центра */
.basic {
  background: radial-gradient(red, blue);
}

/* С формой */
.circle {
  background: radial-gradient(circle, red, blue);
}

/* Эллипс (по умолчанию) */
.ellipse {
  background: radial-gradient(ellipse, red, blue);
}

Размеры

.closest-side {
  background: radial-gradient(circle closest-side, red, blue);
}
.farthest-corner {
  background: radial-gradient(circle farthest-corner, red, blue);
}

/* Точный размер */
.exact {
  background: radial-gradient(circle 100px, red, blue);
}
.exact-ellipse {
  background: radial-gradient(200px 100px, red, blue);
}
Размер Описание
closest-side До ближайшей стороны
farthest-side До дальней стороны
closest-corner До ближайшего угла
farthest-corner До дальнего угла (default)

Позиция центра

.top-left {
  background: radial-gradient(circle at top left, red, blue);
}
.custom {
  background: radial-gradient(circle at 30% 70%, red, blue);
}
.pixel {
  background: radial-gradient(circle at 100px 50px, red, blue);
}

Практические примеры radial-gradient

/* Spotlight эффект */
.spotlight {
  background: radial-gradient(
    circle at 50% 50%,
    rgba(255, 255, 255, 0.2),
    transparent 60%
  );
}

/* Свечение */
.glow {
  background: radial-gradient(
    circle at center,
    rgba(102, 126, 234, 0.4) 0%,
    transparent 70%
  );
}

conic-gradient — конический градиент

Цвета идут по кругу (как часы):

/* Базовый */
.basic {
  background: conic-gradient(red, yellow, green, blue, red);
  border-radius: 50%;
  width: 200px;
  height: 200px;
}

/* С начальным углом */
.from {
  background: conic-gradient(from 90deg, red, blue);
}

/* С позицией центра */
.at {
  background: conic-gradient(from 0deg at 50% 50%, red, blue, red);
}

Практические примеры conic-gradient

/* Круговая диаграмма (pie chart) */
.pie-chart {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: conic-gradient(
    #3498db 0% 40%,        /* 40% — синий */
    #e74c3c 40% 70%,       /* 30% — красный */
    #2ecc71 70% 100%        /* 30% — зелёный */
  );
}

/* Цветовое колесо */
.color-wheel {
  width: 200px;
  height: 200px;
  border-radius: 50%;
  background: conic-gradient(
    hsl(0, 100%, 50%),
    hsl(60, 100%, 50%),
    hsl(120, 100%, 50%),
    hsl(180, 100%, 50%),
    hsl(240, 100%, 50%),
    hsl(300, 100%, 50%),
    hsl(360, 100%, 50%)
  );
}

/* Прогресс-кольцо */
.progress-ring {
  --progress: 75%;
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: conic-gradient(
    #3498db 0% var(--progress),
    #eee var(--progress) 100%
  );
  /* Вырез в центре */
  mask: radial-gradient(circle, transparent 50px, black 51px);
  -webkit-mask: radial-gradient(circle, transparent 50px, black 51px);
}

repeating-* — повторяющиеся градиенты

repeating-linear-gradient

/* Полосатый фон */
.stripes {
  background: repeating-linear-gradient(
    45deg,
    #606dbc,
    #606dbc 10px,
    #465298 10px,
    #465298 20px
  );
}

/* Линейка */
.ruler {
  background: repeating-linear-gradient(
    to right,
    transparent,
    transparent 9px,
    #ccc 9px,
    #ccc 10px
  );
}

/* Предупреждающие полосы */
.warning {
  background: repeating-linear-gradient(
    -45deg,
    #f1c40f,
    #f1c40f 10px,
    #2c3e50 10px,
    #2c3e50 20px
  );
}

repeating-radial-gradient

/* Концентрические круги */
.circles {
  background: repeating-radial-gradient(
    circle,
    #3498db,
    #3498db 10px,
    #2980b9 10px,
    #2980b9 20px
  );
}

repeating-conic-gradient

/* Шахматная доска */
.checkerboard {
  background: repeating-conic-gradient(
    #eee 0% 25%,
    #ddd 25% 50%
  );
  background-size: 40px 40px;
}

/* Звезда / солнце */
.starburst {
  background: repeating-conic-gradient(
    from 0deg,
    #f1c40f 0deg 10deg,
    #f39c12 10deg 20deg
  );
}

Креативные паттерны

Горошек (Polka Dots)

.polka {
  background:
    radial-gradient(circle, #333 20%, transparent 21%),
    radial-gradient(circle, #333 20%, transparent 21%);
  background-size: 30px 30px;
  background-position: 0 0, 15px 15px;
  background-color: #f5f5f5;
}

Сетка

.grid-bg {
  background:
    linear-gradient(to right, rgba(0,0,0,0.05) 1px, transparent 1px),
    linear-gradient(to bottom, rgba(0,0,0,0.05) 1px, transparent 1px);
  background-size: 20px 20px;
}

Зигзаг

.zigzag {
  background:
    linear-gradient(135deg, #3498db 25%, transparent 25%) -50px 0,
    linear-gradient(225deg, #3498db 25%, transparent 25%) -50px 0,
    linear-gradient(315deg, #3498db 25%, transparent 25%),
    linear-gradient(45deg, #3498db 25%, transparent 25%);
  background-size: 100px 50px;
  background-color: #ecf0f1;
}

Градиент в тексте

.gradient-text {
  background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent; /* Fallback */
  font-size: 3rem;
  font-weight: 800;
}

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

  1. Нет fallback-цвета — старые браузеры не покажут ничего:

    /* ХОРОШО */
    .box {
      background-color: #667eea; /* Fallback */
      background: linear-gradient(135deg, #667eea, #764ba2);
    }
    
  2. Резкая граница при одинаковых color-stop — нужна 1px разница для anti-aliasing:

    /* Зубчатая граница */
    background: linear-gradient(red 50%, blue 50%);
    
    /* Сглаженная */
    background: linear-gradient(red 50%, blue 50.5%);
    
  3. background-clip: text без -webkit- префикса — не работает в части браузеров

  4. Слишком много color-stops — градиент становится мутным, используйте 2-3 цвета

  5. Анимация gradient напрямуюbackground нельзя анимировать через transition. Используйте background-size или background-position:

    .animated {
      background: linear-gradient(90deg, #667eea, #764ba2, #667eea);
      background-size: 200% 100%;
      animation: shimmer 2s linear infinite;
    }
    @keyframes shimmer {
      0% { background-position: 200% 0; }
      100% { background-position: -200% 0; }
    }
    

Практика

  • Создать кнопку с linear-gradient и hover-эффектом
  • Создать круговую диаграмму через conic-gradient
  • Реализовать полосатый фон через repeating-linear-gradient
  • Создать паттерн «горошек» из двух radial-gradient
  • Сделать анимированный shimmer-эффект
  • Применить градиент к тексту через background-clip: text

Связанные темы

Ресурсы