CSS
box-shadow
генератор

Настройте параметры тени:




rgb(34, 60, 80)

{CSS} код для вставки:

 

Готовые тени:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Активные слои:

    Настройте блок:



    Box shadow CSS свойство

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

    Синтаксис

    Свойство принимает составное значение из нескольких частей: горизонтальное смещение, вертикальное смещение, радиус размытия, растяжение и цвет тени. Дополнительно можно указать ключевое слово inset для внутренней тени.

    div {
        box-shadow: offset-x offset-y blur spread color;
        /* или с внутренней тенью: */
        box-shadow: offset-x offset-y blur spread color inset;
    }

    В отличие от свойств типа border , которые разбиты на подсвойства, box-shadow записывается одной строкой. Порядок значений важен — перепутать их нельзя.

    1

    Горизонтальное смещение (offset-x)

    Первый параметр задаёт смещение тени по горизонтали. Положительное значение сдвигает тень вправо, отрицательное — влево.

    .box-1 {
        box-shadow: -15px 0 10px 0 rgba(0, 0, 0, 0.2);
    }
    .box-2 {
        box-shadow:  15px 0 10px 0 rgba(0, 0, 0, 0.2);
    }
    .box-1
    .box-2
    2

    Вертикальное смещение (offset-y)

    Второй параметр — смещение по вертикали. Положительное значение опускает тень вниз, отрицательное поднимает её вверх.

    .box-1 {
        box-shadow: 0  15px 10px 0 rgba(0, 0, 0, 0.2);
    }
    .box-2 {
        box-shadow: 0 -15px 10px 0 rgba(0, 0, 0, 0.2);
    }
    .box-1
    .box-2
    3

    Радиус размытия (blur)

    Третий параметр отвечает за мягкость краёв тени. Значение 0 даёт чёткую тень без размытия. Чем больше значение, тем мягче и протяжённее тень. Отрицательные значения не допускаются.

    .box-1 {
        box-shadow: 0 5px  0px 0 rgba(0, 0, 0, 0.2);
    }
    .box-2 {
        box-shadow: 0 5px 15px 0 rgba(0, 0, 0, 0.2);
    }
    .box-3 {
        box-shadow: 0 5px 30px 0 rgba(0, 0, 0, 0.2);
    }
    .box-1
    .box-2
    .box-3
    4

    Растяжение тени (spread)

    Четвёртый параметр увеличивает или уменьшает размер тени относительно элемента. Положительное значение расширяет тень за пределы блока, отрицательное — сжимает её.

    .box-1 {
        box-shadow: 0 0 5px  0px rgba(0, 0, 0, 0.2);
    }
    .box-2 {
        box-shadow: 0 0 5px  5px rgba(0, 0, 0, 0.2);
    }
    .box-3 {
        box-shadow: 0 0 5px -4px rgba(0, 0, 0, 0.8);
    }
    .box-1
    .box-2
    .box-3
    5

    Цвет тени (color)

    Цвет тени задаётся в любом формате CSS: HEX , RGB , RGBA , HSL . Чаще всего используют rgba() , чтобы управлять прозрачностью независимо от фона страницы.

    .box-1 {
        box-shadow: 0 10px 5px -5px #e6ecc1;
    }
    .box-2 {
        box-shadow: 0 10px 5px -5px rgba(30, 129, 204, 0.4);
    }
    .box-1
    .box-2
    5

    Внутренняя тень (inset)

    По умолчанию тень рисуется снаружи элемента. Ключевое слово inset переключает её внутрь — тень накладывается поверх содержимого и создаёт эффект вдавленной поверхности.

    .box-1 {
        box-shadow: 10px 10px 10px 2px rgba(34, 60, 80, 0.2) inset;
    }
    .box-2 {
        box-shadow: 10px 10px 10px 2px rgba(34, 60, 80, 0.2);
    }
    .box-1
    .box-2

    Несколько теней

    Одному элементу можно назначить сразу несколько теней — они перечисляются через запятую. Слои накладываются в порядке объявления: первая тень в списке находится поверх остальных. Это открывает широкие возможности для создания сложных световых эффектов.

    .box-1 {
        box-shadow:
            10px 10px 10px 2px rgba(34, 60, 80, 0.2) inset,
            10px 10px 10px 2px rgba(34, 60, 80, 0.2);
    }
    .box-1

    Тень для круглых элементов

    Форма тени повторяет форму элемента. Добавьте border-radius: 50% — и тень тоже станет круглой. Это удобно для аватаров, иконок и других круглых UI-компонентов.

    .avatar {
        border-radius: 50%;
        box-shadow: 10px 10px 10px 0 rgba(34, 60, 80, 0.3);
    }
    .avatar

    Эффект увеличения с тенью

    Совмещение box-shadow и transform: scale() создаёт убедительную иллюзию приближения элемента к пользователю при наведении. Плавность обеспечивает свойство transition .

    .card {
        transform: scale(1);
        box-shadow: 0 2px 8px rgba(34, 60, 80, 0.15);
        transition: box-shadow 0.3s ease, transform 0.3s ease;
    }
    .card:hover {
        transform: scale(1.05);
        box-shadow: 0 8px 24px rgba(34, 60, 80, 0.25);
    }
    .card

    Эффект парения элемента

    Более сложный и реалистичный эффект: тень накладывается на псевдоэлемент ::after , расположенный под блоком. При наведении элемент поднимается вверх, а тень сжимается и смещается — создаётся полная иллюзия подъёма.

    .card {
        position: relative;
        transform: translateY(0);
        transition: transform 0.4s ease;
    }
    .card::after {
        content: "";
        position: absolute;
        bottom: -20px;
        left: 50%;
        width: 80%;
        height: 8px;
        background-color: rgba(0, 0, 0, 0.15);
        border-radius: 50%;
        box-shadow: 0 0 12px 4px rgba(0, 0, 0, 0.2);
        transform: translate(-50%, 0);
        transition: transform 0.4s ease, opacity 0.4s ease;
    }
    .card:hover {
        transform: translateY(-24px);
    }
    .card:hover::after {
        transform: translate(-50%, 24px) scale(0.7);
        opacity: 0.6;
    }
    .card

    Тень для фигур с clip-path

    Свойство box-shadow не работает с нестандартными формами — clip-path обрезает тень вместе с содержимым. Для таких случаев используют CSS-фильтр drop-shadow() , который применяется к родительскому элементу.

    Сначала создадим элемент с произвольной формой через clip-path :

    .shape {
        clip-path: polygon(30px 0%, 100% 0%, 100% 100%, 30px 100%, 0 50%);
    }

    Теперь оборачиваем его в родительский блок и применяем фильтр к нему:

    <span class="shape-wrapper">
        <span class="shape">Контент</span>
    </span>
    .shape-wrapper {
        filter: drop-shadow(-2px 6px 4px rgba(34, 60, 80, 0.25));
    }
    .shape {
        clip-path: polygon(30px 0%, 100% 0%, 100% 100%, 30px 100%, 0 50%);
    }
    .shape

    Тени хорошо работают в паре с градиентными фонами — карточки, кнопки и панели получают объём сразу с двух сторон: снизу через box-shadow , сверху через цветовой переход фона. Если хотите подобрать градиент для своих элементов, воспользуйтесь генератором CSS-градиентов — задайте угол, цвета и сразу получите готовый код.

    Вопросы и ответы

    Что такое CSS свойство box-shadow?
    box-shadow — CSS свойство, которое добавляет одну или несколько теней за элементом, создавая иллюзию глубины на плоской странице. Тень применяется к большинству HTML-элементов, повторяет форму блока с учётом border-radius и не влияет на поток документа. Свойство задаётся одной строкой: горизонтальное смещение, вертикальное смещение, размытие, растяжение и цвет.
    Как задать несколько теней одному элементу?
    Перечислите тени через запятую в одном объявлении: box-shadow: 0 2px 8px rgba(0,0,0,0.15), 0 0 0 3px #4a90e2. Браузер рисует их в порядке объявления — первая тень в списке оказывается поверх остальных. Количество теней не ограничено, что позволяет строить сложные световые эффекты и многослойные обводки.
    Как задать тень только с одной стороны элемента?
    Используйте направленное смещение вместе с отрицательным значением spread. Например, тень только снизу: box-shadow: 0 8px 6px -6px rgba(0, 0, 0, 0.4). Отрицательный spread «втягивает» тень внутрь элемента, скрывая боковые и верхний края — снаружи остаётся только нижняя часть.
    Влияет ли box-shadow на расположение соседних элементов на странице?
    Нет. Тень — исключительно визуальный эффект: браузер рисует её поверх соседних элементов и не сдвигает их. Тень не добавляет размер к блоку и не учитывается при расчёте ширины, высоты и отступов. Если тень визуально перекрывает соседний контент, добавьте нужный отступ (margin или padding) вручную.
    Почему transition к box-shadow: none не анимируется плавно?
    Браузер не умеет интерполировать между конкретным значением тени и ключевым словом none — переход происходит мгновенно. Вместо none используйте «нулевую» тень: 0 0 0 0 transparent. Это валидное значение, между которым и любой тенью transition работает корректно: box-shadow: 0 0 0 0 transparent.
    Можно ли использовать box-shadow как замену border, чтобы не сдвигать соседние элементы?
    Да, это распространённый приём. При нулевом размытии и нулевом смещении четвёртый параметр (растяжение) создаёт визуально идентичную рамку: box-shadow: 0 0 0 2px #000. В отличие от border, тень не добавляет размер к блоку и не сдвигает соседние элементы. Особенно удобно для стилей :focus — обводка появляется и исчезает без прыжков вёрстки.
    Что производительнее для анимации — box-shadow или filter: drop-shadow()?
    box-shadow обычно быстрее: большинство браузеров обрабатывают его анимацию на видеокарте без повторного рисования страницы. filter: drop-shadow() анализирует реальные пиксели элемента, в том числе прозрачные области, что заметно дороже на больших блоках. Для максимальной плавности hover-эффектов тень лучше заранее задать на псевдоэлементе ::after и анимировать только его прозрачность (opacity), а не сам box-shadow.