通常而言,我们生成阴影的方式大多是 box-shadow 、filter: drop-shadow() 、text-shadow 。
box-shadow
CSS3 box-shadow 属性用来描述一个元素的一个或多个阴影效果,该属性几乎可以让你完成你想要的任何阴影效果。 box-shadow 属性语法和取值非常灵活,对于新手有点不容易理解。总结一下语法和 box-shadow 属性各种阴影效果。
语法
box-shadow 可以设置 5 个值:x偏移量 y偏移量 阴影模糊半径 阴影扩散半径 阴影颜色
/* offset-x | offset-y | color */box-shadow: 60px -16px teal;阴影的水平位置 垂直位置 颜色上面表示为 阴影位置相对元素位置水平(向右)偏移60px,垂直(向上)偏移-16px/* offset-x | offset-y | blur-radius 模糊| color */box-shadow: 10px 5px 5px black;模糊值越大,阴影就越大越淡/* offset-x | offset-y | blur-radius | spread-radius 扩大 | color */box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);扩大的默认值为0,不扩大,与元素大小相同,取正值时,阴影扩大;取负值时,阴影收缩。/* inset | offset-x | offset-y | color */box-shadow: inset 5em 1em gold;inset设置内阴影,原本默认为外阴影/* Any number of shadows, separated by commas */box-shadow: 3px 3px red, -1em 0 0.4em olive;/* Global keywords */box-shadow: inherit;box-shadow: initial;box-shadow: unset;

阴影中心点 x 轴偏移了 300px,y 轴偏移了 300px:

那阴影扩散半径是啥意思?
看这张图就明白了:
还有阴影模糊半径:
再来看下这几个值:
box-shadow: 300px 300px 30px 100px blue;
x 轴位移、y 轴位移都是指中心点的位移。阴影的半径就是 width/2 + 扩散半径 + 模糊半径。
而且 box-shadow 可以设置多个,通过逗号分隔,也就是多重阴影。
示例
shadow-blur 动态阴影
利用 filter: blur 模糊滤镜,我们可以生成与背景图片颜色相仿的阴影效果;
其简单的原理就是,利用伪元素,生成一个与原图一样大小的新图叠加在原图之下,然后利用滤镜模糊 filter: blur() 配合其他的亮度/对比度,透明度等滤镜,制作出一个虚幻的影子,伪装成原图的阴影效果。重要的就是filter: blur(10px) brightness(80%) opacity(.8); 。
.shadow-blur {position: relative;background: url($img) no-repeat center center;}.shadow-blur::before {content: "";display: block;background: inherit;filter: blur(10rpx);opacity: 0.4;position: absolute;width: 100%;height: 100%;top: 10rpx;left: 10rpx;z-index: -1;transform-origin: 0 0;border-radius: inherit;transform: scale(1, 1);}/* 或者 */.shadow-blur::after {content: "";position: absolute;top: 10%;width: 100%;height: 100%;background: inherit;background-size: 100% 100%;filter: blur(10px) brightness(80%) opacity(.8);z-index: -1;}

<div class="dynamic-shadow-parent"><div class="dynamic-shadow"></div></div>.dynamic-shadow-parent {position: relative;z-index: 1;}.dynamic-shadow {position: relative;width: 10rem;height: 10rem;background: linear-gradient(75deg, #6d78ff, #00ffb8);}.dynamic-shadow::after {content: '';width: 100%;height: 100%;position: absolute;background: inherit;top: 0.5rem;filter: blur(0.4rem);opacity: 0.7;z-index: -1;}
