最近在学习html与css3基础,看到有一节课用css3实现曲线阴影与翘边阴影,便将这个做了出来。基本代码实现如下:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus®">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>css3实现曲线与翘边阴影</title>
<style>
ul,li{
list-style:none;
margin:0;
padding:0;
}
.wrap{
width:700px;
height:200px;
margin:50px auto;
background:#fff;
}
.wrap h1{
font-size:24px;
text-align:center;
line-height:200px;
}
.effect{
box-shadow:0px 1px 4px rgba(0,0,0,0.8),0px 0px 40px rgba(0,0,0,0.1) inset;/*外、内阴影*/
position:relative;/*给其定位,让阴影重叠*/
}
.effect:before,.effect:after{/*背面设置两个盒子,使阴影更为深*/
content:"";
position:absolute;/*给其定位,让阴影重叠*/
z-index:-1;/*在盒子的后面*/
background:#fff;
top:50%;/*设置其距离父盒子位置所在*/
bottom:0;/*四个方向的值必须全部设置*/
left:10px;
right:10px;
border-radius:100px/10px;/*水平/垂直方向的半径*/
box-shadow:0 0px 20px rgba(0,0,0,0.8);
/*下面的盒子的外阴影*/
}
.box{width:980px;
height:auto;
overflow:hidden;
clear:both;
margin:0 auto;
}
.box li{width:300px;
height:220px;
margin:20px 10px;
float:left;
border:2px solid #efefef;/*显示边框,相框*/
background:#fff;
position:relative;
text-align:center;
line-height:220px;
font-size:30px;
box-shadow:0 1px 4px rgba(0,0,0,0.3),0 0 60px rgba(0,0,0,0.1) inset;
/*给照片的框添加阴影,为直角阴影*/
}
.box li:before{
content:'';
position:absolute;
z-index:-1;
background:transparent;/*透明*/
width:90%;
height:80%;
left:20px;
bottom:8px;
transform:skew(-12deg) rotate(-4deg);/*旋转倾斜*/
box-shadow:0 8px 20px rgba(0,0,0,0.6)/*设置阴影效果*/
}
.box li:after{
content:'';
position:absolute;
z-index:-1;
background:transparent;
width:90%;
height:80%;
right:20px;
bottom:8px;
transform:skew(12deg) rotate(4deg); /*向右斜切*/
box-shadow:0 8px 20px rgba(0,0,0,0.6)
}
.box li img{display:block;
width:290px;
height:210px;
margin:5px;
}
</style>
</head>
<body>
<div class="wrap effect">
<h1>Shadow Effect</h1>
</div>
<ul class="box">
<li><img src="images/photo1.jpg"/></li>
<li><img src="images/photo2.jpg"/></li>
<li><img src="images/photo3.jpg"/></li>
</ul>
</body>
</html>
学完这个知识点后,总结了一下用到的知识点,实质上做出来的阴影效果是让阴影重叠。
1、阴影设置颜色和透明度时,用rgba,直接设置。
box-shadow:10px 10px 10px 10px;分别为水平,垂直距离,模糊程度,模糊距离,阴影值可为负值,代表着方向
box-shadow可设置一个或多个阴影,多阴影设置时逗号隔开。
Inset:内阴影
2、
曲线阴影实现原理:在盒子本身后面再添加,用到:after与:before
:after 选择器:在被选元素的后面插入内容 :before 选择器:在被选元素的前面插入内容 说明:需使用content属性来指定要插入的内容
设置下面的阴影(红色),为确定它的曲线阴影,需要设置其四个方向的值,让自动计算它的位置。或者设置盒子的宽高。
3、border-radius:100px/10px;/*水平/垂直方向的半径*/,不能用空格,border-radius:100px10px;,这样设置显示的是对角的半径
4、曲线阴影效果=1个直角阴影+2个重叠的曲线阴影(2个重叠的曲线阴影要放在直角阴影的下面)
5、翘边阴影,添加两个盒子重叠,翘边阴影是需要给盒子做变换的,翘边阴影盒子变换成平行四边形的宽度比直角阴影盒子的大,所以需要设置width;90%;因为阴影距顶部还有点距离所以设置height;80%;
翘边,两个盒子叠加,底部为平行四边形
倾斜旋转之后
6、overflow的作用是:如果在这个.BOX盒子中的内容或者图片width和height超出了.BOX设置的width和height,那么超出的部分会隐藏并且不占位置。 clear的作用是:清除.BOX左右两边的浮动,这样无论屏幕尺寸多大,这个.BOX始终占满屏幕中的这一行位置。