服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

巧用视觉障眼法,还原 3D 文字特效

日期: 来源:iCSS前端趣闻收集编辑:SbCo

最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果:

这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗?

不是特别好实现,但是,如果仅仅只是在一定角度内,利用视觉障眼法,我们还是可以比较完美的还原上述效果的。

利用距离、角度及光影构建不一样的 3D 效果

这是一种很有意思的技巧,在 奇思妙想 CSS 3D 动画 | 仅使用 CSS 能制作出多惊艳的动画?[1] 我们曾经介绍过,当然,制作的过程需要比较多的调试。

合理的利用距离、角度及光影构建出不一样的 3D 效果。看看下面这个例子,只是简单是设置了三层字符,让它们在 Z 轴上相距一定的距离。

简单的伪代码如下:

<div>
  <span class='C'>C</span>
  <span class='S'>S</span>
  <span class='S'>S</span>
  <span></span>
  <span class='3'>3</span>
  <span class='D'>D</span>
</div>
$bright : #AFA695;
$gold : #867862;
$dark : #746853;
$duration : 10s;
div {
 perspective: 2000px;
 transform-style: preserve-3d;
 animation: fade $duration infinite;
}
span {
 transform-style: preserve-3d;
 transform: rotateY(25deg);
 animation: rotate $duration infinite ease-in;
 
 &:after, &:before {
  content: attr(class);
  color: $gold;
  z-index: -1;
  animation: shadow $duration infinite;
 }
 &:after{
  transform: translateZ(-16px);
 }
 &:before {
  transform: translateZ(-8px);
 }
}
@keyframes fade {
 // 透明度变化
}
@keyframes rotate {
 // 字体旋转
}
@keyframes shadow {
       // 字体颜色变化
}

简单捋一下,上述代码的核心就是:

  1. 父元素、子元素设置 transform-style: preserve-3d
  2. span 元素的两个伪元素复制两个相同的字,利用 translateZ() 让它们在 Z 轴间隔一定距离
  3. 添加简单的旋转、透明度、字体颜色变化

可以得到这样一种类似电影开片的标题 3D 动画,其实只有 3 层元素,但是由于角度恰当,视觉上的衔接比较完美,看上去就非常的 3D。

为什么上面说需要合理的利用距离、角度及光影呢?

还是同一个动画效果,如果动画的初始旋转角度设置的稍微大一点,整个效果就会穿帮:

可以看到,在前几帧,能看出来简单的分层结构。又或者,简单调整一下 perspective,设置父容器的 perspective2000px 改为 500px,穿帮效果更为明显:

也就是说,在恰当的距离,合适的角度,我们仅仅通过很少的元素,就能在视觉上形成比较不错的 3D 效果。

上述的完整代码,你可以猛击这里:CSS 灵感 -- 3D 文字出场动画[2]

基于,这个技巧,我们简单的改造一下,我们首先替换一下文字效果:

<div>
  <span class='2'>2</span>
  <span class='0'>0</span>
  <span class='2'>2</span>
  <span class='3'>3</span>
</div>

这样,我们就可以得到这样一种效果:

Wow,有点那个意思了。接下来,我们需要换上喜庆的文字效果。首先,随便在网上找一找烟花 Gif 图,也许是这样:

我们通过 background-clip: text,给 3 层文字都加上类似这个效果,核心伪代码如下:

span {
 position: relative;
 transform-style: preserve-3d;
 color: transparent;
 background: url(xxx.gif);
 background-clip: text;
 
 &:after, &:before {
  position: absolute;
  content: attr(class);
  color: transparent;
  background: url(xxx.gif);
         background-clip: text;
 }
 
 &:before {
  transform: translateZ(-12px);
 }
 &:after {
  transform: translateZ(-6px);
 }
}

这样,我们就得到了带有烟花效果的文字,以及,一点 3D 效果:

还剩下最后一步,倒影效果怎么制作呢?

方法有很多种,比较便捷的是使用 webkit-box-reflect 元素。只需要一行代码即可:

div {
    //...
    -webkit-box-reflect: below -6vw linear-gradient(transparent 20%, rgba(255,255,255, .6));
}

当然,如果对两个伪元素生成的字形成的 3D 文字视觉上的厚度不满意,也可以同步去调整两个伪元素的 transform: translateZ(-6px) 的值,经过一番调整后,我们就简单的复刻了如题图所示的 2023 3D 文字动画效果:

完整的代码,你可以戳这里:

CodePen Demo -- CSS 3D 2023[4]

最后

