效果预览

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/ZMwgqK

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cJB3rAN

源代码下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含若干子元素,每个子元素是 1 个字母:

<div class="container">
<span>h</span>
<span>a</span>
<span>p</span>
<span>p</span>
<span>y</span>
<span>&nbsp;</span>
<span>h</span>
<span>o</span>
<span>l</span>
<span>i</span>
<span>d</span>
<span>a</span>
<span>y</span>
<span>s</span>
</div>

居中显示:

body {
margin: 0;
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(pink, white, pink);
}

设置字体样式:

.container span {
display: inline-block;
color: purple;
font-weight: bold;
text-transform: uppercase;
font-size: 40px;
}

定义文字从左到右的移动效果:

.container span {
animation: sideSlide 4s forwards infinite;
transform: translateX(-100vw);
} @keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em);
} 24% {
transform: translateX(0);
} 25%, 75% {
transform: translateX(0);
} 90%, 100% {
transform: translateX(100vw);
}
}

增加文字缩放的动画效果:

.container span {
transform: translateX(-100vw) scale(0);
} @keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
} 24% {
transform: translateX(0) scale(1.2);
} 25%, 75% {
transform: translateX(0) scale(1);
} 90%, 100% {
transform: translateX(100vw) scale(0);
}
}

增加文字入场和出场时的淡入淡出效果:

.container span {
filter: opacity(0);
} @keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
} 24% {
transform: translateX(0) scale(1.2);
} 25%, 75% {
transform: translateX(0) scale(1);
filter: opacity(1);
} 90%, 100% {
transform: translateX(100vw) scale(0);
filter: opacity(0);
}
}

增加文字变色的效果:

@keyframes sideSlide {
15%, 20% {
transform: translateX(0.5em) scale(1);
color: purple;
} 24% {
transform: translateX(0) scale(1.2);
color: cyan;
} 25%, 75% {
transform: translateX(0) scale(1);
filter: opacity(1);
color: purple;
} 90%, 100% {
transform: translateX(100vw) scale(0);
filter: opacity(0);
}
}

设置子元素的下标变量:

.container span:nth-child(1) { --n: 1; }
.container span:nth-child(2) { --n: 2; }
.container span:nth-child(3) { --n: 3; }
.container span:nth-child(4) { --n: 4; }
.container span:nth-child(5) { --n: 5; }
.container span:nth-child(6) { --n: 6; }
.container span:nth-child(7) { --n: 7; }
.container span:nth-child(8) { --n: 8; }
.container span:nth-child(9) { --n: 9; }
.container span:nth-child(10) { --n: 10; }
.container span:nth-child(11) { --n: 11; }
.container span:nth-child(12) { --n: 12; }
.container span:nth-child(13) { --n: 13; }
.container span:nth-child(14) { --n: 14; }

设置子元素的动画延时:

.container span {
animation-delay: calc((var(--n) - 1) * 0.05s);
}

大功告成!

最新文章

  1. [转]jquery 对 Json 的各种遍历
  2. nodeJS中exports和mopdule.exports的区别
  3. bootstrap弹出框提示框无法调用
  4. 由tombstone文件解析jni代码过程
  5. [CoreOS 转载] CoreOS实践指南(四):集群的指挥所Fleet
  6. jQuery 1.7_20120209 学习笔记
  7. Linux负载均衡概念与实践(一)
  8. POJ1836 - Alignment(LIS)
  9. lmsw - 加载机器状态字
  10. (转)苹果iOS开发者账号过期临时解决方法
  11. Swift编程语言学习1.4——数值型字面量、数值类型转换
  12. 微信小程序tips集合:无法输入文字/随时查看页面/元素审查/点击事件/数据绑定
  13. ConcurrentHashMap源码及分析
  14. Android之View绘制流程源码分析
  15. web 服务器、PHP、数据库、浏览器是如何实现动态网站的
  16. [HNOI 2009]最小圈
  17. Python全栈(第一部分)day1
  18. servlet保存会话数据---利用隐藏域
  19. JVM(一):方法区
  20. apache安装时的一些术语

热门文章

  1. Libvirt 版本降级过程记录 4.5.0 to 3.9.0
  2. nginx提示地址或端口被占用解决
  3. 如何实现在Eclipse导入c3p0
  4. delphi dbgrid数据导出为excel
  5. nginx启动用户和nginx工作用户要一致
  6. 微信小程序前端支付
  7. Java程序设计——反转字符串 &amp; 找朋友 &amp; 计算int型二进制1的个数 &amp; 情报加密 &amp; 计算日期 &amp; 求近似数 &amp; 输出较小数(练习1)
  8. unity中的常遇到的问题
  9. 应用安全 - Java - 插件 - IO - excel-streaming-reader - 漏洞汇总
  10. 简述在Js或Vue中监听页面的刷新、关闭操作