Изогнутая тень с помощью псевдоэлементов
Для получения изогнутой тени, нужно прописать обоим псевдоэлементам before и after, CSS-свойство transform: skewY. По оси Y, мы изменим прямые углы на +-7.5 градусов. По крайней мере 2 угла у прямоугольника будут не 90 градусов, так мы получим искаженную фигура.
HTML разметка
В HTML разметке мы создали обертку wrap для блока с тенью curved shadow.
<div class="wrap curved">
<div class="shadow">
<div>Curved Shadow</div>
</div>
</div>
CSS код
Зададим обертке wrap значения у свойств justify-content и align-items, выравнивающие по центру и назначим ее флексовым контейнером.
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
.wrap{
position: relative;
width: 50%;
height: 50vh;
display: flex;
justify-content: center;
align-items: center;
}
Внутри wrap поместим блок curved со светло-желтым фоном. На нем будет хорошо видна тень.
.curved{
position: relative;
display: flex;
justify-content: center;
align-items: center;
background: #FAFAFA;
}
Теперь создадим красный блок с белой рамкой. Белая рамка здесь необязательный компонент, она больше служит как украшательство.
.curved{
position: relative;
display: flex;
justify-content: center;
align-items: center;
background: #FFF3E0;
}
.curved .shadow{
position: relative;
width: 450px;
height: 250px;
z-index: 2;
}
.curved .shadow div{
position: absolute;
width: 100%;
height: 100%;
background: #FF5722;
border: 10px solid #fff;
z-index: 10; / * красный блок на верхнем слое * /
display: flex;
justify-content: center;
align-items: center;
color: #fff;
font-size: 3em;
}
Создание теней
Нам потребуется два псевдоэлемента: before для левой тени и after для правой тени. Псевдоэлементы называются так, потому что их нет в HTML разметке. Поскольку они играют чисто декоративную роль и в целом повторяют контуры своего родителя-элемента.
/ * левая тень * /
.curved .shadow:before{
content: '';
position: absolute;
bottom: 30px;
left: 4%;
width: 70%;
height: 70%;
background: #000;
transform-origin: right; / * трансформация относительно правой точки * /
transform: skewY(-7.5deg); / * искажение по углов * /
filter: blur(15px); / * размытие тени * /
z-index: 1; / * тень на нижнем слое * /
opacity: 0.5; / * полупрозрачная тень * /
}
/ * правая тень * /
.curved .shadow:after{
content: '';
position: absolute;
bottom: 30px;
right: 4%;
width: 70%;
height: 70%;
background: #000;
transform-origin: left; / * трансформация относительно левой точки * /
transform: skewY(7.5deg);
filter: blur(15px);
z-index: 1;
opacity: 0.5;
}
Чтобы продемонстрировать тени полностью, значение у z-index было выставлено 20. Таким образом тени оказались на самом верхнем слое и чтобы поставить их под красный элемент, достаточно значение z-index сделать меньше, чем у блока-родителя.
Посмотрите пример на CodePen
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.