文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

CSS | 巧用模糊实现文字的 3D 效果

2024-12-14 00:44

关注

Hello,大家好,我是 Coco。因为发现大家不太喜欢在公众号看长篇大论。

后续会带来新的每日 CSS 系列,力求在 2~5 分钟内讲明白一个小的 CSS 知识点或者动画,希望对你有所帮助。

正文从下面开始~

本文将介绍一种巧用模糊实现的文字 3D 效果。

我们都知道,在正常的视觉效果中,离我们越近的通常我们会看的越清晰,而离我们较远则相对没那么清晰~

我们可以利用清晰与模糊两种状态来构建视差效果。像是这样:

而在 CSS 中,我们可以利用模糊滤镜 filter: blur() 与 transform-style: preserve-3d 来实现它们。

实现一个文字的 3D 变换

首先,我们需要实现一个文字的 3D 变换,这个比较简单。主要是借助 transform-style: preserve-3d 和 perspective,以及让文字绕 Y 轴进行旋转即可。

简单的代码如下:

  1. CSS3DEFFECT

     
  1. body { 
  2.     perspective: 160vmin; 
  3.  
  4. p { 
  5.     font-size: 24vmin; 
  6.     transform-style: preserve-3d; 
  7.     animation: rotate 10s infinite ease-in-out
  8.  
  9. @keyframes rotate { 
  10.     0% { 
  11.         transform: rotateY(-45deg); 
  12.     } 
  13.     50% { 
  14.         transform: rotateY(45deg); 
  15.     } 
  16.     100% { 
  17.         transform: rotateY(-45deg); 
  18.     } 

我们就可以得到这样一个 3D 文字效果:


实现文字的模糊

这个效果已经有了初步的 3D 效果,但是仅仅是这样,会觉得少了些什么。接下来我们就需要补充一下模糊的效果,让距离我们近的文字清晰,远离我们的文字模糊。

但这样就需要对每个文字进行精细化处理,上面的 HTML 结构无法做到对每一个文字的单独处理,我们简单改造一下结构:

  1.  

  2.     C 
  3.     S 
  4.     S 
  5.     3 
  6.     D 
  7.     E 
  8.     F 
  9.     F 
  10.     E 
  11.     C 
  12.     T 
  13.  

 完整的代码大概是这样:

  1. @import url('https://fonts.googleapis.com/css2?family=Lobster&display=swap'); 
  2.  
  3. $count: 12; 
  4.  
  5. body, html { 
  6.     font-family: 'Lobster', cursive; 
  7.     perspective: 160vmin; 
  8.     overflow: hidden; 
  9.  
  10. p { 
  11.     margin: auto; 
  12.     font-size: 24vmin; 
  13.     transform-style: preserve-3d; 
  14.     animation: rotate 10s infinite ease-in-out
  15.      
  16.     span { 
  17.         text-shadow:  
  18.             1px 1px 0 rgba(0, 0, 0, .9), 
  19.             2px 2px 0 rgba(0, 0, 0, .7), 
  20.             3px 3px 0 rgba(0, 0, 0, .5), 
  21.             4px 4px 0 rgba(0, 0, 0, .3), 
  22.             5px 5px 0 rgba(0, 0, 0, .1); 
  23.          
  24.         &:nth-child(-n+5) {  
  25.             animation-delay: -5s;  
  26.         } 
  27.     } 
  28.  
  29. @for $i from 1 to 7 { 
  30.     span:nth-child(#{$i}),  
  31.     span:nth-last-child(#{$i}) { 
  32.         animation: filterBlur-#{$i} 10s infinite ease-in-out
  33.     } 
  34.  
  35.     @keyframes filterBlur-#{$i} { 
  36.         0% { 
  37.             filter: blur(0px) contrast(5); 
  38.         } 
  39.         50% { 
  40.             filter: blur(#{7 - $i}px) contrast(1); 
  41.         } 
  42.         100% { 
  43.             filter: blur(0px) contrast(5); 
  44.         } 
  45.     } 
  46. @keyframes rotate { 
  47.     0% { 
  48.         transform: rotateY(-45deg); 
  49.     } 
  50.     50% { 
  51.         transform: rotateY(45deg); 
  52.     } 
  53.     100% { 
  54.         transform: rotateY(-45deg); 
  55.     } 

简单解析下,这里有几个小技巧,仔细观察我们需要的效果:

  1. 第一个字符和最后一个字符在旋转的最左效果和最右效果下分别会离我们最近和最远,它们的效果其实应该是一致的,所以第一个字符和最后一个字符应该统一处理,依次类推,第二个字符和倒数第二字符统一处理,这里可以借助 SASS 利用 :nth-child 和 :nth-last-child 高效编写 CSS 代码
  2. 每次有一半是清晰的,一半的是模糊的,需要区分对待,利用 animation-delay 让一半的动画延迟一半进行
  3. 可以再配合 text-shadow 让文字更立体点

这样,我们可以最终得到如下效果:

完整的代码,你可以戳这里 -- CodePen Demo -- CSS 3D Text Blur Effect[1]

最后

好了,本文到此结束,希望对你有帮助 。

参考资料

[1]CodePen Demo -- CSS 3D Text Blur Effect:

https://codepen.io/Chokcoco/pen/rNwOvNW

 

来源:iCSS前端趣闻内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