Включите исполнение JavaScript в браузере, чтобы запустить приложение.
Разработка7 июля, 2025

Как создать тени на CSS: свойство box-shadow

Погрузимся в одну из самых интересных и визуально эффектных тем в CSS – создание теней. Забудьте о плоских, скучных элементах. С помощью одного простого свойства box-shadow мы можем добавить глубину, объем и реалистичность веб-страницам.

Что такое box-shadow в CSS?

Представьте себе монитор компьютера или дисплей смартфона. По своей природе он плоский. Все элементы, которые мы размещаем на веб-странице (текст, картинки, кнопки, блоки) изначально тоже плоские. Выглядит аккуратно, но иногда скучновато. Не хватает ощущения объема, понимания, какой элемент находится «ближе» к нам, а какой «дальше». 

box-shadow ― это CSS-свойство, которое позволяет веб-мастерам добавить тень к любому блочному элементу на странице. Она создает иллюзию, будто элемент слегка приподнят над фоном или, наоборот, вдавлен в него.

Зачем нам вообще нужны тени в веб-дизайне? Они выполняют несколько важных функций: 

  • Тень помогает глазу пользователя понять структуру страницы. Элемент кажется ближе, важнее, чем элемент без тени. Это как в реальном мире: объект, отбрасывающий тень, явно существует в трехмерном пространстве. Мы можем управлять «высотой» элемента над «поверхностью» страницы, регулируя параметры тени. 
  • Тени часто используются для интерактивных элементов. Например, легкая тень под кнопкой делает ее более заметной. При наведении мыши тень может становиться более выраженной, подтверждая пользователю, что элемент интерактивен. 
  • Иногда нужно отделить один блок контента от другого, не используя жесткие рамки. Мягкая тень отлично справляется с этой задачей, создавая плавный переход. Также она может выделить ключевой элемент, например, модальное окно или всплывающую подсказку, приглушив остальной фон. 
  • Аккуратно настроенные тени делают интерфейс более живым, объемным и приятным для глаз. Они помогают связать цифровой интерфейс с нашим опытом восприятия реального мира. 

Важно понимать, box-shadow рисует тень именно для «коробки» элемента, учитывая его форму, включая скругленные углы. Это не тень от текста внутри элемента ― для этого есть отдельное свойство text-shadow. 

Синтаксис и параметры свойства box-shadow 

Чтобы создать тень, мы используем свойство box-shadow и передаем ему несколько параметров, которые определяют вид тени. Вот основной синтаксис:

