1.单侧投影
思路是box-shadow 的第四个长度参数。它排在模糊半径参数以后,称做扩张半径。这个参数会根据你指定的值去扩大或当指定负值时,缩小投影的尺寸。例如,一个-5px 的扩张半径会把投影的宽度和高度各减小10px(即每边各5px)。url
box-shadow: 0 5px 4px -4px black;
2.邻边投影spa
box-shadow: 3px 3px 6px -3px black;
3.双侧投影3d
用两块投影(每边各一块)来实现code
box-shadow: 5px 0 5px -5px black, -5px 0 5px -5px black;
解决办法是使用滤镜效果,filter。值有不少,好比blur()、grayscale() 以及drop-shadow()等。blog
实现不规则投影使用的是drop-shadow图片
filter: drop-shadow(2px 2px 10px rgba(0,0,0,.5));
注:drop-shadow会给任何非透明的部分打上投影,包括文本。若是文本设置了text-shadow,就是投影的投影。ip
方案一:
为了解决给图片加一层统一的渲染风格,使用filter滤镜,而且须要将一些滤镜的值叠加使用。get
sepia滤镜,它会给图片增长一种降饱和度的橙黄色染色效果。
saturate滤镜,给每一个像素提高饱和度
hue-rotate滤镜,把每一个像素的色相以指定的度数进行偏移it
filter: sepia(1) saturate(4) hue-rotate(295deg);
原图:io
方案二:
基于混合模式的方案。mix-blendmode能够为整个元素设置混合模式。background-blend-mode 能够为每层背景单独指定混合模式。
实现方式:
<a> <img src="tiger.jpg" alt="Rawrrr!" /> </a>
a { background: hsl(335, 100%, 50%); } img { mix-blend-mode: luminosity; }
<div class="bg"> <main> <blockquote> "The only way to get rid of a temptation[...]" </blockquote> </main> </div>
.bg { width: 500px; height: 300px; background: url("dog.jpg"); background-size: cover; } main { position: relative; background: hsla(0, 0%, 100%, .3); overflow: hidden; } main::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; filter: blur(20px); margin: -30px; }
45°折角的解决方案
增长一个暗色的三角形来实现翻折效果。实现方法是增长另外一层渐变来生成这个三角形并将其定位在右上角,这样就能够经过background-size 来控制折角的大小。
div { background: #58a; /* 回退样式 */ background: linear-gradient(to left bottom, transparent 50%, rgba(0,0,0,.4) 0) no-repeat 100% 0 / 2em 2em, linear-gradient(-135deg, transparent 1.5em, #58a 0); }