
Затемнение изображения в CSS используется не только для декоративного эффекта, но и для повышения читаемости текста поверх фона, создания акцентов или визуального контраста. Добиться этого можно без графических редакторов – достаточно нескольких строк кода. Оптимальный выбор метода зависит от того, требуется ли постоянное затемнение, интерактивное поведение при наведении или динамическая настройка через переменные.
Самый универсальный способ – использование свойства filter: brightness(). Оно регулирует яркость изображения, уменьшая её, например, до 0.6 для умеренного затемнения или до 0.3 для сильного. Этот метод прост, поддерживается всеми современными браузерами и не изменяет исходное изображение.
Более гибкий вариант – наложение полупрозрачного слоя через linear-gradient() и background-blend-mode. Такой подход позволяет комбинировать цвета, добавлять плавные переходы и сохранять текстуру картинки. Например, сочетание background-color: rgba(0, 0, 0, 0.5) с режимом multiply создаёт мягкое затемнение без потери деталей.
Если необходимо затемнить изображение при взаимодействии пользователя, удобно применять hover-эффекты. Для этого brightness можно изменять при наведении, добиваясь визуального отклика без использования JavaScript. Такой приём часто используется в интерфейсах карточек товаров и галереях.
Правильный выбор метода зависит от контекста: статическое затемнение повышает читаемость контента, а динамическое добавляет интерактивности. Комбинация этих подходов обеспечивает контроль над восприятием изображения и визуальным ритмом страницы.
Использование свойства filter: brightness() для управления яркостью

Свойство filter: brightness() позволяет изменять уровень освещённости изображения без редактирования исходного файла. Значение задаётся в виде числа или процента: 1 (или 100%) сохраняет оригинальную яркость, меньшее значение затемняет изображение, а большее – делает его светлее.
Например, правило filter: brightness(0.5); уменьшает яркость наполовину, создавая эффект вечернего освещения. При brightness(1.5) картинка становится на 50% светлее, что удобно для коррекции тёмных фонов.
Яркость влияет на восприятие контраста, поэтому рекомендуется сочетать brightness() с другими фильтрами – contrast() или saturate() – для сохранения естественности оттенков.
| Значение | Описание эффекта | Рекомендуемое применение |
|---|---|---|
brightness(0.3) |
Сильное затемнение, подходит для фона под текст | Использовать при наложении светлого контента |
brightness(0.7) |
Умеренное затемнение | Оптимально для акцентных изображений в карточках |
brightness(1) |
Без изменений | Базовый уровень яркости |
brightness(1.3) |
Умеренное осветление | Коррекция тёмных фотографий |
brightness(2) |
Сильное осветление | Создание выразительного эффекта бликов |
Для плавного изменения яркости при наведении удобно использовать переходы:
.selector:hover {
filter: brightness(0.6);
transition: filter 0.3s ease;
}
Такой приём добавляет интерактивность без нагрузки на производительность и не требует графических редакторов.
Применение градиента поверх изображения с помощью background-image и linear-gradient

Затемнение изображения удобно реализуется через наложение полупрозрачного градиента, не изменяя само изображение. Для этого используется свойство background-image, комбинирующее linear-gradient() и ссылку на файл изображения.
Пример базового синтаксиса:
background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url('photo.jpg');
Ключевые моменты настройки:
rgba()– задаёт прозрачность слоя. Чем выше последнее значение (от 0 до 1), тем сильнее затемнение.- Градиент всегда располагается первым в списке
background-image, иначе он окажется под изображением. - Для равномерного затемнения используйте одинаковые цвета начала и конца градиента.
- Для направленного эффекта можно указать направление, например
linear-gradient(to bottom, ...).
Чтобы изображение корректно покрывало элемент и не повторялось, добавляют:
background-size: cover;
background-repeat: no-repeat;
background-position: center;
Практическое применение:
- Создание читаемых текстовых блоков на фоне фотографий без редактирования графики.
- Гибкое управление контрастностью при адаптивной верстке – градиент можно менять через медиа-запросы.
- Комбинирование разных оттенков градиента для плавных переходов (например, от прозрачного к затемнённому).
При необходимости можно использовать несколько градиентов, например добавить лёгкий цветовой фильтр поверх затемнения:
background-image:
linear-gradient(rgba(0, 0, 0, 0.6), rgba(0, 0, 0, 0.6)),
linear-gradient(to top, rgba(255, 0, 0, 0.2), transparent),
url('photo.jpg');
Такой подход позволяет точно регулировать визуальный баланс без потери качества изображения и без дополнительных HTML-элементов.
Создание полупрозрачного слоя-затемнителя через псевдоэлементы ::before и ::after

