【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画

news2025/3/30 22:14:14

在这里插入图片描述

第 0 步:项目结构

lighting-text/
    ├─ index.html
    └─ style.css
  1. index.html:包含列表 <ul>,其中每个 <li> 放一个字母或符号。
  2. style.css:设置背景、文字样式,以及关键帧动画(lighting)让文字逐个闪光。

第 1 步:编写 HTML 结构

index.html 中,核心就是一个无序列表 <ul>,每个 <li> 对应一个字母/符号:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="author" content="Milena Carecho">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS Animation</title>
    <!-- 引入我们自己的 CSS -->
    <link rel="stylesheet" type="text/css" href="style.css">
    <!-- 引入字体(可选) -->
    <link href="https://fonts.googleapis.com/css?family=Lato:400,700" rel="stylesheet">
</head>
<body>
    <ul>
        <li>D</li>
        <li>E</li>
        <li>S</li>
        <li>A</li>
        <li>F</li>
        <li>I</li>
        <li>O</li>
        <li></li>
        <li>C</li>
        <li>S</li>
        <li>S</li>
    </ul>
</body>
</html>

代码要点

  • 每个 <li> 都是一个字母/符号组成的序列,比如 “D E S A F I O ♡ C S S”。
  • <link> 标签引用了 Google Fonts 的 Lato 字体(可选)。
  • 其余信息如 charset, viewport 等是常规页面设定。

第 2 步:全局样式与列表布局

style.css 里,先写一些基础样式让页面内容居中,并设定背景色:

body {
    height: 100vh;             /* 占满视窗高度 */
    display: flex;             /* 启用 Flex 布局 */
    justify-content: center;   /* 水平居中 */
    align-items: center;       /* 垂直居中 */
    font-family: 'Lato', sans-serif; /* 指定字体 */
    background-color: #272727; /* 深色背景 */
}

/* <ul> 去掉默认的列表样式,使用 flex 排列字母 */
ul {
    margin: 0;
    padding: 0;
    display: flex;
}

解释

  1. height: 100vh:让 body 占满整个浏览器高度。
  2. display: flex; align-items: center; justify-content: center;:让 <ul>(以及文字)在页面居中。
  3. background-color: #272727;:设置深灰色背景,使闪光效果更明显。
  4. ul { display: flex; }:让列表项横向排列。

第 3 步:文字的基础外观

再来看看 <li> 的初始样式与动画:

ul li {
    list-style: none;   /* 去掉列表项符号 */
    color: #484848;     /* 默认字体颜色(深灰) */
    font-size: 88px;    /* 加大字号 */
    letter-spacing: 15px; /* 增加字母间距,让效果更突出 */
    animation: lighting 1.4s linear infinite; 
    /* 使用名为 lighting 的动画,时长1.4秒,线性播放并无限循环 */
}

解释

  1. color: #484848;:文字默认是深灰色,没有任何发光。
  2. font-size: 88px; letter-spacing: 15px;:让文字足够大并彼此间留有空隙,便于显示闪光。
  3. animation: lighting 1.4s linear infinite;
    • 调用名为 lighting 的关键帧,
    • 持续时间:1.4秒,
    • linear:匀速过渡,
    • infinite:重复播放。

我们还没定义 @keyframes lighting,接下来就要完成它。


第 4 步:定义关键帧 lighting

这是本示例最核心的动画部分:

@keyframes lighting {
    0% {
        color: #484848;
        text-shadow: none;
    }
    90% {
        color: #484848;
        text-shadow: none;
    }
    100% {
        color: #fff900; /* 亮黄色 */
        text-shadow: 0 0 7px #fff900, 0 0 50px #ff6c00;
    }
}
动画阶段分析
  1. 0%90%
    • 文字颜色保持 #484848,即深灰色;
    • text-shadow: none;,无阴影。
    • 这意味着动画的前 90% 时间,文字不会闪光。
  2. 100%
    • 文字切换成亮黄色 #fff900
    • text-shadow: 0 0 7px #fff900, 0 0 50px #ff6c00;,添加多重阴影
      • 一个较短的发光 0 0 7px #fff900
      • 一个更大、更远的发光 0 0 50px #ff6c00
    • 整体看起来像是突然闪亮了一下。
  3. 因为整个动画是 1.4s 线性循环,当到达 100% 时,瞬间回到初始状态 (0%) 再次开始,如此无限重复。
  4. 结果:每个字母在 1.4 秒的周期里,有 0.14 秒(10%)的时间会闪光。

第 5 步:让每个字母“依次”闪光

