Создание приподнятых теней (
) с помощью CSS.
1 lifted shadow
Такие тени создаются с помощью двух псевдо-элементов
и 1
:before
. Дополнительной HTML-разметки при этом не требуется. Оба псевдо-элемента применяются только к одному элементу, который должен быть блочным. Ниже показана последовательность действий, которая совсем несложная.1
:after
Статья написана по мотивам известного блога Николаса Галлахера, где показаны самые разнообразные виды таких сложных теней.
Приступаем к написанию кода. Создаем элемент
и для него прописываем правила (чтобы смотрелся хорошо):1
p
Здесь все несложно. Задаем ширину и высоту блока, а также косметическую красоту типа выравнивания по центру и придания тени для блока. Не забываем сделать блок относительно позиционированным, так как в последующих шагах нам потребуются псевдо-элементы, которые нужно будет позиционировать относительно блока-родителя.
Такой интересный момент в этом коде - нужно обязательно явно установить фоновый цвет для блока
. Иначе он будет прозрачным по умолчанию и сквозь него будут проступать наши тени.1
background-color: #fff
Необходимо получить две тени, одна из которых располагается под левым углом блока, а другая - под правым. Поэтому нам потребуются два псевдо-элемента -
и 1
:before
. Создаем правила, общие для обоих псевдо-элементов:1
:after
Немного “расшифруем” показанный выше код. Устанавливаем для обоих псевдо-элементов абсолютное позиционирование и координаты: от нижней границы 15px (
) и от левой границы 4px (1
bottom: 15px
). Ширину элемента устанавливаем в половину от ширины элемента-родителя (1
left: 4px;
), высоту - 10% от ширины этого же элемента. Один интересный момент, про который не нужно забыть - “подсовываем” тени под блок-родитель с помощью свойства 1
width: 50%;
. Ну и создаем сами тени правилом 1
z-index: -1
, указав браузерные префиксы.1
box-shadow: 0 15px 10px rgba(0,0,0,0.6)
Теперь у нас есть обе тени, но выглядят они как одна, так как первая накладывается на другую, ибо их координаты одинаковы. Поэтому нужно “разнести” их по разным углам, установив для псевдо-элемента
иное позиционирование по оси X:1
:after
Почти все готово. Осталось только сделать для обеих теней “косину”, то есть развернуть их на определенное количество градусов. Левую тень развернем против часовой стрелки, чтобы ее внутренний угол оказался под блоком-родителем. Правую развернем точно также, только по часовой стрелке, чтобы ее внутренний угол также “спрятался” под блоком. Разворачивание будем выполнять с помощью правила
для псевдо-элемента 1
transform: rotate
-1
:before
и для псевдо-элемента
-1
:after
Результат нашей работы можно посмотреть ниже. Красиво!
Можно немного усложнить задачу и сделать нижние уголки блока визуально приподнятыми. Создастся иллюзия того, что у блока завернутые вверх уголки, как у листочка бумаги. Для этого нужно вспомнить о том, что у свойства
есть два параметра, а не одно.1
border-radius
То есть, для одного угла можно задать два радиуса скругления, и тогда само скругление получиться не таким “правильным”, но более реалистичным. Первый радиус делаем большого размера, а второй немного меньше.
В результате угол получается не скругленным, а немного скошенным. В нашем примере для блока-родителя задаем радиусы скругления нижних углов следующим образом:
Итогом получается картинка листочка бумаги с завернутыми уголками:
На сайте Николаса Галлахера есть множество других примеров создания теней, которые по-настоящему впечатляют. В этой статье приведен только один из них, самый распространенный. Как видите, ничего сложного в его создании нет. Но вот на кросс-браузерность такой пример мною не рассматривался, ибо мне был важен сам результат.
На этом все.