CSS遮罩层(有趣的小动画)

前言

​ 今天在编写页面是,发现一个很有意思的遮罩层的动画效果,也是分享给大家

效果图

在这里插入图片描述

当鼠标悬浮在照片上时,出现白色透明遮罩层,照片两边想中间消失,

小编在这里介绍两种方法

方法一

实现思路

  • 创建一个整体大盒子,放置照片和遮罩层盒子
  • 设置照片宽高,与外层大盒子宽高一致
  • 创建两个div盒子,高度与照片高度相同,宽度为照片宽度的一半
  • 使用绝对定位,让两个盒子覆盖照片,
  • 设置动画规则,让宽度变为0
  • 给大盒子添加鼠标悬浮属性,滑入后让盒子执行动画0

实现步骤

 .box {
      width: 300px;
      height: 180px;
      margin:100px auto;
      position: relative;
     
    }
    .box>img {
      width: 300px;
      height: 180px;
    }
    .mask1 {
      width: 150px;
      height: 180px;
      background-color:rgba(255, 255, 255, .4);
      position: absolute;
      top: 0;
      left: 0;
      opacity: 0;
    }
    .mask2 {
      width: 150px;
      height: 180px;
      background-color:rgba(255, 255, 255, .4);
      position: absolute;
      top: 0;
      right: 0;
      opacity: 0;
    }
 
 <div class="box">
    <img src="./differ_pic_2.jpg" alt="">
    <div class="mask1"></div>
    <div class="mask2"></div>
  </div>

按照实现思路,我们已经将设置好照片宽高,并创建遮罩层盒子通过绝对定位覆盖在照片上,设置 opacity: 0;
让遮罩层盒子隐藏

 @keyframes mask1 {
      from {}
      to {
        width: 0;
         opacity: 1;
      }
    }
设置动画规则,让遮罩层盒子的宽度为0,并且设置 opacity: 1;动画执行,遮罩层盒子显示
  .box:hover .mask1 {
    animation: mask1 .5s linear forwards;
  }
  .box:hover .mask2 {
    animation: mask1 .5s linear forwards;
  }
添加鼠标悬浮属性,执行动画,设置动画播放时间0.5秒,匀速执行,停留在最后一帧

在这里插入图片描述
查看效果发现,效果图中的动画与我们想要的动画效果不同,效果图中的动画是从中间向两边逐渐消失,而我们想要的效果是让遮罩层从两边向中间逐渐消失,那么我们要如何改进代码实现我们想要的效果呢?
其实想要实现我们想要的效果也是简单的,我么只需要改一下绝对定位就可以了

 .mask1 {
     width: 150px;
     height: 180px;
     background-color:rgba(255, 255, 255, .4);
     position: absolute;
     top: 0;
     left: 150px;
     opacity: 0;
   }
   .mask2 {
     width: 150px;
     height: 180px;
     background-color:rgba(255, 255, 255, .4);
     position: absolute;
     top: 0;
     right: 150px;
     opacity: 0;
   }

查看上面的代码,可以看到,我给mask1盒子的绝对定位left属性添加了150px的位移距离,
mask2盒子的绝对定位right属性添加了150px的位移距离,
其实就是让两个遮罩层盒子交换一下位置就可以实现了
在这里插入图片描述

方法二

实现思路

  • 创建一个整体大盒子,放置照片和遮罩层盒子
  • 设置照片宽高,与外层大盒子宽高一致
  • 创建遮罩层盒子,设置白色透明背景,使用绝对定位覆盖在照片上
  • 设置动画规则,使用transform属性,scaleX属性值,放大倍数为0
  • 添加鼠标滑入属性hover,当鼠标滑入时,执行动画

实现步骤

.box {
      width: 300px;
      height: 180px;
      margin: 100px auto;
      position: relative;
    }
    .box>img {
      width: 300px;
      height: 180px;
     
    }
    .mask {
      width: 300px;
      height: 180px;
      background-color: rgba(255, 255,255, .4);
      position: absolute;
      top: 0;
      left: 0;
       opacity: 0;
    }
 <div class="box">
    <img src="./differ_pic_2.jpg" alt="">
    <div class="mask"></div>
  </div>

查看代码,可以看到已经完了实现思路的前三个步骤,
注意:我们要的效果是鼠标悬浮后,显示遮罩层并执行动画,所以我们需要将遮罩层隐藏,是指opacity:0;

  @keyframes mask  {
      from {}
      to {
        opacity: 1;
        transform: scalex(0);
      }
    } 

设置动画规则,让遮罩层显示,通过scaleX属性值调整遮罩层大小,宽度变为0

 .box:hover .mask{
     animation: mask .5s linear forwards;
     cursor: pointer;
   }

添加鼠标悬浮,执行动画,动画事件为0.5秒,匀速播放,停留在最后一帧
关于遮罩层动画就已经完成了

总结

相比于方法二而言,方法一过于繁琐复杂,代码体积较大,不适合在实际项目中使用,也不便于后期维护,所以不建议使用,
关于本篇文章,为什么用动画属性来执行而不是用过度属性执行呢?
鼠标悬浮时,动画开始执行
当鼠标光标离开照片时
使用多度属性 后又一个遮罩层从中间向两边遮罩的过程,这不是我们想要的效果,我们希望鼠标光标离开照片后,不会再有其他的效果,而是用动画属性则可以实现,放鼠标光标离开照片时动画结束,再次悬浮,动画开始重新执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值