仅仅写上述动画,每个 <li>同时闪光。但示例中,每个字母的闪光是依次出现、互相错开的,这是通过 animation-delay 来控制。请看以下代码:

ul li:nth-child(1) { animation-delay: 0s;    }
ul li:nth-child(2) { animation-delay: 0.1s; }
ul li:nth-child(3) { animation-delay: 0.2s; }
ul li:nth-child(4) { animation-delay: 0.3s; }
ul li:nth-child(5) { animation-delay: 0.4s; }
ul li:nth-child(6) { animation-delay: 0.5s; }
ul li:nth-child(7) { animation-delay: 0.6s; }
ul li:nth-child(8) { animation-delay: 0.7s; }
ul li:nth-child(9) { animation-delay: 0.8s; }
ul li:nth-child(10){ animation-delay: 0.9s; }
ul li:nth-child(11){ animation-delay: 1s;   }

工作原理

  • 第一个字母(D)从 0s 开始动画,第二个字母(E)从 0.1s 后开始动画,第三个字母(S)从 0.2s 开始……
  • 所以每个字母的闪光时间错开了 0.1s,形成一种流动的闪光效果,而不是整排文字一起闪。
  • 当动画周期结束时(1.4秒),它们又会再次从各自延迟开始新一轮闪动,于是循环不断。

你可以根据需求修改延迟,比如 0.08s0.15s 等,或者在 .li:nth-child(N) 里改成想要的数值来调整节奏。


6. 运行效果与可选调整

现在,打开 index.html 预览,你会看到:

  1. 深灰色背景中,一排大号文字“D E S A F I O ♡ C S S”。
  2. 每个字母默认处于暗灰色,当到达各自的动画末端(100%)时,会瞬间切换为亮黄色并带有橙色的强烈光晕。
  3. 整个序列依次闪光,一波接一波,显得酷炫又有节奏感。

可选改动

  • 闪光时长:把 lighting 1.4s linear infinite; 里的 1.4s 改成更大或更小,如 2s(闪光慢一点)或 1s(更快)。
  • 发光颜色
    • color: #fff900; 可以改成别的亮色,比如 #00ff00#ffffff
    • text-shadow: 0 0 7px #fff900, 0 0 50px #ff6c00; 也可以改成你喜欢的组合。比如把 #ff6c00 换成 #00ffff,就会有蓝绿色的外光。
  • 默认颜色#484848 可改成黑色或更浅灰,看个人审美。
  • 字母个数与延迟:可以增加或减少 <li>,并对应增加 nth-child(N) 规则;动画延迟也可微调。
  • 闪光占比:在 @keyframes lighting 中,0%90% 同样保持暗色,而 100% 才亮起——意味着只有最后的 10% 时间在闪光。你可以把 90% 改成 80%70% 等,让闪光时段更长。

总结

通过这一步步的解析,你已经掌握了:

  1. Flex 布局:将文字排成一行并居中显示;
  2. 关键帧动画 + 延时:让每个字母按照不同的节奏进行闪亮;
  3. text-shadow 多重阴影:实现多层次的发光效果;
  4. nth-child:精准控制每个 <li> 的动画延迟,让文字依次闪动。

不需要任何 JavaScript,就能制作出一个漂移有序、富有节奏感的文字闪光动画。希望本教程能让你理解 CSS 动画的乐趣与强大,并在实际项目中加以灵活运用。祝你学习与创作愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2322861.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Swift实现嵌套json字典重排序并输出string

在网络请求或接口签名中&#xff0c;通常要求将参数按照一定规则拼接成字符串。一个常见的做法是对字典的 key 进行排序&#xff0c;然后按照 “keyvalue” 的格式拼接&#xff0c;多个参数之间以特定符号&#xff08;例如 &&#xff09;连接。 如果参数中包含嵌套的字典或…

【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)

在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细) 开发环境一、前情提要:你…

Flink基础简介和安装部署

文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看⑤退出停止集群 2、Standalone模式①修改配置⽂件 conf/flink-conf.yaml②修改…

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…

LeetCode算法题(Go语言实现)_11

题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&#xff09;字符而不改变剩余字符相对位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一个子序列&a…

Python----数据分析(足球运动员数据分析)

一、数据展示 1.1、数据 1.2、列名 字段名备注Name姓名Nationality国籍National_Position国家队位置National_Kit国家队号码Club所在俱乐部Club_Position所在俱乐部位置Club_Kit俱乐部号码Club_Joining加入俱乐部时间Contract_Expiry合同到期时间Rating评分Height身高Weight体…

matplotlib——南丁格尔玫瑰

