Сегодня мы узнаем как сделать CSS тени без картинок. После изучения этого урока вам уже не понадобится CSS генератор тени.
В чем основное достоинство теней, созданных при помощи CSS3, так это в простоте реализации и уменьшении числа запросов к серверу (поскольку мы больше не используем картинки). Чтобы сделать тень на CSS нам понадобится тег div и CSS свойство box-shadow. Вам не понадобится дополнительная разметка, поскольку мы создим псевдо элементы :after и :before, которые поместим за основным объектом (div с классом block).
Взгляните на HTML код, для которого мы будем создавать CSS3 тень:
<div class="block">
<p>Содержимое</p>
</div>
Далее вы сможете посмотреть готовые примеры и код, необходимый для их реализации. С целью минимизации текста на странице, мы опустим CSS свойства с браузерными префиксами. Полный код можно увилдеть, нажав на соответствующую примеру ссылку "Пример".
Приподнятые уголки
Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
border-radius:4px;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
bottom:15px;
left:10px;
width:50%;
height:20%;
max-width:300px;
box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
transform:rotate(-3deg);
}
.block:after {
right:10px;
left:auto;
transform:rotate(3deg);
}
Завитки на уголках
Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
border:1px solid #efefef;
border-radius:0 0 120px 120px / 0 0 6px 6px;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
bottom:12px;
left:10px;
width:50%;
height:55%;
max-width:200px;
box-shadow:0 8px 12px rgba(0, 0, 0, 0.5);
transform:skew(-8deg) rotate(-3deg);
}
.block:after {
right:10px;
left:auto;
transform:skew(8deg) rotate(3deg);
}
Перспектива
С помощью тени можно придать блоку перспективу. Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
.block:before {
left:80px;
bottom:5px;
width:50%;
height:35%;
max-width:200px;
box-shadow:-80px 0 8px rgba(0, 0, 0, 0.4);
transform:skew(50deg);
transform-origin:0 100%;
}
.block:after {
display:none;
}
Приподнятый бокс
CSS тень у проподнятого блока. Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
box-shadow: 0 15px 10px -10px rgba(0, 0, 0, 0.5),
0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
Один вертикальный изгиб
Пример CSS3 тени для вертикально согнутого блока. Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
.block:before {
top:10px;
bottom:10px;
left:0;
right:50%;
box-shadow:0 0 15px rgba(0,0,0,0.6);
border-radius:10px / 100px;
}
Два вертикальных изгиба
Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
.block:before {
top:10px;
bottom:10px;
left:0;
right:0;
box-shadow:0 0 15px rgba(0,0,0,0.6);
border-radius:10px / 100px;
}
Один горизонтальный изгиб
Пример CSS3 тени для горизонтально согнутого блока. Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
.block:before {
top:50%;
bottom:0px;
left:10px;
right:10px;
box-shadow:0 0 15px rgba(0,0,0,0.6);
border-radius:100px / 10px;
}
Два горизонтальных изгиба
Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
}
.block:before {
top:0px;
bottom:0px;
left:10px;
right:10px;
box-shadow:0 0 15px rgba(0,0,0,0.6);
border-radius:100px / 10px;
}
Повернутый блок
CSS3 тень для повернутого блока. Смотреть пример.
.block {
position:relative;
width:40%;
padding:1em;
margin:2em 10px 4em;
background:#fff;
border-radius:4px;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
box-shadow:none;
transform:rotate(-3deg);
}
.block > :first-child:before {
content:"";
position:absolute;
z-index:-1;
top:0px;
bottom:0;
left:0;
right:0px;
background:#fff;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3),
0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.block:before,
.block:after {
content:"";
position:absolute;
z-index:-2;
bottom:15px;
left:10px;
width:50%;
height:20%;
max-width:300px;
box-shadow:0 15px 10px rgba(0, 0, 0, 0.7);
transform:rotate(-3deg);
}
.block:after {
right:10px;
left:auto;
transform:rotate(3deg);
}