css 如何区分已勾选和未勾选状态_使用 checked 伪类选择器

小墨同学_6857

小墨同学_6857

2026-01-14

810人浏览

原创

:checked 选择器仅对 checkbox、radio 和多选 select 中的 option 生效,需配合隐藏原生控件+伪元素实现视觉反馈,不响应纯 JS 属性修改,且表单重置时状态同步但 class 不自动更新。

css 如何区分已勾选和未勾选状态_使用 checked 伪类选择器

如何用 :checked 选择器精准捕获勾选状态

:checked 只对 、 和 (在 中)生效。它不作用于 type="text" 或自定义组件,也不响应 JavaScript 手动设置的 checked 属性变更(除非 DOM 状态同步更新)。

关键点:浏览器只在用户交互或显式调用 element.click() / element.checked = true 并触发重绘后才更新 :checked 的匹配状态。

常见写法与易错路径

不能直接给 input 加样式(因原生控件不可见且跨浏览器渲染差异大),必须借助相邻/子元素联动:

  • 用 + label 选中紧邻的 label(要求 input 在 label 前)
  • 用 ~ label 选中后续任意位置的 label(需同级)
  • 用 input:checked + .custom-control 控制自定义视觉层

错误示例:input:checked { background: red; } —— 大部分浏览器下无视觉效果。

实际可运行的 CSS 控制逻辑

以下是最小可行结构,兼容 Chrome/Firefox/Safari:

input[type="checkbox"] {
  position: absolute;
  opacity: 0;
  pointer-events: none;
}

input[type="checkbox"] + label::before {
  content: "☐";
  margin-right: 8px;
}

input[type="checkbox"]:checked + label::before {
  content: "☑";
}

说明:

jm-jsjkxyjs02-zlm-405
jm-jsjkxyjs02-zlm-405

使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。

下载
  • opacity: 0 隐藏原生框但保留可点击区域;pointer-events: none 防止遮挡下方内容
  • 必须用 ::before 伪元素承载图标,否则无法通过 :checked 触发切换
  • 若 label 包裹 input,可用 label input:checked ~ .icon,但需确保 .icon 是 label 内的后续兄弟节点

radio 组与多选场景下的注意事项

:checked 在 radio 组中天然互斥,但 CSS 无法感知“当前未被选中的其他选项”——也就是说,你不能用纯 CSS 写出“除当前选中外,其余 radio 全部变灰”这种逻辑。

能做的只有单向控制:

  • input[value="a"]:checked ~ .section-a { display: block; }
  • input[type="radio"]:checked + label { color: #1890ff; }

如果需要反向样式(如禁用未选中的 radio 对应的描述文字),必须配合 JS 设置 class 或改用

+ :has()(注意::has() 在 Safari 15.4+ 和 Chrome 105+ 支持,旧版不兼容)。

真正容易被忽略的是:当表单通过 form.reset() 重置时,:checked 状态会立即同步,但依赖 JS 维护的 class 不会自动清除——这会导致视觉与真实状态不一致。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2886

5

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.06

5819

7

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

2026.03.24

4147

22

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

2024.01.03

4316

7

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

2025.12.06

306

9

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

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

2023.06.20

4696

8

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

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

2023.07.28

1395

5

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

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

2023.08.03

1838

5

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

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

2023.08.17

10263

11

热门下载

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

精品课程

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

共14课时 | 1.6万人学习