
Тень в веб-интерфейсе выполняет не только декоративную функцию, но и помогает акцентировать внимание на элементах, создавая визуальную иерархию. В HTML за это отвечают CSS-свойства box-shadow и text-shadow, позволяющие управлять глубиной и направлением света без использования графики.
box-shadow применяется к блочным элементам: кнопкам, карточкам, контейнерам. С его помощью можно задать смещение по осям X и Y, радиус размытия и степень растяжения. Например, значение box-shadow: 0 4px 10px rgba(0,0,0,0.25); создаёт мягкую тень снизу с прозрачностью в 25%.
text-shadow подходит для выделения заголовков и текста. Оно принимает аналогичные параметры, но применяется к символам. Минимальное смещение вроде text-shadow: 1px 1px 2px #333; делает шрифт более читаемым на светлом фоне, тогда как отрицательные значения смещения позволяют создать эффект подсветки.
Комбинируя несколько теней через запятую, можно добиться сложных эффектов: многослойного свечения, глубины или имитации неона. Такой подход экономит ресурсы по сравнению с растровыми изображениями и облегчает адаптацию интерфейса под разные устройства.
Простая тень для текста с помощью text-shadow
Свойство text-shadow задаёт смещение и размытие тени для текста. Синтаксис: text-shadow: смещениеX смещениеY радиус-размытия цвет;.
Пример минимальной тени: text-shadow: 2px 2px 0 #000; – чёрная тень без размытия, смещённая на 2 пикселя вправо и вниз.
Для мягкой тени используйте размытие: text-shadow: 3px 3px 5px rgba(0,0,0,0.5);. Здесь полупрозрачный чёрный цвет создаёт эффект глубины.
Допускается несколько теней через запятую: text-shadow: 1px 1px 0 #fff, 2px 2px 5px rgba(0,0,0,0.6);. Это позволяет комбинировать светлые и тёмные контуры.
Не увеличивайте смещение при малом размере шрифта, иначе тень станет нечитаемой. Оптимальное значение размытия обычно не превышает 1/3 от размера шрифта.
Создание многослойной текстовой тени
Свойство text-shadow поддерживает перечисление нескольких теней через запятую. Каждый слой задаётся в формате: смещение по оси X, смещение по оси Y, размытие, цвет.
Пример многослойного эффекта:
h1 {
text-shadow:
1px 1px 0 #000,
2px 2px 2px rgba(0,0,0,0.6),
3px 3px 5px rgba(0,0,0,0.4);
}
Первый слой создаёт чёткий контур, второй добавляет полупрозрачное смещение, третий формирует мягкое размытие. Использование комбинации плотных и размытых слоёв позволяет добиться глубины и псевдо-объёмного эффекта.
Для ярких акцентов применяйте разные цвета. Например, можно комбинировать белый внутренний обвод и тёмные размытые слои для контраста на насыщенном фоне.
Добавление тени к блоку через box-shadow
Свойство box-shadow позволяет задать тень для любого блочного элемента. Синтаксис:
box-shadow: смещениеX смещениеY радиусРазмытия радиусРастяжения цвет;
- смещениеX – сдвиг тени по оси X (может быть отрицательным);
- смещениеY – сдвиг по оси Y;
- радиусРазмытия – степень размытия, чем больше значение, тем мягче тень;
- радиусРастяжения – расширяет или сжимает область тени;
- цвет – любой допустимый цвет в CSS (hex, rgb, rgba, hsl).
Пример базовой тени:
box-shadow: 4px 4px 12px rgba(0, 0, 0, 0.3);
Полезные варианты использования:
- Создание «поднятого» эффекта у карточек:
box-shadow: 0 2px 8px rgba(0,0,0,0.2); - Имитирование внутренней глубины через
inset:box-shadow: inset 0 0 6px rgba(0,0,0,0.4); - Составные тени – перечисление нескольких значений через запятую для более реалистичного эффекта.
Практический совет: используйте rgba или hsla для настройки прозрачности, чтобы тень выглядела естественно и не перекрывала содержимое.
Использование rgba для полупрозрачных теней
Формат rgba() позволяет задать цвет тени с прозрачностью, где четвертый параметр отвечает за уровень альфа-канала (от 0 до 1). Это дает возможность получать мягкие тени без резких границ.
Пример базового применения:
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
Рекомендации по использованию:
- Для фона светлых блоков выбирайте более низкую прозрачность (0.15–0.25), чтобы тень не выглядела грязной.
- При тёмных темах интерфейса увеличивайте значение до 0.35–0.5, чтобы тень оставалась заметной.
- Комбинируйте несколько теней с разной прозрачностью для создания глубины:
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2), 0 6px 12px rgba(0, 0, 0, 0.15); - Используйте мягкие значения размытия (8–20px), чтобы прозрачность распределялась равномерно.
Применение rgba вместо фиксированных цветов делает тень адаптивной: она гармонично сочетается с разным фоном, не перегружая дизайн.
Имитация объёмных кнопок с помощью внутренней тени

