In this tutorial we are going to learn how to use the CSS box shadow property to create different effects with just CSS. Below is an image created in photoshop of different box shadows effects. These used to be the only way of creating this effect but thanks to CSS3 we can now do all this with just CSS.
CSS Box Shadow
We are going to be using the CSS box shadow property which is one my favourite CSS properties which you will see in this tutorial how easy you can use it. The box-shadow property allows you to easily create multiple drop shadows on box elements by specifying values for colour, size, blur and offset. The box-shadow property accepts 2-6 options, the required options are horizontal offset and vertical offset, the two optional options are spread distance and colour.
box-shadow: inset horizontal vertical blur spread colour;
Examples
box-shadow: 10px 10px;
box-shadow: 10px 10px 5px #888;
box-shadow: inset 2px 2px 2px 2px black;
box-shadow: 10px 10px #888, -10px -10px #f4f4f4, 0px 0px 5px 5px #cc6600;
Browser Support
All of the major newest browsers support box-shadow property.
- Internet Explorer 9.0 and higher
- Firefox 3.5 and higher
- Chrome 1 and higher
- Safari 3 and higher
- Opera 10.5 and higher
With many new CSS3 properties you need to prefix the property with browser specific tags. For firefox you need to use -moz-, for chrome/safari you need to use -webkit. The box-shadow property is no different. For Firefox 3.5 you need to prefix with -moz-boz-shadow, but for Firefox 4.0 and higher you don't need to use the prefix anymore. For Chrome/safari you still need to use the -webkit-box-shadow. For opera you don't need to prefix the property and can just use box-shadow.
CSS Box Shadow Effect 1
This will create a standard box shadow effect with the shadow moved into the element to create a raised box look.
The HTML
<div class="box effect1">
<h3>Effect 1</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 1
* ===============================================*/
.effect1{
box-shadow: 0 10px 6px -6px #777;
}
CSS Box Shadow Effect 2
This effect will add shadows to the bottom corners of the boxes to create a lifted corner look on the boxes. This effect uses both the :before and :after properties to create new elements used for the corners.
The HTML
<div class="box effect2">
<h3>Effect 2</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 2
* ===============================================*/
.effect2
{
position: relative;
}
.effect2:before, .effect2:after
{
z-index: -1;
position: absolute;
content: "";
bottom: 15px;
left: 10px;
width: 50%;
top: 80%;
max-width:300px;
background: #777;
box-shadow: 0 15px 10px #777;
transform: rotate(-3deg);
}
.effect2:after
{
transform: rotate(3deg);
right: 10px;
left: auto;
}
CSS Box Shadow Effect 3
This uses half of the effect approve and will add a lifted corner to the bottom left of the box.
The HTML
<div class="box effect3">
<h3>Effect 3</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 3
* ===============================================*/
.effect3
{
position: relative;
}
.effect3:before
{
z-index: -1;
position: absolute;
content: "";
bottom: 15px;
left: 10px;
width: 50%;
top: 80%;
max-width:300px;
background: #777;
box-shadow: 0 15px 10px #777;
transform: rotate(-3deg);
}
CSS Box Shadow Effect 4
Effect 4 will lift the corner on the bottom right of the box.
The HTML
<div class="box effect4">
<h3>Effect 4</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 4
* ===============================================*/
.effect4
{
position: relative;
}
.effect4:after
{
z-index: -1;
position: absolute;
content: "";
bottom: 15px;
right: 10px;
left: auto;
width: 50%;
top: 80%;
max-width:300px;
background: #777;
box-shadow: 0 15px 10px #777;
transform: rotate(3deg);
}
CSS Box Shadow Effect 5
This is expands on the effect 2 and will increase the angle of the shadows.
The HTML
<div class="box effect5">
<h3>Effect 5</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 5
* ===============================================*/
.effect5
{
position: relative;
}
.effect5:before, .effect5:after
{
z-index: -1;
position: absolute;
content: "";
bottom: 25px;
left: 10px;
width: 50%;
top: 80%;
max-width:300px;
background: #777;
box-shadow: 0 35px 20px #777;
transform: rotate(-8deg);
}
.effect5:after
{
transform: rotate(8deg);
right: 10px;
left: auto;
}
CSS Box Shadow Effect 6
This effect will create a curved shadow at the bottom of the box.
The HTML
<div class="box effect6">
<h3>Effect 6</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 6
* ===============================================*/
.effect6
{
position:relative;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.effect6:before, .effect6:after
{
content:"";
position:absolute;
z-index:-1;
box-shadow:0 0 20px rgba(0,0,0,0.8);
top:50%;
bottom:0;
left:10px;
right:10px;
border-radius:100px / 10px;
}
CSS Box Shadow Effect 7
This effect uses the previous effect and adds another shadow to the top of the box.
The HTML
<div class="box effect7">
<h3>Effect 7</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 7
* ===============================================*/
.effect7
{
position:relative;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.effect7:before, .effect7:after
{
content:"";
position:absolute;
z-index:-1;
box-shadow:0 0 20px rgba(0,0,0,0.8);
top:0;
bottom:0;
left:10px;
right:10px;
border-radius:100px / 10px;
}
.effect7:after
{
right:10px;
left:auto;
transform:skew(8deg) rotate(3deg);
}
CSS Box Shadow Effect 8
The final effect will add rounded shadows to either side of the box.
The HTML
<div class="box effect8">
<h3>Effect 8</h3>
</div>
The CSS
.box h3{
text-align:center;
position:relative;
top:80px;
}
.box {
width:70%;
height:200px;
background:#FFF;
margin:40px auto;
}
/*==================================================
* Effect 8
* ===============================================*/
.effect8
{
position:relative;
box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;
}
.effect8:before, .effect8:after
{
content:"";
position:absolute;
z-index:-1;
box-shadow:0 0 20px rgba(0,0,0,0.8);
top:10px;
bottom:10px;
left:0;
right:0;
border-radius:100px / 10px;
}
.effect8:after
{
right:10px;
left:auto;
transform:skew(8deg) rotate(3deg);
}