【开源宝藏】30天学会CSS - DAY5 第五课 脉冲动画

以下是一个完整的渐进式教程,拆解如何用 HTML + CSS 构建“Pulsar”水波脉冲动画。通过阅读,你将理解每个核心属性与关键帧如何配合,让一个小圆不断散发动态波纹,并且文字始终停留在圆心。


在这里插入图片描述

第 0 步:项目概览

文件结构示例如下:

pulsar-effect/├─ index.html└─ style.css
  1. index.html:页面主体,包含一个居中的 <div> 显示“Pulse”文字。
  2. style.css:用来设置背景、圆形外观、关键帧动画等。

第 1 步:编写基础 HTML

打开/新建 index.html,编写最简洁的页面骨架:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="author" content="Milena Carecho"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Pulsar</title><!-- 关联CSS文件 --><link rel="stylesheet" type="text/css" href="style.css">
</head>
<body><!-- 用于居中元素 --><div class="center"><!-- 核心 pulsar 动画元素 --><div class="pulse">Pulse</div></div></body>
</html>

代码说明

  • <div class="center">:将子元素放在页面正中央的辅助容器。
  • <div class="pulse">Pulse</div>:一个圆形块,用来显示文字“Pulse”并附加脉冲动画。

第 2 步:基础CSS,设置背景与居中

新建或编辑 style.css,先设置页面外观与 .center 容器布局:

body {margin: 0;padding: 0;background: #262626;  /* 深灰色背景,让动画更突出 */
}.center {position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);
}
  • 去除 body 默认间距:保证背景全屏。
  • 深灰色背景:凸显后面青绿色脉冲效果。
  • 绝对定位 + transform: translate:将 .center 及其子元素完美居中在可视区。

第 3 步:打造圆形 + 文字

.pulse 上定义尺寸、颜色、字体等,形成一个圆形按钮式的视觉:

.pulse {width: 100px;height: 100px;background: #177c80;       /* 青绿色背景 */border-radius: 50%;        /* 圆形 */color: #fff;               /* 白色文字 */font-size: 20px;           /* 字号适当放大 */text-align: center;        /* 文本居中(横向) */line-height: 100px;        /* 文本居中(纵向) */font-family: verdana;text-transform: uppercase; /* 文字大写 *//* 调用关键帧动画 */animation: animate 3s linear infinite;
}

关键知识点

  1. border-radius: 50%:将 100×100 的方块变成完美圆形。
  2. 文字居中:使用 line-height 与元素高度相等,再配合 text-align: center;
  3. 动画触发animation: animate 3s linear infinite; 告诉浏览器用名为 animate 的关键帧,3秒一轮,不断重复 (infinite)。

第 4 步:定义关键帧动画

真正的脉冲效果是通过 box-shadow 在不同时刻的扩散透明度变化来实现。把下面的代码加到 style.css

@keyframes animate {0% {box-shadow: 0 0 0 0 rgba(55, 209, 201, 0.7), 0 0 0 0 rgba(24, 153, 104, 0.7);}40% {box-shadow: 0 0 0 50px rgba(55, 209, 201, 0), 0 0 0 0 rgba(55, 209, 201, 0.7);}80% {box-shadow: 0 0 0 50px rgba(55, 209, 201, 0), 0 0 0 30px rgba(55, 209, 201, 0);}100% {box-shadow: 0 0 0 0 rgba(55, 209, 201, 0), 0 0 0 30px rgba(55, 209, 201, 0);}
}

多重 box-shadow

  • 每一帧都定义了两个阴影,用逗号分隔。
  • 0 0 0 50px rgba(...) 中的 第四个值(“50px”)是扩散半径(spread-radius),用于制造类似扩张的环。
  • rgba(..., 0.7)rgba(..., 0) 表示不同透明度,使外扩后渐渐消失。
动画阶段解读
  1. 0%:两个阴影都在半径0处,且透明度 0.7(略微可见)。
  2. 40%:第一个阴影扩散到 50px,并且透明度变0(消失于外侧),第二个阴影还在半径0但保持 0.7。
  3. 80%:第一个阴影持续在 50px 且不可见,第二个阴影扩散到 30px 同时也逐渐透明。
  4. 100%:两个阴影都回到0半径且透明度0,准备进入下个循环。

通过在不同时刻让两个环先后扩散、变淡,呈现出脉冲或水波一圈圈向外扩散的效果。


第 5 步:测试与微调