Для создания псевдообъёма удобно применять свойство box-shadow с параметром inset, который формирует тень внутри элемента. Такой приём позволяет визуально имитировать вдавленную или приподнятую поверхность кнопки.
Пример базовой кнопки с эффектом нажатия:
button {
background: #e0e0e0;
border: none;
padding: 10px 20px;
font-size: 16px;
box-shadow: inset 2px 2px 5px #c1c1c1,
inset -2px -2px 5px #ffffff;
border-radius: 6px;
cursor: pointer;
}
Первая внутренняя тень с тёмным оттенком создаёт углубление, вторая – светлая – имитирует блик. Контрастность и угол смещения подбираются экспериментально: чем меньше радиус и сильнее разница в цветах, тем жёстче выглядит рельеф. Для мягкого результата используйте большие значения размытия.
Чтобы усилить эффект интерактивности, меняйте тени при наведении:
button:hover {
box-shadow: inset 1px 1px 3px #c1c1c1,
inset -1px -1px 3px #ffffff;
}
Таким образом достигается иллюзия «нажатой» кнопки без использования изображений или дополнительных элементов.
Создание мягкой рассеянной тени для карточек
Для мягкой рассеянной тени используется свойство box-shadow с увеличенным значением размытия. Рекомендуется применять смещение по оси X и Y от 0 до 4px и размытие от 10 до 30px для естественного эффекта.
Пример: box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);. Здесь 0 – горизонтальное смещение, 2px – вертикальное, 20px – размытие, rgba(0,0,0,0.1) – цвет с прозрачностью для мягкости.
Чтобы тень выглядела объемнее, используйте несколько слоев через запятую: box-shadow: 0 2px 10px rgba(0,0,0,0.08), 0 4px 20px rgba(0,0,0,0.05);. Верхний слой создает легкий контур, нижний – глубокую рассеянность.
Для карточек с закругленными углами важно синхронизировать border-radius и box-shadow, иначе тень будет выглядеть разорванной. Например, border-radius: 12px; вместе с box-shadow: 0 4px 24px rgba(0,0,0,0.12);.
Цвет тени лучше подбирать с низкой непрозрачностью (0.05–0.15) и темными оттенками серого вместо черного. Это делает эффект более естественным и легко сочетаемым с фоном страницы.
Для адаптивного дизайна используйте относительные единицы для смещения и размытия, например em или rem, чтобы тень масштабировалась вместе с карточкой на разных устройствах.
Комбинирование нескольких теней с разным смещением и прозрачностью позволяет создать эффект глубины без резких контуров и улучшает визуальное восприятие карточки на светлом фоне.
Анимация появления и исчезновения тени
Для создания плавного появления и исчезновения тени используйте свойство box-shadow в сочетании с CSS-переходами (transition). Например, определите базовое состояние элемента с нулевой тенью и изменяйте её при наведении или добавлении класса:
Пример CSS:
.element {
width: 150px;
height: 100px;
background-color: #f0f0f0;
box-shadow: 0 0 0 rgba(0, 0, 0, 0);
transition: box-shadow 0.4s ease-in-out;
}
.element.active {
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.3);
}
Рекомендуется использовать rgba для цвета тени, чтобы можно было контролировать прозрачность и плавность появления. Время transition выбирайте в диапазоне 0.3–0.6 секунд для естественного эффекта. Свойство ease-in-out обеспечивает постепенное ускорение и замедление.
Для комплексных эффектов можно анимировать несколько параметров тени одновременно: смещение по X и Y, размытие и spread:
| Свойство | Описание | Пример значения |
|---|---|---|
| offset-x | Смещение по горизонтали | 0px → 10px |
| offset-y | Смещение по вертикали | 0px → 12px |
| blur-radius | Радиус размытия | 0px → 20px |
| spread-radius | Расширение тени | 0px → 4px |
| color | Цвет и прозрачность | rgba(0,0,0,0) → rgba(0,0,0,0.3) |
Для динамических интерфейсов полезно добавлять и удалять класс с тенью через JavaScript, чтобы запускать анимацию по событиям, например:
const box = document.querySelector('.element');
box.addEventListener('mouseenter', () => box.classList.add('active'));
box.addEventListener('mouseleave', () => box.classList.remove('active'));
Такой подход позволяет контролировать момент появления и исчезновения тени без использования сторонних библиотек и обеспечивает совместимость с современными браузерами. Можно комбинировать несколько теней, разделяя их запятыми, для создания более сложного объема.
Кросс-браузерные особенности работы теней

