美文网首页
CSS阴影你只会box-shadow?试试drop-shadow

CSS阴影你只会box-shadow?试试drop-shadow

作者: microkof | 来源:发表于2021-01-21 22:11 被阅读0次

    box-shadow基础

    各项值的解释

    offset-x:必需,取值正负都可。offset-x水平阴影的位置。
    offset-y:必需,取值正负都可。offset-y垂直阴影的位置。
    blur:可选,只能取正值。blur-radius阴影模糊半径,0即无模糊效果,值越大阴影边缘越模糊。
    spread:可选,取值正负都可。spread代表阴影的周长向四周扩展的尺寸,正值,阴影扩大,负值阴影缩小。
    color:可选。阴影的颜色。如果不设置,浏览器会取默认颜色,通常是黑色,但各浏览器默认颜色有差异,建议不要省略。可以是rgb(250,0,0),也可以是有透明值的rgba(250,0,0,0.5)。
    inset:可选。关键字,将外部投影(默认outset)改为内部投影。inset 阴影在背景之上,内容之下。

    image.png image.png

    效果解释

    假如我写一个声明:box-shadow: 120px 80px 40px 20px #00fcfc,得到这样的效果:

    image.png

    box-shadow的不足之处

    box-shadow是IE9出现的属性,作为老前辈,虽然很多场合挺好用的,但是它也有不足:

    1. 模糊比较生硬
    2. 无法智能阴影

    所以今天引出另一个好用的CSS滤镜:drop-shadow。

    drop-shadow滤镜是什么

    MDN:https://developer.mozilla.org/zh-CN/docs/Web/CSS/filter-function/drop-shadow()

    支持度:Edge 13以上

    这个滤镜也是一种阴影效果,但是非常新。

    与box-shadow的区别

    1. drop-shadow相对比较柔和。相同属性前提下,效果见下:

    box-shadow效果:

    image.png

    drop-shadow效果:

    image.png
    1. drop-shadow能智能识别容器内容

    比如我从前写的一个气泡效果(https://www.jianshu.com/p/c17b1f4989a0),现在,前两种方式都是box-shadow,只不过箭头实现方式有所区别,第三种是drop-shadow。

    第一种箭头几乎看不清,第二种又很生硬,第三种就很自然,而且drop-shadow强大之处就是智能识别元素边缘,所以drop-shadow无需在伪元素上声明,而box-shadow必须在伪元素上声明。

    image.png
    <!DOCTYPE html>
    <html>
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <style>
        .bm-overlay1 {
          width: 250px;
          height: 80px;
          line-height: 1.6;
          background-color: #fff;
          box-shadow: 0 0 5px #ccc;
          border-radius: 8px;
          padding: 10px;
          position: relative;
          font-size: 0;
        }
    
        .bm-overlay1::after {
          position: absolute;
          content: "";
          transform: rotate(45deg);
          width: 16px;
          height: 16px;
          font-size: 0;
          position: absolute;
          background-color: #fff;
          box-shadow: 5px 5px 5px -5px #ccc;
          bottom: -8px;
          left: 113.7px;
        }
    
        .bm-overlay2 {
          width: 250px;
          height: 80px;
          line-height: 1.6;
          background-color: #fff;
          box-shadow: 0 0 5px #ccc;
          border-radius: 8px;
          padding: 10px;
          position: relative;
          font-size: 0;
        }
    
        .bm-overlay2::before {
          position: absolute;
          content: "";
          width: 0;
          height: 0;
          font-size: 0;
          position: absolute;
          transform: rotate(45deg);
          border-width: 8px;
          border-style: solid dashed dashed;
          border-color: transparent #fff #fff transparent;
          box-shadow: 1px 1px 1px #ccc;
          bottom: -8px;
          left: 113.7px;
        }
    
        .bm-overlay3 {
          width: 250px;
          height: 80px;
          line-height: 1.6;
          background-color: #fff;
          filter: drop-shadow(0 1px 2px #ccc);
          border-radius: 8px;
          padding: 10px;
          position: relative;
          font-size: 0;
        }
    
        .bm-overlay3::before {
          position: absolute;
          content: "";
          width: 0;
          height: 0;
          font-size: 0;
          position: absolute;
          transform: rotate(45deg);
          border-width: 8px;
          border-style: solid dashed dashed;
          border-color: transparent #fff #fff transparent;
          bottom: -8px;
          left: 113.7px;
        }
      </style>
    </head>
    
    <body>
      <div class="bm-overlay1" style="margin-bottom: 50px;"></div>
      <div class="bm-overlay2" style="margin-bottom: 50px;"></div>
      <div class="bm-overlay3" style="margin-bottom: 50px;"></div>
    </body>
    
    </html>
    
    1. box-shadow有内阴影,也可以叠加阴影

    drop-shadow都做不到。

    结论

    在支持drop-shadow的浏览器上,可以视情况优先选择drop-shadow,效果通常好于box-shadow。当然,如果你是box-shadow高手,另当别论。

    相关文章

      网友评论

          本文标题:CSS阴影你只会box-shadow?试试drop-shadow

          本文链接:https://www.haomeiwen.com/subject/pxchzktx.html