好了,本文到此结束,非常有意思的一个小技巧,希望本文对你有所帮助 :)

更多精彩 CSS 技术文章汇总在我的 Github -- iCSS[5] ,持续更新,欢迎点个 star 订阅收藏。

如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

参考资料

[1]

奇思妙想 CSS 3D 动画 | 仅使用 CSS 能制作出多惊艳的动画?: https://github.com/chokcoco/iCSS/issues/132

[2]

CSS 灵感 -- 3D 文字出场动画: https://csscoco.com/inspiration/#/./3d/3d-text-debut

[3]

jcode: https://code.juejin.cn/pen/7184248016419684389

[4]

CodePen Demo -- CSS 3D 2023: https://codepen.io/Chokcoco/pen/xxzvgqG

[5]

Github -- iCSS: https://github.com/chokcoco/iCSS

如果觉得还不错,欢迎点赞、收藏、转发❤❤

相关阅读

  • 那些炫酷的 CSS 文字效果之诗词《兔》

  • 不知不觉已经迈入2023年,今年是兔年,想到兔子就会联想到玉兔,中秋,胡萝卜,兔子不吃窝边草,这就越扯越远了,今天的主题是用纯CSS来实现各种不错的文字效果,文字则摘录古诗词中有关《
  • 今晚 B 站直播预告 - 《你所不知道的CSS》

  • 扫码直达 B 站直播间,7 号晚 20:00 点准时开始,预计时长 1 小时,感兴趣来听听:Hi 各位小伙伴,本周六(2023/01/07)晚 20:00 点,我将在 Bilibili 给大家带来一场《你所不知道的CSS》
  • 不负时光,Coco 的 2022 年终总结

  • 从来没有写过年终总结,回首 2022,感觉有很多令人难忘的瞬间,觉得今年很有必要记录一下。在回家的列车上,回忆一整年的的经历,有挣扎、有坚持、有迷茫、有喜悦,最终也有收获。用文
  • CSS 奇思妙想之酷炫倒影

  • 在 CSS 中,倒影是一种比较常见的效果。今天,我们就将尝试,使用 CSS 完成各类不同的倒影效果,话不多说,直接进入主题。实现倒影的两种方式首先,快速过一下在 CSS 中,实现倒影的 2 种
  • 丢弃 HttpClient 了,这款轻量级框架更强!

  • 来自:CSDN,作者:Kevin&Amy链接:https://blog.csdn.net/qq_38233258/article/details/115799602一、Forest1.1 业务需求一般情况下是后端提供接口,前端调用,解决需求,但是有的时候为
  • 开发现代 JavaScript 库的正确姿势【送书】

  • 文末赠书大家好,我是童欧巴。喜迎新年,给堂友们搞几波送书福利,在此感谢博文视点大力支持,具体送书规则请移步文末。最近一年,互联网裁员现象愈演愈烈,很多大厂裁员的消息冲上了微

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 巧用视觉障眼法,还原 3D 文字特效

  • 最近群里有这样一个有意思的问题,大家在讨论,使用 CSS 3D 能否实现如下所示的效果:这里的核心难点在于,如何利用 CSS 实现一个立体的数字?CSS 能做到吗?不是特别好实现,但是,如果仅
  • 那些炫酷的 CSS 文字效果之诗词《兔》

  • 不知不觉已经迈入2023年,今年是兔年,想到兔子就会联想到玉兔,中秋,胡萝卜,兔子不吃窝边草,这就越扯越远了,今天的主题是用纯CSS来实现各种不错的文字效果,文字则摘录古诗词中有关《
  • 今晚 B 站直播预告 - 《你所不知道的CSS》

  • 扫码直达 B 站直播间,7 号晚 20:00 点准时开始,预计时长 1 小时,感兴趣来听听:Hi 各位小伙伴,本周六(2023/01/07)晚 20:00 点,我将在 Bilibili 给大家带来一场《你所不知道的CSS》
  • 不负时光,Coco 的 2022 年终总结

  • 从来没有写过年终总结,回首 2022,感觉有很多令人难忘的瞬间,觉得今年很有必要记录一下。在回家的列车上,回忆一整年的的经历,有挣扎、有坚持、有迷茫、有喜悦,最终也有收获。用文
  • CSS 奇思妙想之酷炫倒影

  • 在 CSS 中,倒影是一种比较常见的效果。今天,我们就将尝试,使用 CSS 完成各类不同的倒影效果,话不多说,直接进入主题。实现倒影的两种方式首先,快速过一下在 CSS 中,实现倒影的 2 种