HTML&CSS:打造全自动洗衣机惊艳 Loading 效果

701 阅读4分钟

效果演示

这段代码创建了一个带有复杂纹理和动画效果的全自动洗衣机loading效果。

HTML

 <div class="washingloader"></div>
  • 一个div元素的class为washingloader,这个元素将作为一个加载指示器。

CSS

.washingloader {
    width120px;
    height150px;
    background-color#fff;
    background-repeat: no-repeat;
    background-imagelinear-gradient(#ddd 50%#bbb 51%),
        linear-gradient(#ddd#ddd), linear-gradient(#ddd#ddd),
        radial-gradient(ellipse at center, #aaa 25%#eee 26%#eee 50%#0000 55%),
        radial-gradient(ellipse at center, #aaa 25%#eee 26%#eee 50%#0000 55%),
        radial-gradient(ellipse at center, #aaa 25%#eee 26%#eee 50%#0000 55%);
    background-position0 20px45px 08px 6px55px 3px75px 3px95px 3px;
    background-size100% 4px1px 23px30px 8px15px 15px15px 15px15px 15px;
    position: relative;
    border-radius6%;
    animation: shake 3s ease-in-out infinite;
    transform-origin60px 180px;
}
.washingloader:before {
    content"";
    position: absolute;
    left5px;
    top100%;
    width7px;
    height5px;
    background#aaa;
    border-radius0 0 4px 4px;
    box-shadow102px 0 #aaa;
}
.washingloader:after {
    content"";
    position: absolute;
    width95px;
    height95px;
    left0;
    right0;
    margin: auto;
    bottom20px;
    background-color#bbdefb;
    background-imagelinear-gradient(to right, #0004 0%#0004 49%#0000 50%#0000 100%),
        linear-gradient(135deg#64b5f6 50%#607d8b 51%);
    background-size30px 100%90px 80px;
    border-radius50%;
    background-repeat: repeat, no-repeat;
    background-position0 0;
    box-sizing: border-box;
    border10px solid #DDD;
    box-shadow0 0 0 4px #999 inset, 0 0 6px 6px #0004 inset;
    animation: spin 3s ease-in-out infinite;
}
@keyframes spin {
    0% {
        transformrotate(0deg)
    }
    50% {
        transformrotate(360deg)
    }
    75% {
        transformrotate(750deg)
    }
    100% {
        transformrotate(1800deg)
    }
}
@keyframes shake {
    65%,
    80%,
    88%,
    96% {
        transformrotate(0.5deg)
    }
    50%,
    75%,
    84%,
    92% {
        transformrotate(-0.5deg)
    }
    0%,
    50%,
    100% {
        transformrotate(0)
    }
}

.washingloader类:

  • 设置了宽度为120px,高度为150px,背景颜色为白色。
  • 通过多个linear-gradient和radial-gradient组合创建了复杂的背景图案,包括线条、椭圆等形状,用于模拟某种机械结构或纹理。
  • background-position和background-size属性用于调整这些背景图案的位置和大小。
  • position: relative使该元素成为相对定位的容器,以便内部的伪元素可以相对于它进行定位。
  • border-radius: 6%为元素添加了一定程度的圆角。
  • animation: shake 3s ease-in-out infinite应用了一个名为shake的动画,以实现元素的晃动效果,动画持续时间为 3 秒,具有缓入缓出效果且无限循环。
  • transform-origin: 60px 180px设置了变换的原点,用于控制动画的中心点。

.washingloader:before伪元素:

  • 使用绝对定位,在.washingloader元素的底部左侧创建一个小三角形,颜色为#aaa(浅灰色),并通过box-shadow在右侧创建一个相同的三角形以模拟某种连接或延伸效果。

.washingloader:after伪元素:

  • 同样使用绝对定位,在.washingloader元素内部居中创建一个较大的圆形元素。
  • 通过复杂的背景图案设置,包括线性渐变和径向渐变,创建了一种带有纹理和阴影效果的圆形外观。
  • border-radius: 50%使其成为一个完美的圆形。
  • box-sizing: border-box确保边框和内边距包含在元素的宽度和高度内。
  • border: 10px solid #DDD添加了一个灰色的边框。
  • box-shadow: 0 0 0 4px #999 inset, 0 0 6px 6px #0004 inset添加了两个内阴影效果,用于增强立体感。

animation动画

  • animation: spin 3s ease-in-out infinite应用了一个名为spin的动画,使圆形伪元素进行旋转,动画持续时间为 3 秒,具有缓入缓出效果且无限循环。
  • @keyframes spin:定义了旋转动画的关键帧,从初始状态的不旋转,到中间状态的旋转 360 度,再到不同角度的旋转,最后回到初始状态,实现了循环旋转的效果。
  • @keyframes shake:定义了晃动动画的关键帧,通过在不同的百分比阶段设置不同的旋转角度,实现了元素的轻微晃动效果。