box-shadow: [смещение-x] [смещение-y] [размытие] [растяжение] [цвет] [inset]; Давайте разберем каждый параметр: 

  • Смещение-x (горизонтальное смещение). Сдвигает тень вправо или влево относительно элемента. Положительное значение (например, 10px) сдвигает вправо, отрицательное (-10px) — влево. 0 — строго за элементом по горизонтали.
  • Смещение-y (вертикальное смещение). Сдвигает вниз или вверх относительно элемента. Положительное значение (10px) сдвигает вниз, отрицательное (-10px) – вверх. 0 – строго за элементом по вертикали. 
  • Размытие. Определяет, насколько «мягкой» или «размытой» она будет. Чем больше значение, тем сильнее размытие. Должно иметь только положительное значение (например, 15px). 0 (значение по умолчанию) — будет резкой, с четкими краями. 
  • Растяжение. Увеличивает или уменьшает размер самой тени перед размытием. Положительное значение (5px) увеличивает, отрицательное (-5px) — сжимает. 0 (по умолчанию) — изначально того же размера, что и элемент. 
  • Цвет тени. Задает цвет тени. Значения ― любой допустимый формат цвета в CSS — имя (black, red), HEX (#000000, #cccccc), RGB (rgb(0, 0, 0)), RGBA (rgba(0, 0, 0, 0.5) для полупрозрачности), HSL, HSLA. 
  • inset (внутренняя). Это ключевое слово (если оно присутствует) полностью меняет тип тени — она становится внутренней, то есть рисуется внутри границ элемента, создавая эффект вдавленности. 

Вы можете создавать несколько теней для одного элемента, перечисляя их параметры через запятую:

.element {   
box-shadow: 5px 5px 10px rgba(0,0,0,0.3), /* Первая */ 
            -5px -5px 10px rgba(255,255,255,0.1); /* Вторая */ } 
css

Примеры создания теней с помощью box-shadow 

Лучший способ понять, как работает box-shadow — это увидеть его в действии. Давайте создадим несколько простых HTML-блоков и применим к ним разные стили теней, разбирая каждый параметр. 

Подготовим «холст» — наш HTML: 

<!DOCTYPE html> 
<html lang="ru"> 
<head>     
<meta charset="UTF-8">     
<title>Примеры Box Shadow</title>     
<link rel="stylesheet» href="style.css"> 
</head> <body>     
<h1>Изучаем box-shadow</h1>     
<div class="box base">Базовый блок</div>     
<div class="box example-1">Пример 1: Простая смещенная </div>     
<div class="box example-2">Пример 2: Мягкая размытая (классика)</div>     
<div class="box example-3">Пример 3: Эффект свечения (без смещения)</div>     
<div class="box example-4">Пример 4: Сжатая (отрицательное растяжение)</div>     
<div class="box example-5">Пример 5: Несколько слоев теней</div> 
</body> 
</html> 
html

И базовые стили для CSS (файл style.css):

/* Зададим базовые стили для контейнера и самих блоков */ 
body {   
font-family: sans-serif;   
background-color: #f4f7f6; /* Светлый фон, чтобы тени были видны */   
padding: 20px;   
display: flex;   
flex-direction: column; /* Расположим блоки друг под другом */   
align-items: center; /* Выровняем по центру */ 
} 

h1 {   
color: #333;   
margin-bottom: 40px; 
} 

.box {   
width: 250px; /* Ширина блока */   
height: 120px; /* Высота блока */   
background-color: #ffffff; /* Белый фон для блока */   
border-radius: 8px; /* Слегка скруглим углы */   
margin-bottom: 50px; /* Отступ между блоками */   
display: flex;   
align-items: center;   
justify-content: center;   
text-align: center;   
font-size: 16px;   
color: #555;   
border: 1px solid #e0e0e0; /* Легкая рамка для базового блока */   
transition: box-shadow 0.3s ease; /* Плавный переход для тени при наведении */ 
} 

/* Уберем рамку у блоков с примерами, тень будет выполнять разделительную функцию */ 
.box:not(.base) {   
border: none; 
} 

/* Добавим легкий эффект при наведении для наглядности */ 
.box:not(.base):hover { 
box-shadow: 0 10px 20px 
rgba(0, 0, 0, 0.15); /* Увеличим при наведении */ 
transform: translateY(-3px); /* Слегка приподнимем блок */ 
transition: box-shadow 0.3s ease, transform 0.3s ease; /* Плавные переходы */ 
}
css

Стили для конкретных примеров теней

/* Пример 1: Простая смещенная */ 
/* Смещение X=4px (вправо), Y=4px (вниз), без размытия, без растяжения, черный цвет */ .example-1 {   
box-shadow: 4px 4px black; 
} 

/* Пример 2: Мягкая размытая (Наиболее часто используемый вариант) */ 
/* Смещение X=0 (по центру), Y=6px (вниз), размытие 12px, цвет черный с 10% непрозрачностью */ 
.example-2 {   
/* Заметьте использование RGBA для полупрозрачности - это ключ к естественным теням! */   
box-shadow: 0px 6px 12px rgba(0, 0, 0, 0.1); 
} 

/* Пример 3: Эффект свечения (часто для активных элементов или акцентов) */ 
/* Без смещения (0 0), размытие 15px, растяжение 5px (увеличивает размер тени ДО размытия), цвет синий */ 
.example-3 {   
background-color: #4a90e2; /* Изменим фон блока для наглядности */   
color: white;   
/* Положительное растяжение делает тень больше самого элемента */   
box-shadow: 0 0 15px 5px #4a90e2; 
} 
.example-3:hover { 
/* Переопределим hover для сохранения эффекта свечения */   
box-shadow: 0 0 25px 8px #4a90e2;   
transform: translateY(-3px); 
} 

/* Пример 4: Сжатая тень (используется для создания тонких контуров или необычных эффектов) */ 
/* Без смещения (0 0), небольшое размытие 5px, ОТРИЦАТЕЛЬНОЕ растяжение -4px (уменьшает тень), цвет серый */ 
.example-4 {   
/* Отрицательное растяжение делает тень меньше элемента ДО размытия */   
box-shadow: 0 0 5px -4px #555555; 
} 
.example-4:hover { 
/* Сделаем hover более заметным */   
box-shadow: 0 0 10px -2px #555555;   
transform: translateY(-3px); 
} 

/* Пример 5: Несколько слоев теней (для более сложных и реалистичных эффектов) */ 
/* Тени перечисляются через запятую. Порядок важен (первая указанная - самая верхняя) */ 
.example-5 {   
background-color: #e0e5ec; /* Фон для неоморфизма */   
box-shadow:     
/* Тень 1: Темная, снизу-справа (создает глубину) */     
5px 5px 10px rgba(163, 177, 198, 0.6),     
/* Тень 2: Светлая, сверху-слева (создает блик, эффект объема) */     -5px -5px 10px 
rgba(255, 255, 255, 0.5); 
} 
.example-5:hover {   
box-shadow:     
7px 7px 14px rgba(163, 177, 198, 0.7),     
-7px -7px 14px rgba(255, 255, 255, 0.6);   
transform: translateY(-3px); }
css

Особенности использования inset для внутренних теней 

Как мы упомянули, ключевое слово inset меняет тень, она начинает рисоваться внутри элемента. inset просто добавляется к остальным параметрам в начало или конец списка.

Например: 

HTML: 

<div class="box box-inset-1">Внутренняя </div> 
<div class="box box-inset-2">Эффект вдавленности</div>   
html

CSS: 

/* Пример 1: Простая внутренняя тень сверху-слева */ 
.box-inset-1 {   
box-shadow: inset 5px 5px 10px rgba(0, 0, 0, 0.4); /* Смещение от верхнего левого угла внутрь*/ } 

/* Пример 2: Эффект вдавленной кнопки (две внутренние тени) */ 
.box-inset-2 {   
background-color: #e0e0e0;   
border: none;   
box-shadow: inset 3px 3px 6px rgba(0, 0, 0, 0.2), /* Темная внутри */             
inset -3px -3px 6px rgba(255, 255, 255, 0.7); /* Светлая внутри */ 
}   
css

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

Советы по оптимизации дизайна с тенями 

Тени — это здорово, но ими легко злоупотребить. Вот несколько советов, как использовать box-shadow эффективно и со вкусом: 

  1. Слишком темные, резкие или большие тени могут выглядеть неестественно и грязно. Часто легкая, едва заметная тень работает лучше всего. 
  1. Старайтесь, чтобы тени на странице падали примерно в одном направлении (например, слегка вниз и вправо), как будто свет идет из одного источника. Это создает целостность. 
  1. Тень должна быть видна на фоне. Слишком светлая тень на белом фоне потеряется, слишком темная тень может плохо смотреться на темном фоне. Подбирайте цвет и прозрачность. 
  1. Анимировать box-shadow можно (например, при наведении мыши), но будьте осторожны. Это может замедлить браузер, особенно на слабых устройствах. 
  1. Не злоупотребляйте растяжением (spread). Большое положительное растяжение часто выглядит неестественно. Отрицательное растяжение может быть полезно для создания тонких контуров. 

Свойство box-shadow — это универсальный инструмент для добавления визуальной глубины и изящества веб-интерфейсам. Поняв его параметры и немного попрактиковавшись, вы сможете создавать самые разнообразные эффекты — от легкого выделения до сложных объемных элементов.