使用CSS为只读输入框添加动态闪烁光标

使用CSS为只读输入框添加动态闪烁光标

本教程详细介绍了如何利用CSS动画和辅助HTML元素,为readonly(只读)类型的输入框创建动态闪烁的光标效果。通过构建一个模拟光标的元素并对其应用关键帧动画,即使在输入框不可编辑的情况下,也能呈现出活跃的视觉反馈,提升用户体验。

理解需求与实现原理

在web开发中,标准的输入框由于其不可编辑的特性,通常不会显示文本输入光标。如果我们需要在这种只读输入框中模拟一个闪烁的光标,以提供更强的视觉提示或活跃感,直接对input元素应用color属性的css动画是无效的,因为它只会改变输入框内文本的颜色,而无法控制光标的显示。

要实现闪烁光标效果,核心思路是:

创建模拟光标元素: 使用一个独立的HTML元素(例如或

)来模拟光标的视觉外观。定位模拟光标: 将这个模拟光标元素精确地定位到输入框内部的期望位置。应用CSS动画: 对模拟光标元素应用CSS关键帧动画,使其在可见和透明状态之间交替,从而产生闪烁效果。

这种方法巧妙地绕过了浏览器对只读输入框光标的默认处理机制,为我们提供了高度的自定义能力。

HTML 结构改造

为了实现模拟光标,我们需要对原始的HTML结构进行一些调整。建议将元素包裹在一个容器中,并在该容器内添加一个元素作为我们的模拟光标。

以下是修改后的HTML结构示例:

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

在这个结构中:

.input-wrapper:是一个容器,用于包裹输入框和模拟光标,它将作为模拟光标的定位参考点。:原始的只读输入框。我们为其添加了一个value属性以便在示例中显示内容。:这就是我们将要创建并动画化的模拟光标。

CSS 样式实现

接下来,我们将编写CSS样式来定义容器、输入框以及最重要的模拟光标的外观和动画。

1. 容器样式 (.input-wrapper)

容器需要设置position: relative;,以便内部的.caret元素可以使用position: absolute;进行精确的绝对定位。同时,为了让容器的尺寸能够适应其内容,可以设置display: inline-block;。