南丁格尔玫瑰图&#xff08;Nightingale Rose Chart&#xff09;&#xff0c;是一种特殊形式的柱状图&#xff0c;它以南丁格尔&#xff08;Florence Nightingale&#xff09;命名&#xff0c;她在1858年首次使用这种图表来展示战争期间士兵死亡原因的数据。 它将数据绘制在极坐…

Django与网页表单

我叫补三补四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲网页表单 网页表单又叫做HTML表单&#xff0c;用来处理用户从页面输入发送到服务器的数据&#xff0c;页面表单通常会提供复选框、单选按钮和文本字段&#xff0c;方便用户填写各种形式…

ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常

社区王牌专栏《一问一实验&#xff1a;AI 版》改版以来已发布多期&#xff08;51-60&#xff09;&#xff0c;展现了 ChatDBA 在多种场景下解决问题的效果。 下面让我们正式进入《一问一实验&#xff1a;AI 版》第 62 期&#xff0c;看看 ChatDBA 最新效果以及与热门大模型 De…

Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)

一、 高斯滤波 边缘检测本身属于锐化操作&#xff0c;对噪点比较敏感&#xff0c;所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后&#xff0c;其实把它们连起来边缘检测就算完了…

基于Kubernetes部署Prometheus监控平台

#作者&#xff1a;stackofumbrella 文章目录 prometheus和k8s集群版本对照表架构Prometheus Operator简介kube-prometheus下载地址 安装修改镜像地址修改Prometheus的service修改Grafana的service修改Alertmanager的service数据持久化执行安装 Prometheus验证Grafana验证解决C…

往期项目shader着色器实践效果应用合集

1、管路混色 2、水管水流效果 3、水管流入到流完效果 4、加热冷却 两 色混色 示意 XX、毒蘑菇测试效果

绿色暴政:Relax Max如何用军工科技定义环保新标准

《绿色暴政&#xff1a;Relax Max如何用军工科技定义环保新标准》 ——从隐形战斗机涂层到零碳卫浴的降维打击 &#xff08;洛克希德马丁实验室&#xff0c;2023年&#xff09;当F-35战斗机的隐形涂料配方被改写为卫浴釉料时&#xff0c;环保产业迎来了最硬核的颠覆者。Relax…

第十三届蓝桥杯单片机省赛程序设计试题

目录 试题 各程序块代码 init.c main.c other.h other.c key.c seg.c onewire.c部分 ds1302.c部分 试题 各程序块代码 init.c #include "other.h"void init74hc138(unsigned char n){P2(P2&0x1f)|(n<<5);P2&0x1f; } void init(){P00x00;in…

QOpenGLWidget动态加载功能实现教程(Qt+OpenGL)

QOpenGLWidget动态加载功能实现教程 我需要在Qt里面使用QOpenGLWidget显示OpenGL窗口&#xff0c;并且需要实现加载模型后重新渲染更新窗口的功能&#xff0c;但是一直无法更新被卡住了&#xff0c;现在把问题解决了总结一下整个实现过程。 创建一个自己的OpenGLWidget类 QOp…

ESP32驱动BMP280和MQ4传感器

文章目录 前言 一、硬件准备 所需组件 连接方式&#xff1a; 二、软件实现 1.所需库 2.代码实现 效果演示 三、上传Qt端 前言 在物联网和环境监测应用中&#xff0c;传感器是获取环境数据的关键组件。本文将详细介绍如何使用ESP32微控制器同时驱动BMP280大气压力传感器…

MQTT协议笔记

消息格式 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;专为低带宽、高延迟或不可靠的网络设计&#xff0c;广泛应用于物联网&#xff08;IoT&#xff09;设备之间的通信。MQTT消息体的结构遵循MQTT协议规范&#xff0…

“征服HTML引号恶魔:“完全解析手册”!!!(quot;表示双引号)

&#x1f6a8;&#x1f4e2; "征服HTML引号恶魔&#xff1a;“完全解析手册” &#x1f4e2;&#x1f6a8; &#x1f3af; 博客引言&#xff1a;当引号变成"恶魔" &#x1f631; 是否遇到过这种情况&#xff1a; 写HTML时满心欢喜输入<div title"他…

如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志

一、首先按照以下 指引 中的 第1、2步骤&#xff0c;安装一下 AGDE &#xff0c;AGDE 的安装包可以在官网上找到。 UE4 使用AndroidGameDevelopmentExtension&#xff08;AGDE&#xff09;对安卓客户端做“断点调试”与“代码热更”-CSDN博客 在执行第二步骤前&#xff0c;记得…

VSCode 生成HTML 基本骨架

在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…