
Затемнение изображения – практичный приём, который позволяет улучшить читаемость текста на фоне, создать фокус на контенте или добиться нужного визуального контраста без редактирования самой картинки. С помощью CSS это можно реализовать без лишнего кода и без изменения исходного файла изображения.
Самый распространённый способ – использование свойства filter с функцией brightness(). Например, правило filter: brightness(50%); уменьшает яркость изображения в два раза, создавая эффект затемнения. Этот метод удобен тем, что он не требует дополнительных элементов и работает для всех современных браузеров.
Другой точный подход – применение полупрозрачного слоя через linear-gradient в комбинации со свойством background-image. Такой приём особенно полезен, когда нужно добиться равномерного затемнения без потери насыщенности. Например, можно добавить чёрный градиент поверх изображения с помощью background: linear-gradient(rgba(0,0,0,0.5), rgba(0,0,0,0.5)), url('image.jpg');.
Для динамических эффектов затемнения – например, при наведении курсора – удобно использовать псевдокласс :hover вместе с переходами transition. Это позволяет создавать плавное изменение яркости, что делает интерфейс более отзывчивым и визуально аккуратным.
Использование свойства filter для управления яркостью изображения
Свойство filter позволяет быстро изменить яркость изображения без редактирования исходного файла. Для затемнения применяется функция brightness() с коэффициентом меньше 1. Например: filter: brightness(0.6); уменьшит яркость до 60 % от исходной.
При значении brightness(1) изображение сохраняет исходный уровень освещения, а при brightness(0) станет полностью черным. Рекомендуется использовать диапазон 0.5–0.8 для легкого затемнения, чтобы не потерять детали в тенях.
Эффект можно комбинировать с другими фильтрами, например: filter: brightness(0.7) contrast(1.1); – это одновременно снижает яркость и усиливает контраст, сохраняя визуальную выразительность.
Для плавного изменения яркости при наведении удобно применять переход: transition: filter 0.3s ease;. Такой подход делает затемнение интерактивным и естественным без использования дополнительных элементов или скриптов.
Применение псевдоэлемента overlay для создания тёмного слоя
Для затемнения фонового изображения без изменения исходного файла удобно использовать псевдоэлемент ::before или ::after. Он создаёт дополнительный слой поверх изображения, сохраняя его читаемость и контрастность текста.
Контейнер с фоновым изображением должен иметь свойство position: relative;, чтобы псевдоэлемент корректно позиционировался. Сам overlay располагается абсолютно и покрывает всю область блока.
Пример реализации:
.section {
position: relative;
background: url('background.jpg') center/cover no-repeat;
}
.section::before {
content: "";
position: absolute;
inset: 0;
background-color: rgba(0, 0, 0, 0.6);
z-index: 1;
}
.section > * {
position: relative;
z-index: 2;
}
Значение rgba(0, 0, 0, 0.6) определяет степень затемнения. Чем выше параметр альфа-канала, тем плотнее слой. Такой подход универсален: прозрачность можно изменять в зависимости от контента, а цвет заменить на любой другой, например, rgba(10, 20, 30, 0.5) для холодного оттенка. Псевдоэлемент не требует дополнительных HTML-элементов и не влияет на структуру документа.
Настройка градиента поверх изображения с помощью background-image
Для затемнения изображения без потери его детализации удобно использовать комбинированное свойство background-image с наложением градиента. Такой подход не требует дополнительных элементов и сохраняет адаптивность блока.
Пример синтаксиса:
background-image: linear-gradient(rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.5)), url(‘photo.jpg’);
Первый слой – полупрозрачный градиент, второй – изображение. Порядок важен: браузер рендерит слои сверху вниз, поэтому градиент должен идти первым. Значение rgba определяет интенсивность затемнения, где четвёртый параметр отвечает за прозрачность (от 0 до 1).
Для равномерного затемнения по всей поверхности укажите одинаковые цвета градиента сверху и снизу. Чтобы затемнить только верхнюю часть, измените значения прозрачности, например: linear-gradient(rgba(0,0,0,0.7), rgba(0,0,0,0)).
При необходимости усилить контраст можно использовать background-blend-mode: multiply; – он позволяет смешивать цвета градиента и изображения, создавая более глубокий эффект без потери читаемости текста на фоне.
Такой метод совместим с современными браузерами и работает корректно при масштабировании, что делает его оптимальным решением для адаптивных интерфейсов.
Затемнение при наведении курсора с использованием hover-эффекта

Для создания эффекта затемнения при наведении курсора достаточно применить псевдокласс :hover к элементу, содержащему изображение в качестве фона. Метод не требует скриптов и обеспечивает мгновенный отклик.
Пример базового решения:
.image-box { background: url('photo.jpg') center/cover; transition: filter 0.3s ease; } |
.image-box:hover { filter: brightness(60%); } |
Свойство filter: brightness() регулирует яркость, где значение ниже 100% создаёт затемнение. Оптимальный диапазон – от 50% до 70%, при котором сохраняются детали изображения без чрезмерного потемнения.
Если нужно затемнение с наложением цвета, можно добавить псевдоэлемент ::after с прозрачным фоном:
.image-box { position: relative; } |
.image-box::after { content: ""; position: absolute; inset: 0; background: rgba(0,0,0,0); transition: background 0.3s; } |
.image-box:hover::after { background: rgba(0,0,0,0.4); } |
Такой подход обеспечивает плавное затемнение без искажения оригинального цвета и подходит для баннеров, карточек и фоновых секций.
Комбинирование прозрачности и цвета для мягкого затемнения

