CSS3實現「圖片陰影」效果

  • 2019 年 12 月 13 日
  • 筆記

利用多投影重疊的原理,實現曲線陰影與翹邊陰影的效果,花一個小時看完的課程,理解的似懂非懂。直接發一下老師寫的成品吧。用到來取。css都補上了注釋。

  • 第1章曲線陰影的實現 1-1效果演示 1-2結構編寫 1-3原理分析 1-4 box-shadow講解 1-5 主陰影(內陰影外陰影 ) 1-6 after與before講解 1-7曲線陰影
  • 第2章翹邊陰影的實現 2-1翹邊陰影

效果

HTML

<!DOCTYPE html>  <html>  <head>  <meta charset=utf-8 />  <title>box-shadow</title>  <link rel="stylesheet" href="css/style.css">  </head>  <body>    <div class="wrap effect">       <h3>Shadow Effect</h3>    </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>

CSS

body{font-family:Arial;/* 字體 */       font-size:23px;}/* 字號 */  .wrap h3{    text-align:center;/* 位置居中 */    position:relative;/* 定位對象不可層疊 */    top:80px;/* 距離頂部距離 */  }  .wrap {    width:70%;/* 寬 */    height:200px;/* 高 */    background:#FFF;/* 背景顏色 */    margin:40px auto;/* 外邊距 */  }    .effect{    position:relative;  /* 定位類型 */       -webkit-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3) , 0 0 40px rgba(0, 0, 0, 0.1) inset;/* 外投影和內投影 */     	   -moz-box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0 0 40px rgba(0, 0, 0, 0.1) inset;      			box-shadow:0 1px 4px rgba(0, 0, 0, 0.3), 0px 0px 40px rgba(0, 0, 0, 0.1) inset;  }   .effect:before, .effect:after{      content:"";/* 盒子內容 */  	position:absolute; /* 定位類型 */  	z-index:-1;/* 盒子層 */  	-webkit-box-shadow:0 0 20px rgba(0,0,0,0.8);/* 外投影和內投影 */  	-moz-box-shadow:0 0 20px rgba(0,0,0,0.8);  	box-shadow:0 0 20px rgba(0,0,0,0.8);  	top:50%;	/* 盒子距離頂部距離 */  	bottom:0;	/* 盒子距離底部距離 */  	left:10px;	/* 盒子距離左側距離 */  	right:10px;	/* 盒子距離右側距離 */  	/* 這裡也可以直接寫和盒子的大小width和height */  	border-radius:100px / 10px;/* 圓角半徑  /  斜切圓角 */  	-moz-border-radius:100px / 10px; /* 效果同上,為了兼容部分瀏覽器 */    }    ul.box {  	width:980px;/* 寬 */  	height:auto;/* 高 */  	margin: 20px auto;/* 定位 邊距 */  	padding: 0;/* 定義內邊距為0 */  	clear: both;/* 在左右兩側均不允許浮動元素。 */  /* 	left	在左側不允許浮動元素。  	right	在右側不允許浮動元素。  	both	在左右兩側均不允許浮動元素。  	none	默認值。允許浮動元素出現在兩側。  	inherit	規定應該從父元素繼承 clear 屬性的值。 */  	overflow: hidden; /* 溢出的值會被修剪 */  }    ul.box li {  	list-style-type: none;/* 在一個聲明中設置所有的列表屬性 無標記。 */  	margin:20px 10px;/* 定位 邊距  上下右左*/  	padding: 0;/* 內邊距 */  	width: 300px;/* 寬 */  	height: 220px;/* 高 */  	border: 2px solid #efefef;/* 邊框 寬度 顏色 */  	position: relative;/* 定位類型 */  	float: left;/* 元素向左浮動。 */  	background: #ffffff; /* old browsers *//* 背景顏色 */  	line-height:220px;/* 設置行高: */  	font-size:32px;/* 字號 */  	text-align:center;/* 文字對齊方式 */      	-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.1) inset;/* 外投影和內投影 */  	-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.1) inset;  	-o-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.1) inset;  	box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 60px rgba(0, 0, 0, 0.1) inset;    }    ul.box li:before {  	 z-index: -2;  /* 層數 */  	position: absolute;  /* 定位屬性,絕對定位 */  	background: transparent; /* 背景顏色,transparent為透明色 */  	width: 90%; /* 寬90% */  	height: 80%; /* 高80% */  	content: ''; /* 盒子內容 */  	left: 20px; /* 盒子距離左側距離 */  	bottom:8px; /* 盒子距離底部距離 */    	 -webkit-transform: skew(-12deg) rotate(-4deg); /* 盒子變形 */  	 	-moz-transform:skew(-12deg) rotate(-4deg);  	 	-o-transform: skew(-12deg) rotate(-4deg);  	 	-ms-transform: skew(-12deg) rotate(-4deg);    	-webkit-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6); /* 外投影和內投影 */  	-moz-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);  	-o-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);  	box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);    }     ul.box li:after {  /* 底層陰影第二個 */  	z-index: -1; /* 層數 */  	position: absolute; /* 定位屬性,絕對定位 */  	background: transparent; /* 背景顏色,transparent為透明色 */  	width: 90%; /* 寬90% */  	height: 80%; /* 高 */  	content: ''; /* 盒子內容 */  	right:20px;   /* 盒子距離左側距離 */  	bottom:8px; /* 盒子距離底部的距離 */    	-webkit-transform: skew(12deg) rotate(4deg);  /* 盒子變形 */  	-moz-transform:skew(12deg) rotate(4deg);  	-o-transform: skew(12deg) rotate(4deg);  	-ms-transform: skew(12deg) rotate(4deg);    	-webkit-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6); /* 外投影和內投影 */  	-moz-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);  	-o-box-shadow: 0 8px 20px rgba(0, 0, 0, 0.6);  	box-shadow: 0 8px 16px rgba(0, 0, 0, 0.6);    }    .box li img{		/* 定義圖片大小:統一圖片大小格式 */  	width:290px;	/* 圖片寬 */  	height:210px;	/* 圖片高 */  	padding:5px;	/* 距離盒子內邊距 */  }