Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程_创想鸟

CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程

steps()函数是打字机效果的关键,因为它将动画分割为离散步骤,使字符逐个显示;具体来说,steps(n, end)中的n对应文本字符数,确保每个步骤显示一个字符,而end保证变化发生在步长末尾,避免显示不完整字符;相比之下,普通线性动画会使文字平滑出现,失去敲击键盘的节奏感。为处理不同长度文本,需动态计算字符数并更新css变量,javascript获取textcontent.length后赋值给–char-count,并调整动画时长–animation-duration,实现自适应。光标闪烁可通过border-right结合@keyframes或伪元素::after实现;前者利用边框颜色切换,后者通过伪元素content定义光标形状并控制opacity实现闪烁,两者均使用step-end确保瞬间切换,保持真实输入感。

CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程

CSS动画实现文字打字机特效,核心在于利用steps()函数控制字符逐个显示,并结合overflow: hiddenwidth动画来模拟输入过程。同时,一个闪烁的光标能大大增强效果的真实感,这通常通过边框动画或伪元素来实现。

CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程

解决方案

要实现一个基本的CSS打字机效果,你需要一段HTML文本,并配合相应的CSS样式。

HTML结构:

立即学习“前端免费学习笔记(深入)”;

CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程

你好,这是一个CSS打字机效果。

CSS样式:

.typewriter {  font-family: 'Source Code Pro', monospace; /* 模拟打字机字体,可选 */  overflow: hidden; /* 隐藏超出容器的内容 */  white-space: nowrap; /* 文本不换行 */  border-right: .15em solid orange; /* 光标效果 */  width: 0; /* 初始宽度为0,文本不可见 */  animation:     typing 3.5s steps(20, end) forwards, /* 打字动画 */    blink-caret .75s step-end infinite; /* 光标闪烁动画 */}/* 假设文本有20个字符,包括标点和空格 */@keyframes typing {  from { width: 0 }  to { width: 100% }}@keyframes blink-caret {  from, to { border-color: transparent } /* 光标透明 */  50% { border-color: orange; } /* 光标显示 */}

这段代码里,typing动画负责控制width从0到100%,配合steps(20, end),让宽度以20个离散的步骤增长,每个步骤刚好显示一个字符。blink-caret动画则让右侧的边框周期性地显示和隐藏,模拟光标闪烁。forwards让动画结束后保持最终状态。

CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程

为什么steps()函数是打字机效果的关键?

说实话,steps()函数在CSS动画里是个挺特别的存在。它不像我们平时用的ease-in-out那样让动画平滑过渡,而是把整个动画过程切分成你指定数量的“步子”,每一步之间是瞬间完成的跳跃。对于打字机效果来说,这简直是天作之合。

你想啊,打字机不就是字符一个接一个地蹦出来吗?steps(N, end)中的N,我们通常会把它设成和文本字符数一样。这样,动画从width: 0width: 100%的过程中,它会分成N个等长的“跳跃”,每跳一步,就恰好显示一个字符。end这个关键词也很重要,它确保了每一步的改变发生在步长的末尾,这让字符显示的时机感觉更自然,不会出现那种“半个字符”的尴尬。

没有steps(),你用普通的linear动画去改变width,那文字就会像水波一样平滑地涌出来,完全没有那种“敲击键盘”的节奏感。所以,可以说steps()是这个效果的灵魂所在,它赋予了动画离散的、逐帧的感觉,完美模拟了字符逐个出现的视觉体验。

如何处理不同长度文本的打字机效果?

这是个很实际的问题,也是很多人在实现打字机效果时遇到的一个“小坑”。上面的例子里,我们把steps()的值直接写死了20,这当然只适用于20个字符的文本。如果文本变了,比如变成了30个字符,那动画要么显示不全,要么就多出一段空白的“打字”时间。

腾讯Effidit 腾讯Effidit

腾讯AI Lab开发的AI写作助手,提升写作者的写作效率和创作体验

腾讯Effidit 65 查看详情 腾讯Effidit

最直接但最笨的办法,就是每次文本长度变了,你就手动去改CSS里的steps()值。但显然,这不符合我们追求自动化和灵活性的原则。

一个更优雅的解决方案是结合JavaScript和CSS自定义属性(CSS变量)。我们可以用JavaScript来动态获取文本的长度,然后把这个长度值设置成一个CSS变量,最后在CSS里引用这个变量。

JavaScript 部分:

