CSS |图片淡入淡出特效

2,828 阅读2分钟

每天一个css小技巧,巩固自己的css基础知识,例子都是网上找的,尽可能的会把出处标记出来,没有标记的作者看到请联系我。。。目的只是为了借助这些例子学习巩固基础。谢谢,尊重原创,一起学习! 原文 -〉
效果展示:

2021-08-19 20_13_49.gif
ppt中很常见的过渡效果,没想到用css也可以实现(只是单纯的因为我很菜,不知道的很多)
html:

<img src="https://z3.ax1x.com/2021/08/18/f7Uya4.png" width="500" height="400">

很简单一看就懂,就是放张图片---拓展的话就是可以是页面显示的任何图片


scss:

分为css版本和scss版本(复杂效果的话我们还是尽可能的进行预处理,可以少写亿点代码):
scss:
$x:20;  /*  行数 */
$y:20;  /*  列数 */
$s:0.8; /*  速度 */

/* 使用@property 定义了N(行*列)个属性,并设置初始值为1,代表显示 */
@for $i from 0 through ($x - 1) {
  @for $j from 0 through ($y - 1) {
    @property --c-#{$i}-#{$j} {
      syntax: "<number>";
      initial-value: 1;
      inherits: false;
    }
  }
}
/* 添加动画:对自定义的N个属性由1到0这个过程,持续时间随机,延迟时间随机,这样就会出现不规则的消失,当然也可以有规则的消息,比如从左往右... */
@function transition($i,$j) {
  @return ($s*random())+s ($s*random())+s;
}
/* 
使用scss中的@mixin生成mask遮罩代码
*/
@mixin image() {
    $all_t: ();
    $all_m: ();
    @for $i from 0 through ($x - 1) {
      @for $j from 0 through ($y - 1) {
         $all_t: append($all_t, --c-#{$i}-#{$j} transition($i,$j), comma);
         $all_m: append($all_m, linear-gradient(rgba(0,0,0,var(--c-#{$i}-#{$j})) 0 0) calc(#{$i}*100%/(#{$x} - 1)) calc(#{$j}*100%/(#{$y} - 1)), comma);
      }
    }
    transition: $all_t;
     -webkit-mask: $all_m;
     mask: $all_m;
}

img {
  @include image();
  /* 设置遮罩大小 */
  -webkit-mask-size:calc(100%/#{$x}) calc(100%/#{$y});
  -webkit-mask-repeat:no-repeat;
  mask-size:calc(100%/#{$x}) calc(100%/#{$y});
  mask-repeat:no-repeat;
}
/* 鼠标悬停触发:将上面自定义的N个属性值由1改为0 */
img:hover {
  @for $i from 0 through ($x - 1) {
      @for $j from 0 through ($y - 1) {
         --c-#{$i}-#{$j}: 0;
      }
    }
}

body {
  background:pink;
}

`css:

https://www.sassmeister.com/ 请大家自行转换,太长了...
整个动画实现的思路就是,将图片分割为x * y块,然后添加maskN个遮罩,mask遮罩我们使用黑色和白色,黑色就是不遮罩,白色就是全遮罩,所以我们根据透明度从1-0,就是一个慢慢消失的过程,然后设置一下动画消失的先后顺序和持续时间,就成了最后的效果

整个下来之前没注意的属性有很多,也有一些新的属性没用过: 比如 mask遮罩,transform业务写多了也用的变少了,还有linear-gradient(),加油加油,不断学习,不断复习~~~