Для плавного затемнения изображения можно наложить полупрозрачный слой с цветом, чаще всего – чёрным или тёмно-синим оттенком. Такой приём создаёт аккуратное смягчение без потери деталей. Основной инструмент – свойство background-color в сочетании с rgba(), где последний параметр задаёт уровень прозрачности от 0 до 1.
Пример:
.overlay {
position: absolute;
inset: 0;
background-color: rgba(0, 0, 0, 0.4);
}
Число 0.4 делает затемнение мягким, не искажая насыщенность изображения. При необходимости можно варьировать прозрачность для разных экранов, используя медиазапросы или переменные CSS.
Если нужен оттенок с лёгким цветовым тоном, можно заменить чёрный на, например, rgba(30, 0, 60, 0.35). Это добавит визуальной глубины и поможет выделить текст на фоне. Важно избегать значений прозрачности ниже 0.2 – эффект будет незаметен, и выше 0.6 – изображение потеряет контраст.
Чтобы добиться максимальной гибкости, слой с цветом обычно помещают поверх изображения через псевдоэлемент ::before или ::after. Такой подход позволяет управлять затемнением без изменения исходного изображения.
Создание адаптивного затемнения для разных размеров экрана
Для корректного затемнения изображений на различных устройствах используйте медиазапросы CSS и пропорциональные значения прозрачности. Основной подход – наложение полупрозрачного слоя поверх изображения через псевдоэлемент ::before или ::after.
- Создайте контейнер изображения с относительным позиционированием:
.image-container { position: relative; display: block; width: 100%; height: auto; } - Добавьте затемняющий слой с абсолютным позиционированием:
.image-container::before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.3); /* начальный уровень затемнения */ pointer-events: none; } - Используйте медиазапросы для изменения интенсивности затемнения:
@media (max-width: 1200px) { .image-container::before { background-color: rgba(0, 0, 0, 0.25); } } @media (max-width: 768px) { .image-container::before { background-color: rgba(0, 0, 0, 0.2); } } @media (max-width: 480px) { .image-container::before { background-color: rgba(0, 0, 0, 0.15); } } - Для динамического изменения затемнения используйте относительные единицы, такие как
vhилиvw:.image-container::before { background-color: rgba(0, 0, 0, calc(0.3 - 0.1 * (100vw / 1200))); }Это уменьшает затемнение на меньших экранах без жесткой привязки к медиазапросам.
- Комбинируйте градиенты и rgba для плавного перехода между светлыми и затемненными участками:
.image-container::before { background: linear-gradient( rgba(0,0,0,0.4), rgba(0,0,0,0.2) ); }
Следуя этим рекомендациям, затемнение сохраняет визуальный баланс на мониторах, планшетах и смартфонах, а код остаётся лёгким и адаптивным.
Вопрос-ответ:
Как сделать затемнение фона изображения с помощью CSS без использования дополнительных картинок?
Для затемнения изображения можно использовать CSS-свойство filter. Например, добавив правило filter: brightness(50%); к элементу img, изображение станет темнее. Чем меньше значение в процентах, тем сильнее эффект. Это простой способ управлять яркостью без изменения исходного файла.
Можно ли затемнять изображение только при наведении курсора?
Да, для этого используют псевдокласс :hover. Например, если у вас есть блок с изображением .image-block img, можно прописать: .image-block img:hover { filter: brightness(70%); }. При наведении яркость уменьшится до 70%, а когда курсор убирается — вернется к исходному состоянию.
Как затемнить изображение с наложением полупрозрачного слоя?
Можно использовать дополнительный элемент, который накладывается поверх изображения. Например, создать div с абсолютным позиционированием, растянутый на всю область картинки, и задать ему background-color: rgba(0, 0, 0, 0.4);. Такой подход удобен, если нужно комбинировать затемнение с текстом или другими элементами поверх изображения.
Влияет ли затемнение на производительность сайта?
Использование свойства filter: brightness() на нескольких больших изображениях может слегка нагрузить браузер, особенно на слабых устройствах. Наложение полупрозрачного слоя с помощью background-color обычно работает быстрее, так как не требует перерасчета пикселей изображения. Для оптимизации можно использовать оба метода выборочно в зависимости от нужного эффекта.
Можно ли одновременно затемнять изображение и изменять его контраст?
Да, CSS позволяет комбинировать несколько фильтров через свойство filter. Например: filter: brightness(60%) contrast(120%); сначала уменьшает яркость до 60%, а затем увеличивает контраст на 20%. Порядок фильтров влияет на итоговый результат, поэтому можно экспериментировать, чтобы получить нужный визуальный эффект.
Как с помощью CSS сделать изображение темнее без изменения исходного файла?
Для затемнения изображения можно использовать свойство filter с функцией brightness(). Например, чтобы уменьшить яркость на 50%, можно написать: img { filter: brightness(50%); }. Это изменение происходит на уровне отображения в браузере и не влияет на исходный файл изображения. Такой способ удобно применять для наведения визуальных акцентов или создания эффектов при наведении курсора.
Можно ли сделать затемнение изображения плавным при наведении на него?
Да, для плавного эффекта используется CSS-свойство transition. Например, можно задать изображению исходную яркость и плавное изменение при наведении: img { filter: brightness(100%); transition: filter 0.3s; } img:hover { filter: brightness(50%); }. В этом примере яркость изображения будет уменьшаться до 50% за 0.3 секунды при наведении курсора, создавая аккуратный визуальный эффект.
