【Ten Mins Effect】 - 05 荧光方块攀爬效果

386 阅读4分钟

效果展示

大家好,这里是初心Yearth,欢迎来到 10 mins css,每天花 10 分钟,实现一个简单精美的 css 效果。

那么下面我们直接进入正题,先来看看今天的效果展示吧:

图一
图一

分析

相信经过之前几次的分析,大家已经轻车熟路了,那么就不废话,直接着手分析这个需要实现这个效果的关键点:

  • 需要给方块实现荧光效果,这点我们可以使用 box-shadow
  • 仔细观察的读者可以看到,方块翻转之后有一个“没站稳”的感觉,对于这点,我们可以利用 animation 和 rotate 进行调整来实现
  • 地面有着镜面的效果,这个可以借助于 -webkit-box-reflect 来实现

大致关键点就是上面这几点,而其他的细节我们可以在实现中讨论。

Coding

现在已经知道了思路,那么便开始愉快的 coding 吧,首先是实现一个荧光的方块。

荧光方块

其实原理很简单,我们知道,box-shadow 是可以无限叠加的,那么我们就在方块的周围重复叠加不断变淡的阴影即可:

:root {
 --bg-color#000000;
  --cube-color#03e9f4;
}

body {
  width100%;
  height100vh;
  backgroundvar(--bg-color);
  display: flex;
  justify-content: center;
  align-items: center;
}

.cube {
  height200px;
  width200px;
  backgroundvar(--cube-color);
  box-shadow0 0 5px rgba(32332441), 
       0 0 25px rgba(32332441),
         0 0 50px rgba(32332441), 
       0 0 100px rgba(32332441), 
       0 0 200px rgba(32332440.5),
         0 0 300px rgba(32332440.5);
}

效果如下:

图2
图2

翻滚方块

让方块翻滚起来有两个关键点:

  • 让方块转动起来
  • 将动画的支点移动到方块的右下角

这个很简单,直接实现即可:

.cube {
  /* ... */
+  animation: cubeClimb 1.5s ease-in-out infinite;
+  transform-origin: bottom right;
}

@keyframes cubeClimb {
  0% {
    transformrotate(0deg);
  }
  100% {
    transformrotate(90deg);
  }
}

效果如下:

图三
图三

实现了翻滚,那么接下来就该考虑这个方块翻滚之后有点“站不稳”的细节了。

我们知道,按照常理,回弹的角度应该是越来越小的,所以这里可以用诸如 85, 87.5 这样的数据来模拟这个效果:

@keyframes cubeClimb {
  0% {
    transformrotate(0deg);
  }
  60% {
    transformrotate(90deg);
  }
  65% {
    transformrotate(85deg);
  }
  70% {
    transformrotate(90deg);
  }
  75% {
    transformrotate(87.5deg);
  }
  80%,
  100% {
    transformrotate(90deg);
  }
}

效果如下:

图四
图四

到这里,有的读者可能会认为:方块虽然已经能够翻滚的,但每一圈之后都会重置到原来的位置上,没法连续起来呀。

别急,单纯对方块来说,能做的就这么多了,想要让动画连续起来,我们可以像胶圈一样,让背景跟着移动起来就好:

.box {
  display: flex;
  justify-content: center;
  width100%;
  animation: moveFloor 1.5s ease-in-out infinite;
}

@keyframes moveFloor {
  0% {
    transformtranslateX(0px);
  }
  100% {
    transformtranslateX(-200px);
  }
}

效果如下:

图五
图五

地板

其实这个效果只需要一行代码就可以实现了:

.box {
/* ... */
+  -webkit-box-reflect: below 1px linear-gradient(transparent, #0004);
}

效果如下:

图六
图六

说在后面的

到这里,其实整个效果已经实现得七七八八了,现在还留下一个问题:怎么让方块斜着网上爬?

这个问题本文暂不作答,感兴趣的读者可以自行尝试一下,也算是消化理解一番。

那么今天就到此为止,感谢阅读,以及若有谬误之处,望不吝指出。

最后,这里是在线 demo:荧光方块攀爬效果