document.addEventListener('DOMContentLoaded', () => {  const typewriterElement = document.querySelector('.typewriter');  if (typewriterElement) {    // 假设文本内容是直接在HTML里,或者通过JS动态设置    const textContent = typewriterElement.textContent;     // 注意:这里需要考虑中文字符和英文字符的长度计算方式    // 对于英文字符,textContent.length 即可    // 对于中文,一个汉字算一个字符,textContent.length 也通常没问题    // 如果有特殊字符或需要精确像素宽度,情况会复杂些    const charCount = textContent.length;     // 设置CSS变量    typewriterElement.style.setProperty('--char-count', charCount);    // 同时更新动画时长,让每秒打字速度保持一致    typewriterElement.style.setProperty('--animation-duration', charCount * 0.15 + 's'); // 假设每个字符0.15秒  }});

更新后的CSS样式:

.typewriter {  --char-count: 1; /* 默认值,会被JS覆盖 */  --animation-duration: 0.15s; /* 默认值,会被JS覆盖 */  font-family: 'Source Code Pro', monospace;  overflow: hidden;  white-space: nowrap;  border-right: .15em solid orange;  width: 0;  animation:     typing var(--animation-duration) steps(var(--char-count), end) forwards,    blink-caret .75s step-end infinite;}@keyframes typing {  from { width: 0 }  to { width: 100% }}@keyframes blink-caret {  from, to { border-color: transparent }  50% { border-color: orange; }}

通过这种方式,JavaScript会根据实际文本长度动态调整steps()的数量和动画总时长,让你的打字机效果无论文本多长,都能保持流畅和准确。这大大提升了组件的复用性和健壮性。

打字机效果中光标闪烁的实现技巧有哪些?

光标闪烁是打字机效果的“点睛之笔”,它让整个过程看起来更像真实的输入。实现这个效果,最常用也最直接的方法就是利用元素的border-right属性,并结合一个简单的CSS动画。

利用border-right@keyframes:这是前面示例中用到的方法。给文本元素设置一个右边框,然后通过@keyframes动画,让这个边框的颜色在透明和实际颜色之间周期性切换。

.typewriter {  /* ... 其他样式 ... */  border-right: .15em solid orange; /* 初始光标颜色 */  animation:     /* ... 打字动画 ... */    blink-caret .75s step-end infinite; /* 光标闪烁动画 */}@keyframes blink-caret {  from, to { border-color: transparent } /* 光标隐藏 */  50% { border-color: orange; } /* 光标显示 */}

这里step-end很重要,它让颜色切换瞬间完成,而不是平滑过渡,这样光标看起来就像在“开关”一样,更真实。infinite则让它无限循环闪烁。

利用伪元素::after:有时,你可能不希望光标是元素的边框,或者需要更灵活的光标样式(比如一个竖线字符)。这时,可以使用伪元素::after来创建光标。

你好,这是一个CSS打字机效果。

.typewriter {  position: relative; /* 为伪元素定位提供上下文 */  /* ... 其他打字机样式,但不要border-right了 ... */}.typewriter::after {  content: '|'; /* 光标字符,也可以是空字符串配合border */  position: absolute; /* 相对于父元素定位 */  right: 0; /* 初始位置,需要根据实际情况调整 */  top: 0;  bottom: 0;  color: orange; /* 光标颜色 */  animation: blink-cursor .75s step-end infinite;}@keyframes blink-cursor {  from, to { opacity: 0; } /* 光标隐藏 */  50% { opacity: 1; } /* 光标显示 */}

这种方式的优点是光标样式更自由,你可以用content: '_'来模拟下划线光标,或者用background-color来创建一个方块光标。需要注意的是,当文本宽度变化时,伪元素可能需要更复杂的定位(比如依赖JS计算文本宽度来调整leftright)。不过,对于打字机效果,通常是文本完全显示后,光标才开始在末尾闪烁,所以简单定位到父元素右侧通常就够了。

无论哪种方法,关键都是利用@keyframesstep-end(或steps(1, end))来制造那种“瞬间切换”的视觉效果,让光标看起来富有生命力。

以上就是CSS动画如何实现文字打字机特效 CSS动画模拟字符逐个输入过程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1096626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
车上的QQ音乐怎么换_车载QQ音乐账号切换与歌曲更新教程
上一篇 2025年12月2日 11:09:55
CanvaAI怎样用风格词提示改设计_CanvaAI用风格词提示改设计【风格提示】
下一篇 2025年12月2日 11:09:59

相关推荐

  • 如何使用XGBoost训练AI大模型?优化机器学习模型的步骤

    XGBoost并非用于训练GPT类大模型,而是擅长处理结构化数据的高效梯度提升算法,其优势在于速度快、准确性高、支持并行计算、内置正则化与缺失值处理,适用于表格数据建模;通过分阶段超参数调优(如学习率、树深度、采样策略)、结合贝叶斯优化与交叉验证,并配合特征工程、数据预处理和集成学习等关键步骤,可显…

    2026年9月21日
    000
  • VSCode中怎么使用REM_VSCode移动端REM布局编写与换算教程

    答案:REM_VSCode插件可自动将像素转换为REM,需配置rootFontSize和precision,支持自动与手动转换,确保与html的font-size一致,配合media query适配不同屏幕,若插件异常可检查配置、重启或重装,替代工具有postcss-pxtorem、在线转换工具及浏…

    2026年9月21日
    100
  • 压力测试(Benchmark)Swoole服务的工具与方法

    进行swoole服务的压力测试是为了确保服务在高负载下稳定运行。1. 选择工具:apache jmeter、wrk、locust。2. 使用方法:jmeter通过脚本配置,wrk通过命令行,locust通过python脚本。3. 注意事项:环境隔离、数据监控、脚本设计。4. 优化点:内存泄漏、连接池…

    2026年9月21日
    000
  • MySQL数据库日志审计与合规性实现_保护敏感数据与满足法规需求

    MySQL数据库日志审计与合规性实现_保护敏感数据与满足法规需求MySQL数据库日志审计与合规性实现_保护敏感数据与满足法规需求MySQL数据库日志审计与合规性实现_保护敏感数据与满足法规需求MySQL数据库日志审计与合规性实现_保护敏感数据与满足法规需求

    mysql日志审计是合规性的基石,因为它提供了数据库操作的完整证据链,记录用户身份、操作类型和时间戳等关键信息,满足gdpr、hipaa等法规要求,并支持事后追溯与事前震慑。1. mysql自身提供错误日志、通用查询日志、慢查询日志和二进制日志,其中通用查询日志记录所有sql语句,二进制日志用于数据…

    2026年9月21日 用户投稿
    100
  • 如何系统学习蝴蝶号无人直播运营的核心知识

    如何系统学习蝴蝶号无人直播运营的核心知识如何系统学习蝴蝶号无人直播运营的核心知识如何系统学习蝴蝶号无人直播运营的核心知识如何系统学习蝴蝶号无人直播运营的核心知识

    要系统学习蝴蝶号无人直播运营的核心知识,首先要理解平台逻辑、制定精细化内容策略、掌握自动化技术并持续进行数据分析与风险控制。具体包括:一是深入研究平台算法和规则边界,确保操作合规;二是构建高质量、多样化且合规的内容素材库,并进行标签化管理;三是选择安全可靠的自动化工具,避免使用违规软件;四是模拟真人…

    2026年9月21日 用户投稿
    300
  • 为什么iPhoneSE2022屏幕无响应如何强制重启?快速按音量键后长按电源键

    首先尝试强制重启,若无效则检查充电状态,最后可通过恢复模式重装系统。具体为:1. 按音量+、音量-后长按电源键10秒以上;2. 充电15分钟观察是否响应;3. 连电脑进入恢复模式恢复系统。 如果您尝试唤醒或操作您的iPhone SE(2022款),但屏幕无响应或显示黑屏,可能是系统临时卡死或软件冲突…

    2026年9月21日
    100
  • 抖音蝴蝶号无人直播带货操作流程及注意事项

    抖音蝴蝶号无人直播带货操作流程及注意事项抖音蝴蝶号无人直播带货操作流程及注意事项抖音蝴蝶号无人直播带货操作流程及注意事项抖音蝴蝶号无人直播带货操作流程及注意事项

    “抖音蝴蝶号无人直播带货”是一种通过自动化或半自动化技术实现的直播销售模式。①其核心在于摆脱真人主播限制,实现24小时不间断直播,提升效率与流量利用率;②关键步骤包括明确账号定位与商品选择、准备高质量且丰富的内容素材、利用虚拟人或预录内容实现直播推流、结合智能客服模拟评论区互动;③优势在于降低人力成…

    2026年9月21日 用户投稿
    600
  • VSCode侧边栏怎么去掉_VSCode侧边栏隐藏教程

    隐藏VSCode侧边栏可通过Ctrl + B(Windows/Linux)或Cmd + B(macOS)快捷键快速切换,也可通过菜单栏“视图 > 外观 > 切换侧边栏可见性”或命令面板执行“View: Toggle Sidebar Visibility”实现。推荐使用快捷键操作,效率最高…

    2026年9月21日
    100
  • MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本MySQL用户权限体系配置思路_Sublime中编辑多用户分权管理脚本

    最小权限原则是mysql用户权限配置的核心,确保每个用户仅拥有必要权限以提升安全性与可维护性。1.明确需求:根据用户角色分配如只读、增删改查或结构修改权限;2.创建用户并编写sql脚本进行权限管理,替代手动输入命令,提高效率与一致性;3.使用sublime text等编辑器提升脚本编写效率,利用语法…

    2026年9月21日 用户投稿
    100
  • Linux目录结构学习常见问题汇总

    Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总Linux目录结构学习常见问题汇总

    Linux只有一个根目录,所有设备挂载于此,形成统一树状结构。根目录下各路径分工明确:/bin和/sbin分别存放用户与管理员命令;/etc集中配置文件;/home为用户家目录;/var存储日志等动态数据;/tmp用于临时文件;/usr存放系统程序,/usr/local供手动安装软件;/dev包含设…

    2026年9月21日 用户投稿
    200
  • Laravel应用的安全审计(Security Audit)方法

    进行安全审计对laravel应用至关重要,因为它能发现并修复安全漏洞,提升整体安全性和用户信任度。具体方法包括:1. 代码审查,确保无未过滤输入和弱密码;2. 配置文件安全性,保护敏感信息;3. 依赖管理,更新第三方包;4. 用户认证和授权,防止未授权访问;5. 日志和监控,检测异常行为。 在讨论L…

    2026年9月21日
    200
  • 自定义组件(Component)的开发方法

    开发自定义组件的步骤包括:1. 使用html和css定义组件结构和样式;2. 用javascript实现动态效果和状态管理;3. 确保跨浏览器和设备兼容性;4. 采用模块化设计和外部状态管理工具;5. 进行性能优化和测试驱动开发。通过这些步骤,可以创建出优雅且高效的自定义组件,提升用户体验。 在开发…

    2026年9月21日
    100
  • 协程调试与性能分析工具

    我们需要协程调试和性能分析工具是因为协程的异步特性使得传统工具难以应对调试和性能优化挑战。1) pycharm 适合基本调试,但处理大量协程时可能变慢。2) aiodebug 适用于检测协程问题,但会增加性能开销。3) asyncio-profiler 用于分析协程性能,但可能难以解读大量协程的结果…

    2026年9月21日
    100
  • Laravel与Vue.js/React前端框架集成

    laravel可以与vue.js或react集成。1) 使用命令“php artisan preset vue”或“php artisan preset react”设置开发环境。2) 在laravel视图中引入编译后的javascript文件。3) 通过laravel的api路由和前端框架的htt…

    2026年9月21日
    100
  • Linux如何查看命令别名alias使用方法

    直接输入 alias 命令可列出当前会话所有别名,如需查看特定命令是否为别名可用 type 命令;别名通过简化常用命令提升效率并减少错误,临时别名在当前会话生效,永久别名需写入 ~/.bashrc 或 ~/.zshrc 文件,删除则用 unalias 命令;别名适用于简单命令替换,函数支持参数与逻辑…

    2026年9月21日
    100
  • 如何设计统一的API响应格式?

    统一的api响应格式可以通过以下步骤设计:1. 使用包含状态码、消息和数据的基本结构;2. 定义标准的错误码和消息;3. 加入版本字段以支持版本控制和扩展性。这样可以提高api的可读性、简化错误处理和增强可扩展性,提升整体开发效率和用户体验。 统一的API响应格式是构建可靠和用户友好的API的关键。…

    2026年9月21日
    100
  • 为什么VSCode的语法高亮有时会失效?

    语法高亮失效通常由语言模式识别错误、扩展冲突或配置问题导致。1. 检查右下角语言模式并手动切换为正确类型,确保文件有正确扩展名;2. 禁用近期安装的扩展或以 code –disable-extensions 启动排查冲突;3. 切换至默认主题并检查 settings.json 是否覆盖颜…

    2026年9月21日
    600
  • Linux命令行如何查看登录用户

    Linux命令行如何查看登录用户Linux命令行如何查看登录用户Linux命令行如何查看登录用户Linux命令行如何查看登录用户

    答案是 who、w 和 users 命令用于查看Linux系统登录用户,其中 who 显示登录用户及终端信息,w 还显示用户正在执行的命令和系统负载,users 仅输出用户名列表。 在Linux命令行下,要查看当前系统上有哪些用户登录,最直接、最常用的命令包括 who 、 w 和 users 。它们…

    2026年9月21日 用户投稿
    200
  • Windows系统下的兼容性问题

    windows兼容性问题严重是因为系统演进快、硬件和软件环境多样。处理此问题需:1.了解目标系统版本和配置;2.使用低版本api或兼容性模式;3.检测操作系统版本并调整程序行为;4.避免依赖特定版本的库,提供多版本安装包;5.考虑硬件依赖性,提供备选方案;6.进行跨版本性能测试和优化。 在Windo…

    2026年9月21日
    200
  • Linux如何限制用户执行特定命令

    Linux如何限制用户执行特定命令Linux如何限制用户执行特定命令Linux如何限制用户执行特定命令Linux如何限制用户执行特定命令

    首选sudo进行命令限制,因其灵活且可审计;通过visudo配置精确的用户权限,结合白名单、命令别名和!语法实现允许或拒绝特定命令;同时防范绕过手段如全路径执行、间接调用、脚本执行等,需多层防御并辅以日志监控。 在Linux环境中,限制用户执行特定命令,最直接有效且灵活的方法通常是利用 sudo 权…

    2026年9月21日 用户投稿
    200

发表回复

登录后才能评论
关注微信