Свойство box-shadow поддерживается всеми современными браузерами, включая Chrome, Firefox, Edge и Safari, начиная с их версий 10–11. В Internet Explorer до версии 9 оно отсутствует, что требует использования фильтров типа filter: progid:DXImageTransform.Microsoft.Shadow() для реализации аналогичного эффекта.
Для текстовых теней text-shadow поддерживается в IE9+, Edge, Chrome, Firefox и Safari. IE8 игнорирует это свойство, поэтому для важного текста с тенью рекомендуется создавать альтернативный визуальный эффект через полупрозрачные дубликаты текста.
Отрицательные значения смещения по осям X и Y в box-shadow корректно обрабатываются всеми современными движками, но в старых версиях Safari и Opera до 10.5 возможны артефакты при размытии > 20px. Для предсказуемого результата лучше ограничивать blur-radius значениями до 15px.
Множественные тени, указанные через запятую, полностью поддерживаются Chrome 10+, Firefox 3.5+, Edge и Safari 5+. В IE11 множественные тени рендерятся корректно, но IE10 отображает только первую из списка.
Для кросс-браузерной совместимости рекомендуется явно задавать rgba() вместо transparent для цвета тени, так как IE10 и старые мобильные браузеры некорректно обрабатывают ключевое слово transparent.
Свойство inset поддерживается в Firefox 3.6+, Chrome 10+, Edge и Safari 5. IE10 и IE11 рендерят внутренние тени без проблем, но для IE9 требуется использование дополнительного контейнера с filter: Shadow() или псевдоэлемента.
При использовании CSS-переменных для управления цветами или размерами теней необходимо учитывать, что IE11 и более старые версии не поддерживают var(--variable), поэтому следует предусмотреть запасные значения через стандартное объявление.
В мобильных браузерах iOS Safari до версии 9 и Android Browser до 4.4 могут появляться задержки при рендеринге больших размытой тени на блоках с трансформациями. Для оптимизации стоит применять отдельный слой с will-change: box-shadow или минимизировать интенсивность размытия.
Вопрос-ответ:
Как добавить тень к тексту в HTML с помощью CSS?
Чтобы добавить тень к тексту, используется свойство text-shadow. Его синтаксис включает смещение по горизонтали и вертикали, размытие и цвет тени. Например: text-shadow: 2px 2px 5px rgba(0,0,0,0.5);. Здесь тень смещена на 2 пикселя вправо и вниз, имеет размытие 5 пикселей и полупрозрачный черный цвет.
Можно ли сделать тень у блока с границей и фоном?
Да, для этого применяется свойство box-shadow. Оно работает для любого блочного элемента и может включать смещение по осям X и Y, размытие и цвет. Пример: box-shadow: 5px 5px 10px gray;. Тень появляется за пределами блока, создавая эффект объёма.
Какие значения у box-shadow влияют на вид тени?
У box-shadow четыре основных значения: смещение по горизонтали, смещение по вертикали, радиус размытия и цвет. Смещение определяет, где появится тень относительно элемента. Радиус размытия делает края мягче или резче, а цвет задаёт оттенок тени. Есть также необязательное значение inset, которое помещает тень внутрь элемента.
Можно ли создавать несколько теней для одного текста или блока?
Да, CSS позволяет указывать несколько теней через запятую. Для текста это выглядит так: text-shadow: 1px 1px 2px black, -1px -1px 2px red;. Для блоков аналогично: box-shadow: 3px 3px 5px gray, -3px -3px 5px lightgray;. Каждая тень добавляется последовательно, создавая более сложный визуальный эффект.
Как сделать тень более мягкой или растянутой?
Мягкость тени регулируется третьим значением box-shadow или text-shadow — радиусом размытия. Чем больше число, тем размытее и растянутее тень. Например, box-shadow: 0 0 20px rgba(0,0,0,0.3); создаст широкую и мягкую тень без смещения.