现在,打开浏览器查看 index.html,你会看到:

  1. 网页以深灰色为背景。
  2. 中央有一枚青绿色的小圆,内写“Pulse”。
  3. 该圆周围不断出现扩散且渐隐的阴影环,形成“脉冲”动画。

如需调整:

  • 动画周期:在 .pulse 里把 3s 改成你想要的时长,如 2s5s
  • 颜色 & 透明度:改动 rgba(55, 209, 201, 0.7)rgba(24, 153, 104, 0.7),可用更多颜色,或修改透明度营造更微妙的光晕感。
  • 扩散尺寸0 0 0 50px0 0 0 80px 可扩大脉冲半径;还可改变关键帧中各个百分比节点来控制时机。
  • 只要一个环:可将双重阴影改为一个,脉冲更简洁。

总结

通过本教程的分步骤拆解,你学习到了:

  1. 如何居中页面元素position: absolute; transform: translate(-50%, -50%))。
  2. 使用 CSS 生成圆形width=height; border-radius=50%)。
  3. 使用多重 box-shadow 制造外扩“水波”效果。
  4. 关键帧配合动画:在不同阶段改动 box-shadow 的扩散半径与透明度,实现连续的“脉冲”循环。

不需要任何 JavaScript,就能完成一个简洁又炫酷的“Pulsar”水波脉冲动画!你可以将其应用在页面加载指示、按钮交互或其他创意场景中。祝你学习愉快、创意无限!

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

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

相关文章

2060 裁纸刀

2060 裁纸刀 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2022、规律、思维 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 100010…

TextView、AppCompatTextView和MaterialTextView该用哪一个?Android UI 组件发展史与演进对照表

在 Android 开发中&#xff0c;UI 组件一直在不断演进&#xff0c;从最初的原生组件&#xff0c;到 Support Library&#xff08;AppCompat 兼容库&#xff09;&#xff0c;再到如今的 Material Design 组件。这篇文章将梳理 Android UI 组件的发展历史&#xff0c;并提供详细的…

python学习笔记--实现简单的爬虫(一)

任务&#xff1a;爬取豆瓣最受欢迎的250个电影的资料 链接&#xff1a;豆瓣电影 Top 250 用浏览器打开后&#xff0c;使用F12或鼠标右键--检查&#xff0c;查看网页的源代码&#xff0c;分析网页结构&#xff0c;如下图所示&#xff1a; 分析后得知&#xff1a; 1.电影名位于…

Postgresql 删除数据库报错

1、删除数据库时&#xff0c;报错存在其他会话连接 ## 错误现象&#xff0c;存在其他的会话连接正在使用数据库 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解决方法 ## 终止被删除数据库下…

self Attention为何除以根号dk?(全新角度)

全网最独特解析&#xff1a;self Attention为何除根号dk&#xff1f; 一、假设条件&#xff1a;查询向量和键向量服从正态分布 假设查询向量 q i q_i qi​和键向量 k j k_j kj​的每个分量均为独立同分布的随机变量&#xff0c;且服从标准正态分布&#xff0c;即&#xff1a;…

numpy学习笔记10:arr *= 2向量化操作性能优化

numpy学习笔记10&#xff1a;arr * 2向量化操作性能优化 在 NumPy 中&#xff0c;直接对整个数组进行向量化操作&#xff08;如 arr * 2&#xff09;的效率远高于显式循环&#xff08;如 for i in range(len(arr)): arr[i] * 2&#xff09;。以下是详细的解释&#xff1a; 1. …

Cursor+Claude-3.5生成Android app

一、Android Studio下载 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安装完成 二、新建工程 点击new project 选择Empty Activity 起一个工程名 当弹出这个框时 可以在settings里面选择No proxy 新建好后如下 点击右边模拟器&#xff0c…

WPF Reactive 数据绑定

文章目录 Combox 绑定List-通过枚举绑定方法一:方法二:Button 绑定TextBlock绑定NumericUpDown绑定Expander绑定checkbox绑定NumericUpDownCombox 绑定List-通过枚举绑定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…

算法及数据结构系列 - 滑动窗口

系列文章目录 算法及数据结构系列 - 二分查找 算法及数据结构系列 - BFS算法 算法及数据结构系列 - 动态规划 算法及数据结构系列 - 双指针 算法及数据结构系列 - 回溯算法 算法及数据结构系列 - 树 文章目录 滑动窗口框架思路经典题型76. 最小覆盖子串567. 字符串的排列438. …

