Тени помогают сделать визуальную составляющую сайта интересной и эстетичной. В посте рассмотрим свойство CSS box-shadow и то, как его можно стилизовать. Свойство box-shadow позволяет добавить тень вокруг элемента на веб-странице. Тень подсказывает пользователю, является ли элемент — кнопка, картинка — интерактивным. Благодаря теням, вне экранов гаджетов мы получаем представление о размере и глубине объекта, и свойство box-shadow добавляет реализм в оформление сайта. Вот как обычно это свойство box-shadow прописывают: Первый четыре значения такие: x-offset, определяет горизонтальное положение тени; y-offset, определяет вертикальное положение тени; радиус размытия, который влияет на резкость тени. Чем выше значение, тем менее насыщенные тени, и наоборот; четвёртое значение определяет распространение тени. Все значения, кроме радиуса размытия, могут быть отрицательными. Если сделать тень, как описано выше, она окажется внизу элемента. Но если значения заменить на отрицательные, то тень будет сверху: Если установить распространение на 0 px, тень будет такого же размера, что и элемент. Положительное значение сделает тень больше, отрицательное — уменьшит.  Следующее значение в свойстве — цвет. Используем цвета rgba() с альфа-каналом, чтобы указывать непрозрачность: это важно для стилизации под реальность, ведь тени в хорошо освещённых местах не чисто чёрные и не слишком плотные. Можете понаблюдать, как тени ведут себя по отношению к источникам света и к поверхностям, на которых лежат. Самые тёмные тени падают на плоскости, которые ближе всего к объекту, а дальше они размываются. Поэтому тень не должна быть похожа на чёрную обводку. Это фильтр, который добавляет тень вокруг изображения. Его работа сильно отличается от box-shadow. Вот как выглядит разница в коде: Чтобы потренироваться, создайте простой контейнер HTML: Затем CSS: Вот что получится: На box-shadow может повлиять псевдокласс :hover. Он добавляет тень к компонентам, у которых её не было, или меняет существующую тень. Вот как это выглядит со свойством transform: Свойство transform создаёт иллюзию того, что блок приподнимается на странице. Функция translate() изменяет размер окна. Добавьте ключевое слово inset, чтобы поместить тень внутрь рамки блока или элемента. Так блок будет казаться погружённым в страницу. Значения можно менять, сколько захотите. Вот как выглядят тени на примерах: Альтернативой функции translate() будет scale(). Если translate() изменяет положение тени по осям x и y, scale() увеличивает размер блока по этим же осям. Во втором поле добавьте значение scale() в :hover. Размер блока увеличится в 1,1 раза. Тени накладываются друг на друга, если их значения разделить запятыми. Такой способ помогает создавать тени, которые плавно сливаются со страницей. Посмотрим: Значение распространения не указано — в данном случае не нужно, но эксперименты никто не запрещает.  Если установить значения смещения и радиуса размытия на 0 и добавить значение распространения одной тени, к блоку добавится граница. Технически эта граница — тень, поскольку блоку в родительском элементе не занимает места. Вот результат применения двух методов, обратите внимание на гладкую и тонкую тень на левой рамке: Свойство можно использовать с любыми элементами. Хорошо работает с карточками, полями ввода, картинками, кнопками. В реальности тени обычно серые или чёрные, разной степени прозрачности. Чтобы изменить цвет тени, надо поменять источник света. В вебе вместо этого применяют box-shadow. Попробуем на примере: Вышло: Если тени наслаивать друг на друга, свечение можно сделать ярче: Лучше всего такие тени смотрятся, если сделать их контрастными цветами на тёмном фоне. Яркость можно менять с помощью прозрачности. Визуально интересный эффект, который имитирует объекты из реальной жизни, такой 3D на минималках. Первые два эффекта, которые мы потренируемся создавать, касаются плоских компонентов, которые как бы парят над страницей, отбрасывая тени на фон. Кажется, что перед нами рельефное изображение. Рельеф можно направить и в глубину: Вот какой будет результат. Белая тень показывает направление «источника света» и работает, как блик. Похоже на реальный мир: Попробуем сделать переключатель, на который пользователь сможет «нажимать». Для начала делаем чекбокс. Добавляем CSS: Добавляем иконку. В примере иконка из Font Awesome.  Задайте свойства, которые отображаются при нажатии на кнопку. Добавьте box-shadow внутри круга, чтобы создать два вложенных слоя. Установите цвет значка после щелчка. Итог: К сожалению, не все браузеры, особенно в ранних версиях, поддерживают box-shadow.  Так что надо использовать расширение webkit.  Например, для корректного отображения в Chrome с 4 по 9 версию нужен префикс -webkit-. Mozilla Firefox в версиях 2 и 3 свойство не поддерживается и частично поддерживается в версии 3.5 and 3.6 (с префиксом -moz-). Safari частично поддерживает свойство в версиях 3.1 и 4 с префиксом -webkit-. Opera поддерживает во всех версиях, кроме 10.1 А у Microsoft Edge всё хорошо. Если браузер не поддерживает тени, они просто не отображаются и не влияют на макет. Тени — это здорово, но если использовать их неправильно, можно испортить весь проект. Вот несколько советов, которые надо учитывать при стилизации теней:  Лучше меньше. При наложении теней браузер выполняет больше работы. Для современных устройств это не проблема, но если делаете проект для аудитории с потенциально старыми устройствами или плохим интернетом, не перестарайтесь. Нужна логика. Не надо делать тени бессистемными. Предполагается, что у вас есть источники света, которые влияют на объекты на странице. Поэтому в расположении теней будет логика. Без анимации. Если анимировать  box-shadow, производительность упадёт. Да и анимированные тени — это уже слишком. Используйте инструменты для наложения теней. Если лень писать много строк кода, а многослойных теней хочется, попробуйте shadows.brumm.af. Он добавляет к объекту до 10 слоёв box-shadow и экономит время, чтобы не вводить вручную несколько значений.   Платформа профессионального роста