0

0

如何通过 CSS 实现复选框勾选后文本自动添加删除线效果

碧海醫心

碧海醫心

发布时间:2026-02-11 17:39:09

|

846人浏览过

|

来源于php中文网

原创

如何通过 CSS 实现复选框勾选后文本自动添加删除线效果

本文介绍一种纯 css 方案,无需 javascript,即可在 to-do 列表中实现“勾选复选框 → 对应任务文本自动添加删除线”的交互效果,兼顾语义性、可访问性与代码简洁性。

在构建基于 Express + EJS 的 To-Do 应用时,常见的需求是:每个任务项旁配一个复选框,用户勾选后,对应文字以删除线(strikethrough)视觉标记为已完成。虽然初学者常尝试用 JavaScript 动态操作 DOM 样式(如修改 textDecoration 或 webkitTextStroke),但该方式易因元素数量不匹配、渲染时机问题或事件绑定失效而失败——正如你遇到的 getElementsByName 返回空集合或样式未生效的情况。

更优解是采用语义化 HTML 结构 + CSS 邻接选择器(+)驱动样式切换,完全规避 JavaScript 依赖,提升性能与可维护性。

✅ 推荐方案:CSS 驱动 + 语义化标签结构

核心思路:将

✅ 正确的 HTML 结构(EJS 模板中使用)

<% for (let i = listItems2.length - 1; i >= 0; i--) { %>
  
<% } %>
? 关键点: 每个复选框拥有唯一 id(如 todo-0, todo-1); 通过 for 属性精确关联对应复选框; 使用 accent-color 统一复选框高亮色(现代浏览器支持); 添加 transition-colors 实现颜色渐变,增强用户体验。

✅ 对应的 CSS 样式(推荐放入

/* 基础样式 */
label {
  color: #1f2937;
  font-size: 1.25rem;
  font-weight: 200;
  cursor: pointer;
}

/* 勾选后:文本删除线 + 灰色弱化 + 可访问性优化 */
input[type="checkbox"]:checked + label {
  color: #6b7280;
  text-decoration: line-through;
  text-decoration-thickness: 2px;
  text-decoration-color: #9ca3af;
}

/* 【重要】无障碍增强:为屏幕阅读器提供上下文提示 */
input[type="checkbox"]:checked + label::before {
  content: "[已完成任务]";
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

input[type="checkbox"]:checked + label::after {
  content: "[任务已标记为完成]";
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

? 说明:

Slazzer
Slazzer

免费在线抠除图片背景

下载

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

  • text-decoration: line-through 是标准、兼容性极佳的删除线方案(远优于非标准的 textStroke);
  • ::before/::after 中的隐藏文本不会显示在页面上,但会被屏幕阅读器读出,显著提升残障用户可用性;
  • clip + position: absolute 组合是 WCAG 推荐的无障碍隐藏技术(比 visibility: hidden 或 display: none 更可靠)。

⚠️ 注意事项与常见误区

  • 避免重复 ID:原代码中所有复选框 id="checkbox_id" 导致 DOM 选择器失效(ID 必须唯一)。务必为每个复选框生成唯一 ID(如 todo-)。
  • 慎用 getElementsByName:该方法返回 NodeList,但 name="para" 在

    上无语义意义,且 EJS 渲染后可能因结构变化导致索引错位。CSS 方案天然规避此风险。

  • 响应式与动画友好:transition-colors 和 text-decoration-thickness 支持平滑过渡,可在悬停/勾选时增加微交互反馈。
  • 服务端渲染友好:EJS 直接输出语义化 HTML,无需等待 JS 加载或执行,首屏即具备完整交互能力。

✅ 总结

放弃复杂且易出错的 JavaScript 样式操控,转而采用 HTML 语义化结构 + CSS 伪类选择器,不仅能稳定实现“勾选即删除线”,还能提升应用的可访问性(a11y)、SEO 友好度与长期可维护性。在 To-Do 类应用中,这是符合现代 Web 最佳实践的轻量级、高性能解决方案。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Node.js后端开发与Express框架实践
Node.js后端开发与Express框架实践

本专题针对初中级 Node.js 开发者,系统讲解如何使用 Express 框架搭建高性能后端服务。内容包括路由设计、中间件开发、数据库集成、API 安全与异常处理,以及 RESTful API 的设计与优化。通过实际项目演示,帮助开发者快速掌握 Node.js 后端开发流程。

5

2026.02.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

520

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

350

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

488

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5555

2023.08.17

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

487

2023.09.01

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.04

Js中concat和push的区别
Js中concat和push的区别

Js中concat和push的区别:1、concat用于将两个或多个数组合并成一个新数组,并返回这个新数组,而push用于向数组的末尾添加一个或多个元素,并返回修改后的数组的新长度;2、concat不会修改原始数组,是创建新的数组,而push会修改原数组,将新元素添加到原数组的末尾等等。本专题为大家提供concat和push相关的文章、下载、课程内容,供大家免费下载体验。

239

2023.09.14

2026春节习俗大全
2026春节习俗大全

本专题整合了2026春节习俗大全,阅读专题下面的文章了解更多详细内容。

56

2026.02.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

CSS教程
CSS教程

共754课时 | 30.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号