# Landscape animation

https://zhang.beer/animation (opens new window)

animation

  • 太阳:sun 控制旋转, .sun span 控制光线的伸长与缩短,值得一提的是在这里 box-shadow 比伪元素更好用, 渲染了橙色的阴影,下面给出了代码。
  • 山:本体是一个正方形盒子,先旋转 45° ,通过 ::before 和 ::after 延长两边,辅以阴影。
  • 云:是通过 5 个大大小小的半圆拼接而成的,设置了快慢两种动画速度。
  • 风:使用 span 及其两种伪元素,span 为中间主要部分,::before 为左端弯曲小半圆,::after 为右端小横线。
  • 树:也是使用了 span 及其两种伪元素,span 为树根部分,::before 成为了椭圆,::after 成为了阴影线条。
  • 风车:两个盒子,一个作为风车的柱子,一个用来固定三片 span 抽象出来的风叶。 最后通过 js 加减类,实现总体的快慢两种状态。
.sun {
  position: absolute;
  width: 20px;
  height: 20px;
  border: 2px solid #333;
  border-radius: 50%;
  left: 270px;
  top: 50px;
  display: flex;
  justify-content: center;
  align-items: center;
  animation: sun_rotate 10s linear infinite;
}
@keyframes sun_rotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-360deg);
  }
}
.sun span {
  position: absolute;
  display: block;
  height: 2px;
  width: 16px;
  background: #333;
  transform: rotate(calc(var(--i) * 45deg)) translateX(-20px);
  box-shadow: 3px 4px 0 0 var(--color5);
  animation: sun_ray 1s linear infinite;
  animation-delay: calc(var--i) * -0.5s;
}
@keyframes sun_ray {
  0% {
    transform: rotate(calc(var(--i) * 45deg)) translateX(-20px) scaleX(1);
  }
  50% {
    transform: rotate(calc(var(--i) * 45deg)) translateX(-20px) scaleX(0.6);
  }
  100% {
    transform: rotate(calc(var(--i) * 45deg)) translateX(-20px) scaleX(1);
  }
}
上次更新: 10 months ago