Android adb调试应用程序

启动app 有的时候app不是预先安装的&#xff0c;也不能从界面start一个app&#xff0c;这时需要后台拉起app。 $adb shell am start package.name/Activity.name 例如&#xff0c;android原生camera app&#xff0c; 包名为com.android.camera2&#xff0c; mainActivity名为…

Java EE(15)——网络原理——TCP协议解析一

一.确认应答/(确认)序列号 接收方接收到数据后&#xff0c;向发送方返回一个确认信号(ack)&#xff0c;告诉发送方数据被成功接收。ACK报文段只是作为确认使用的&#xff0c;一般来说不携带应用层数据&#xff08;载荷&#xff09;&#xff0c;也就是说只有报头部分。但有可能…

node-ddk,electron 组件, 打开新窗口

node-ddk 打开新窗口 https://blog.csdn.net/eli960/article/details/146207062 也可以下载demo直接演示 http://linuxmail.cn/go#node-ddk 本文讲解如何在渲染进程发起创建新窗口, 包括 window.open 在主进程定义窗口类型 import main, { NODEDDK } from "node-ddk…

git管理时keil项目忽略文件列表

在使用 Git 管理 Keil MDK&#xff08;μVision 5&#xff09;工程时&#xff0c;需要忽略编译生成的临时文件、调试文件、用户配置等非必要内容。以下是忽略文件的详细列表及说明&#xff0c;可直接保存为 .gitignore 文件&#xff1a; Keil MDK 工程的 .gitignore 文件 giti…

C#单例模式

单例模式 (Singleton),保证一个类仅有一个实例&#xff0c;并提供一个访问它的全局访问点。通常我们可以让一个全局变量使得一个对象被访问&#xff0c;但它不能防止你实例化对个对象&#xff0c;一个最好的办法就是&#xff0c;让类自身负责保护它的唯一实例。这个类可以保证没…

ZYNQ的cache原理与一致性操作

在Xilinx Zynq SoC中&#xff0c;Cache管理是确保处理器与外部设备&#xff08;如FPGA逻辑、DMA控制器&#xff09;之间数据一致性的关键。Zynq的ARM Cortex-A9处理器包含L1 Cache&#xff08;指令/数据&#xff09;和L2 Cache&#xff0c;其刷新&#xff08;Flush/Invalidate&…

Linux NFS、自动挂载与系统启动管理指南

1. NFS客户端挂载导出的目录的方式 NFS&#xff08;网络文件系统&#xff09; 允许将远程服务器的目录挂载到本地&#xff0c;像访问本地文件一样操作远程文件。挂载方式主要有两种&#xff1a; 手动挂载&#xff1a;使用 mount 命令&#xff08;临时生效&#xff0c;重启后丢…

NO.55十六届蓝桥杯备战|排序|插入|选择|冒泡|堆|快速|归并(C++)

插⼊排序 插⼊排序(Insertion Sort)类似于玩扑克牌插牌过程&#xff0c;每次将⼀个待排序的元素按照其关键字⼤⼩插⼊到前⾯已排好序的序列中&#xff0c;按照该种⽅式将所有元素全部插⼊完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

【Oracle资源损坏类故障】:详细了解坏块

目录 1、物理坏块与逻辑坏块 1.1、物理坏块 1.2、逻辑坏块 2、两个坏块相关的参数 2.1、db_block_checksum 2.2、db_block_checking 3、检测坏块 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、数据字典 3.5、DBVERIFY 4、修复坏块 4.1、RMAN修复 4.2、DBMS_REPA…

计算机网络高频(二)TCP/IP基础

计算机网络高频(二)TCP/IP基础 1.什么是TCP/IP⭐⭐ TCP/IP是一种网络通信协议,它是互联网中最常用的协议之一。TCP/IP有两个基本的协议:TCP(传输控制协议)和IP(互联网协议)。 TCP(Transmission Control Protocol,传输控制协议)是一种可靠的、面向连接的协议。它负…

【大模型算法工程】大模型应用工具化、忠诚度以及知识库场景下PDF双栏解析问题的讨论

1. 大模型时代应用工具化以及无忠诚度现象讨论 接触大模型久了&#xff0c;也慢慢探到一些大模型能力表现非常自然和突出的场景&#xff0c;比如AI搜索&#xff08;依赖大模型的理解总结能力&#xff09;、AI对话&#xff08;即chat&#xff0c;依赖大模型的生成能力&#xff0…