Псевдоэлементы ::before и ::after позволяют затемнять изображение без добавления дополнительных HTML-элементов. Затемнение создаётся за счёт наложения полупрозрачного слоя поверх изображения, используя абсолютное позиционирование и свойство rgba() для управления прозрачностью.
Родительскому контейнеру необходимо задать position: relative;, чтобы псевдоэлемент корректно позиционировался внутри. Сам псевдоэлемент оформляется с помощью position: absolute;, занимает всю площадь контейнера (top: 0; left: 0; right: 0; bottom: 0;) и получает фоновый цвет, например background-color: rgba(0, 0, 0, 0.5);. Прозрачность регулируется последним параметром в rgba – чем меньше значение, тем мягче затемнение.
Чтобы слой находился поверх изображения, используется z-index. Если изображение задаётся через background-image, псевдоэлемент располагается выше него автоматически. При вставке тега <div> с фоновым изображением важно, чтобы z-index псевдоэлемента был выше слоя с изображением.
Пример CSS-кода:
.image-container {
position: relative;
background: url("photo.jpg") center/cover no-repeat;
width: 400px;
height: 250px;
}
.image-container::before {
content: "";
position: absolute;
inset: 0;
background-color: rgba(0, 0, 0, 0.4);
z-index: 1;
}
Такой метод особенно удобен при создании адаптивных блоков с текстом поверх изображения. Затемнение можно динамически изменять с помощью :hover или анимаций, не затрагивая структуру HTML.
Использование свойства mix-blend-mode для комбинирования цветов фона и изображения

Свойство mix-blend-mode позволяет управлять взаимодействием цветов элемента с его фоном, создавая различные эффекты затемнения без изменения исходного изображения. Этот метод применяют, когда требуется добиться мягкого затемнения, сохранив текстуру и насыщенность цвета.
Принцип работы основан на математическом смешивании цветовых каналов верхнего слоя (изображения) с нижним (фоном). Например, режим multiply затемняет картинку, умножая значения цветов пикселей, а overlay усиливает контраст.
multiply– равномерно затемняет изображение, не искажая баланс оттенков;darken– сохраняет только более тёмные пиксели из двух слоёв;overlay– сочетает режимыmultiplyиscreenв зависимости от яркости областей;color-burn– делает цвета насыщеннее, подходит для выразительных художественных эффектов.
Пример практического использования:
.image-dark {
background: linear-gradient(120deg, #000 40%, transparent);
mix-blend-mode: multiply;
}
Рекомендуется сочетать mix-blend-mode с полупрозрачными градиентами или однотонными слоями. Для корректного отображения убедитесь, что родительский элемент имеет фоновый цвет или изображение, иначе эффект не проявится.
Некоторые браузеры обрабатывают режимы смешивания по-разному. Для надёжности тестируйте результат в Chrome, Firefox и Safari. В системах с аппаратным ускорением производительность при использовании mix-blend-mode выше, чем у фильтров или псевдоэлементов с прозрачностью.
Регулировка прозрачности изображения при помощи opacity и rgba()
Свойство opacity задаёт уровень прозрачности для всего элемента, включая изображение и его содержимое. Значение от 0 до 1 определяет степень видимости: 0 – полностью прозрачное изображение, 1 – полностью непрозрачное. Например:
img { opacity: 0.6; }
Этот способ удобен, когда требуется равномерно затемнить изображение без изменения его цвета. Однако важно учитывать, что opacity влияет и на дочерние элементы – например, текст или иконки, если они помещены в один контейнер с изображением.
Чтобы затемнить только фон, сохранив непрозрачность контента, используют цвет с прозрачностью через rgba(). В этом случае изображение остаётся отдельным слоем, а поверх него накладывается полупрозрачный цвет:
.overlay {
background-color: rgba(0, 0, 0, 0.4);
}
Параметры rgba() соответствуют значениям красного, зелёного, синего и альфа-канала. Последний контролирует степень прозрачности наложенного слоя. Например, rgba(0, 0, 0, 0.4) создаёт тёмное полупрозрачное покрытие, визуально уменьшающее яркость изображения без потери его контрастности.
При создании адаптивных интерфейсов рационально использовать rgba() для фона и opacity для отдельных изображений, чтобы независимо управлять прозрачностью разных элементов. Комбинация этих приёмов позволяет точно регулировать визуальный баланс и читаемость контента.
Затемнение фонового изображения в адаптивной вёрстке с помощью CSS-переменных

Для управления степенью затемнения фона в адаптивной вёрстке целесообразно использовать CSS-переменные, позволяющие динамически менять прозрачность наложенного слоя без дублирования кода. Базовая идея заключается в применении градиента поверх фонового изображения с регулируемой прозрачностью через переменную.
Пример реализации:
:root {
--overlay-opacity: 0.5;
}
.section {
background: linear-gradient(rgba(0, 0, 0, var(--overlay-opacity)), rgba(0, 0, 0, var(--overlay-opacity))),
url('background.jpg') center/cover no-repeat;
min-height: 100vh;
}
Для адаптивности можно изменить значение переменной через медиазапросы, сохранив единую структуру фона:
@media (max-width: 768px) {
:root {
--overlay-opacity: 0.3;
}
}
Такой подход упрощает настройку визуальной контрастности на разных устройствах без пересчёта RGBA-значений и без дополнительных классов. Изменяя —overlay-opacity через JavaScript или пользовательские темы, можно динамически контролировать яркость фонового изображения без пересоздания CSS.
Использование CSS-переменных также повышает производительность: изменения применяются моментально, без перерисовки всей таблицы стилей. Это делает метод особенно эффективным при построении адаптивных интерфейсов с плавной сменой визуальных параметров.