.input-wrapper {  position: relative;  display: inline-block; /* 确保宽度适应内容 */  border: 1px solid #ccc; /* 模拟输入框的边框 */  border-radius: 4px;  padding: 8px 10px; /* 模拟输入框的内边距 */  background-color: white;  box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);  font-size: 16px;  line-height: 1.5; /* 确保光标高度与文本行高匹配 */}

2. 输入框样式 (.input-wrapper input[type=”text”])

为了避免重复的边框和背景,以及确保输入框内容与模拟光标协调,我们需要对输入框自身的样式进行调整。

.input-wrapper input[type="text"] {  border: none; /* 移除输入框自身的边框 */  outline: none; /* 移除焦点时的轮廓 */  padding: 0;  margin: 0;  width: 200px; /* 根据需要设置宽度 */  background-color: transparent; /* 确保背景透明 */  color: #333;  font-size: inherit; /* 继承父容器字体大小 */  line-height: inherit; /* 继承父容器行高 */  cursor: default; /* 只读输入框通常使用默认光标 */}/* 占位符样式(可选) */.input-wrapper input[type="text"]::placeholder {  color: #aaa;}

3. 模拟光标样式 (.caret)

这是实现闪烁效果的关键部分。我们将定义光标的尺寸、颜色、定位,并应用闪烁动画。

.caret {  width: 2px; /* 光标的宽度 */  height: 1.5em; /* 光标的高度,通常与文本行高匹配,使用em单位更具适应性 */  background-color: black; /* 光标的颜色 */  position: absolute;  top: 50%; /* 垂直居中 */  right: 10px; /* 距离输入框内容右侧的距离,可根据需求调整 */  transform: translateY(-50%); /* 精确垂直居中 */  animation: blink 1s infinite steps(1); /* 应用闪烁动画 */}

4. 关键帧动画 (@keyframes blink)

定义光标在透明和可见状态之间切换的动画。steps(1)确保动画是瞬时切换,而不是平滑过渡,这更符合光标的闪烁特性。

@keyframes blink {  from, to {    background-color: transparent; /* 隐藏光标 */  }  50% {    background-color: black; /* 显示光标 */  }}

完整示例代码

将上述HTML和CSS整合在一起,即可得到一个完整的、可运行的示例:

只读输入框闪烁光标教程  body {    font-family: sans-serif;    display: flex;    justify-content: center;    align-items: center;    min-height: 100vh;    background-color: #f0f0f0;    margin: 0;  }  .input-wrapper {    position: relative;    display: inline-block;    border: 1px solid #ccc;    border-radius: 4px;    padding: 8px 10px; /* 模拟输入框的内边距 */    background-color: white;    box-shadow: inset 0 1px 3px rgba(0,0,0,0.1);    font-size: 16px;    line-height: 1.5; /* 确保光标高度与文本行高匹配 */  }  .input-wrapper input[type="text"] {    border: none; /* 移除输入框自身的边框 */    outline: none; /* 移除焦点时的轮廓 */    padding: 0;    margin: 0;    width: 200px; /* 根据需要设置宽度 */    background-color: transparent; /* 确保背景透明 */    color: #333;    font-size: inherit;    line-height: inherit;    cursor: default; /* 覆盖原始的 cursor:pointer,只读输入框通常使用默认光标 */  }  .input-wrapper input[type="text"]::placeholder {    color: #aaa;  }  /* 模拟光标样式 */  .caret {    width: 2px; /* 光标宽度 */    height: 1.5em; /* 光标高度,通常与文本行高匹配 */    background-color: black; /* 光标颜色 */    position: absolute;    top: 50%;    right: 10px; /* 距离输入框内容右侧的距离 */    transform: translateY(-50%);    animation: blink 1s infinite steps(1); /* 应用闪烁动画 */  }  /* 关键帧动画 */  @keyframes blink {    from, to {      background-color: transparent; /* 隐藏光标 */    }    50% {      background-color: black; /* 显示光标 */    }  }  

注意事项

只读特性: 这种方法特别适用于readonly属性的输入框。对于可编辑的输入框,浏览器会默认管理光标,通常不需要手动添加模拟光标。如果需要在可编辑输入框中自定义光标,可能需要更复杂的JavaScript交互来控制模拟光标的显示和位置。光标定位: right属性和transform: translateY(-50%)的组合可以精确调整模拟光标在输入框内的位置。请根据实际布局、输入框的padding以及文本的对齐方式(左对齐、右对齐)进行微调。动画参数: animation: blink 1s infinite steps(1)中的参数含义:blink:动画名称,对应@keyframes blink。1s:动画的持续时间,即一个闪烁周期为1秒。infinite:动画无限次循环播放。steps(1):指定动画的步进函数。steps(1)表示动画在每个周期内只执行一步,即从透明瞬间变为可见,再从可见瞬间变为透明,实现了光标的“硬”闪烁效果。可访问性: 这种视觉效果主要是装饰性的。如果光标的闪烁状态对用户交互有关键意义,请确保有其他非视觉方式(如屏幕阅读器可读的文本提示)来传达相同信息,以提升可访问性。响应式设计 确保模拟光标的高度(例如height: 1.5em)能够随着字体大小的变化而自适应,以保持视觉上的一致性。

总结

通过上述CSS和HTML结构的巧妙结合,我们可以为只读输入框创建出引人注目的闪烁光标效果。这种技术增强了用户界面的视觉活跃度,尤其适用于计算器结果显示、状态指示等场景,为用户提供清晰的视觉焦点。通过灵活调整CSS属性,开发者可以完全自定义模拟光标的外观和动画行为,以适应不同的设计需求。

以上就是使用CSS为只读输入框添加动态闪烁光标的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
突破限制:使用CSS !important 覆盖动态或不可修改的内联样式
上一篇 2025年12月22日 20:54:28
掌握DOM选择器:高效定位HTML元素的全面指南
下一篇 2025年12月22日 20:54:45

相关推荐

  • Laravel 8 注册成功但登录失败的解决方案

    本文针对 Laravel 8 中使用 php artisan ui:auth 生成的认证系统,注册功能正常但登录功能失效的问题,提供了一种解决方案。通过重写 LoginController 中的 username() 方法,将认证字段从默认的 email 修改为 username,从而解决登录失败的…

    2026年9月22日
    000
  • UC浏览器占用内存太高怎么办_UC浏览器内存占用高优化方案

    UC浏览器内存占用过高可通过清理缓存、关闭多余标签页、禁用插件和开启省电模式解决。首先清除浏览数据释放资源,其次减少同时开启的标签页数量以降低内存压力,接着管理扩展程序避免后台消耗,最后启用性能优化功能减少资源使用,提升整体运行效率。 如果您在使用UC浏览器时发现设备运行缓慢或应用响应迟缓,这很可能…

    2026年9月22日
    100
  • iPhone如何打开url

    轻触链接即刻访问 当您在信息、邮件或其它应用程序中遇到一个网址链接时,只需轻轻点击该链接,iPhone便会自动启动Safari浏览器并加载对应的网页内容。这是最为普遍且高效的访问方式。 借助快捷指令快速进入 若您频繁访问某个特定网址,可使用“快捷指令”功能实现一键直达。先从App Store下载“快…

    2026年9月22日
    000
  • unix怎么安装php_unix系统安装php环境指南

    首先确认系统环境并检查是否已安装相关软件,然后选择包管理器或源码编译方式安装PHP;推荐使用包管理器快速安装,如Debian/Ubuntu用apt,CentOS/RHEL/Fedora用yum或dnf,FreeBSD用pkg;安装后配置Web服务器,Apache需加载mod_php或集成PHP-FP…

    2026年9月22日
    300
  • itextpdf freemarker渲染

    关于打印pdf操作的需求,经过研究,发现以下两种方法: 在现有的模板上进行编辑,这种方法操作难度较大。而通过FreeMarker生成静态页面,然后转换为HTML,操作更为顺畅。动态生成PDF的方法在网上参考较多,经过对比,我认为使用FreeMarker结合IText生成PDF最为简单。参考链接为ht…

    2026年9月22日
    300
  • Java多线程并发控制:告别线程优先级,拥抱锁机制

    本文深入探讨了在Java多线程环境中如何有效解决并发操作中断问题,特别是当多个线程尝试同时执行非原子性操作(如打印)时。文章指出,单纯依赖线程优先级并不可靠,并详细介绍了使用synchronized关键字配合共享锁对象实现互斥访问的关键技术,确保关键代码块的原子性执行,从而避免数据混乱和逻辑错误。 …

    2026年9月22日
    700
  • 使用空值合并运算符为数组元素设置默认值

    本文将介绍如何使用 PHP 的空值合并运算符 (??) 为数组元素设置默认值,尤其是在处理用户输入时。 通过该运算符,可以在变量值为 null 或不存在时,提供一个备选值,从而简化代码并提高可读性。我们将通过一个实际的 Laravel 邮件发送示例,演示如何在请求参数中缺失主题时,设置默认主题。 空…

    2026年9月22日
    600
  • 美团外卖新人优惠券领取入口_美团新人专享优惠券获取方法

    新用户可通过扫描官方二维码、完成App内新手任务、第三方平台链接及参与限时抢券活动领取美团外卖无门槛红包或大额优惠券,享受首单减免。 如果您是美团外卖的新用户,想要在下单时享受优惠,可以通过多种方式领取新人专享优惠券。这些优惠券通常为无门槛红包或大额满减券,能有效降低首次订餐成本。 本文运行环境:i…

    2026年9月22日
    000
  • 设计VSCode三维图形编程界面与WebGL实时预览模块

    VSCode通过集成WebGL预览插件实现三维图形编程的实时反馈,利用扩展架构提供GLSL语法支持、文件关联及命令注册,并通过Webview嵌入渲染窗口,结合消息通信与动态编译技术实现实时预览,配合保存自动刷新、错误定位与多视图布局优化交互体验,构建高效闭环开发环境。 在使用 VSCode 进行三维…

    2026年9月22日
    100
  • 谷歌浏览器PDF文件注释功能无法使用怎么办

    谷歌浏览器PDF文件注释功能无法使用怎么办谷歌浏览器PDF文件注释功能无法使用怎么办谷歌浏览器PDF文件注释功能无法使用怎么办谷歌浏览器PDF文件注释功能无法使用怎么办

    首先检查PDF权限,若文件设有限制需用专业工具解除;2. 确认非PDF/A格式,必要时转换为普通PDF;3. 推荐使用UPDF等专业软件实现完整注释功能;4. 清除浏览器缓存或重置Chrome设置以排除临时故障。 谷歌浏览器自带的PDF阅读器功能虽然方便,但有时会遇到无法使用注释功能的问题。这通常与…

    2026年9月22日 用户投稿
    300
  • Apache Pulsar 主题分区创建与管理指南

    本文深入探讨Apache Pulsar主题分区的创建与管理。Pulsar主题分区是实现高吞吐量和可伸缩性的关键,但必须在主题创建时进行配置。文章详细介绍了两种主要的分区主题创建方法:通过Broker配置实现自动分区,以及利用Pulsar Admin API进行显式创建,并强调了分区主题一旦创建后不可…

    2026年9月22日
    100
  • 使用 Spring Boot Test @Sql 注解通过掩码描述文件的方法

    在 Spring Boot 测试中,我们经常使用 @Sql 注解来执行 SQL 脚本,以便在测试前准备数据或在测试后清理数据。 通常的用法如下: @Sql(scripts = “/folder/my_favourite_script.sql”)@Testpublic void myTest() { …

    2026年9月22日
    100
  • 密码管理器是如何安全地存储和填充大量复杂密码的,其工作原理是什么?

    密码管理器通过主密码生成加密密钥,在设备端使用AES-256等算法加密数据,结合PBKDF2或Argon2密钥派生函数增强安全性;加密后数据经HTTPS同步至云端,服务商无法访问明文,实现零知识存储;登录时浏览器插件匹配URL与表单,用户确认后在内存中解密并填充凭证,不暴露数据库或明文;支持生成唯一…

    2026年9月22日
    000
  • 笔记—Linux安装OpenCV及VSCode的配置编译

    笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译笔记—Linux安装OpenCV及VSCode的配置编译

    在学习新技能的过程中,我选择了在linux系统上进行操作,这对于从未接触过linux的人来说是一个绝佳的学习机会。这篇文章记录了我在linux上安装opencv的过程。 我选择的Linux发行版是Ubuntu 20.04.3,并将其安装在Virtual Box虚拟机中。Ubuntu的相关资料丰富,选…

    2026年9月22日 用户投稿
    100
  • win11安卓子系统(WSA)安装不了怎么办_win11WSA安卓子系统安装失败解决方案

    首先将系统区域更改为美国,然后启用Hyper-V和虚拟机平台功能,接着通过PowerShell安装WSA离线包,若出现依赖错误需先安装Microsoft.UI.Xaml.2.6等组件,最后确保BIOS中已开启CPU虚拟化支持。 如果您尝试在Windows 11上安装安卓子系统(WSA)但遇到失败提示…

    2026年9月22日
    000
  • 优化JPA Envers审计:避免不必要的关联实体更新导致过多记录

    本文探讨了在使用JPA和Hibernate Envers时,如何解决因@ManyToOne关联实体更新而导致审计表中产生冗余记录的问题。通过分析问题根源,我们提出并详细阐述了使用@NotAudited注解来精确控制审计范围的解决方案,从而有效减少不必要的审计数据,提升系统性能和数据清晰度。 在基于j…

    2026年9月22日
    000
  • 使用Sublime管理MySQL数据库结构_高效编辑表结构与字段定义脚本

    使用Sublime管理MySQL数据库结构_高效编辑表结构与字段定义脚本使用Sublime管理MySQL数据库结构_高效编辑表结构与字段定义脚本使用Sublime管理MySQL数据库结构_高效编辑表结构与字段定义脚本使用Sublime管理MySQL数据库结构_高效编辑表结构与字段定义脚本

    用 sublime text 管理 mysql 数据库结构脚本高效且灵活。1. 适合习惯文本编辑、需自定义流程的开发者;2. 启动快、资源占用低,支持多光标、正则替换,插件丰富,易配合 git;3. 建议每张表单独文件、按模块分目录、主脚本汇总建表语句,索引外键单独文件;4. 推荐插件有 sqlto…

    2026年9月22日 用户投稿
    000
  • laravel Spatie/laravel-medialibrary包高级用法_Laravel Spatie Medialibrary高级功能使用方法

    Spatie/laravel-medialibrary 支持自定义磁盘路径、响应式图像、WebP格式、媒体集合分类、自定义属性存储及签名URL安全访问,并可通过队列异步处理文件转换,提升性能与安全性。 在 Laravel 应用中,Spatie/laravel-medialibrary 是处理文件上传…

    2026年9月22日
    1300
  • 米侠浏览器网页字体乱码怎么办 米侠浏览器字体显示异常修复方法

    字体乱码通常因编码错误、缓存问题或字体缺失引起。2. 首先尝试在米侠浏览器中切换网页编码为UTF-8、GBK或GB2312。3. 清除缓存、Cookie和网站数据可解决加载异常。4. 确保设备安装了常用中文字体如思源黑体或微软雅黑。5. 更新或重装最新版米侠浏览器以排除兼容性问题。6. 若仍无效,可…

    2026年9月22日
    100
  • Spring Boot集成MongoDB Atlas:正确配置与故障排除

    本教程详细指导如何在Spring Boot应用中正确配置与连接MongoDB Atlas集群。我们将重点讲解如何获取并使用正确的Atlas连接URI,安全地处理用户认证信息,以及准确指定目标数据库。通过实例代码和常见错误排查,帮助开发者避免连接失败,确保应用与MongoDB Atlas的顺畅集成。 …

    2026年9月22日
    600

发表回复

登录后才能评论
关注微信