全部分类
阿宇同学_8179
2026-05-24
1009人浏览
原创
原生 radio 是唯一兼顾表单提交、键盘导航、无障碍和纯 css 交互的方案;div+click 方案无法提交数据、不可聚焦、屏幕阅读器不可读,仅是视觉玩具。
div
click
常见错误是把五颗 ★ 写成独立 div 或 span,然后用 JS 绑定 click 更新 class。问题很实在:
span
name="rating"
tab
tabindex="0"
keydown
role="radio"
aria-checked
aria-labelledby
input[type="radio"]
必须保证 input 在 label 前面(或包裹在 label 内),否则 :checked ~ label 选择器失效。典型结构如下:
input
label
:checked ~ label
<div class="star-rating"> <input type="radio" id="star5" name="rating" value="5"><label for="star5" title="5 分">★</label> <input type="radio" id="star4" name="rating" value="4"><label for="star4" title="4 分">★</label> <input type="radio" id="star3" name="rating" value="3"><label for="star3" title="3 分">★</label> <input type="radio" id="star2" name="rating" value="2"><label for="star2" title="2 分">★</label> <input type="radio" id="star1" name="rating" value="1"><label for="star1" title="1 分">★</label> </div>
关键点:
name
for
id
display: none
position: absolute; opacity: 0; width: 0; height: 0;
checked
defaultChecked
纯 CSS 要实现「悬停第 3 颗星,前 3 颗都变色」+「已选第 4 颗,前 4 颗保持高亮」,得靠两个规则叠加:
input:checked ~ label
.star-rating:hover label:hover ~ label, .star-rating:hover label:hover
但有个坑:hover 规则优先级常低于 :checked,所以必须让 :checked ~ label 的选择器权重更高,比如加个类名或用 !important(不推荐),更稳妥的是把悬停样式写在 :checked 规则之后。
hover
:checked
!important
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
另外,5 星语义上应从右往左排(5 分最右),CSS 中要么用 flex-direction: row-reverse,要么用 direction: rtl + unicode-bidi: bidi-override,避免文字流干扰 ★ 渲染。
flex-direction: row-reverse
direction: rtl
unicode-bidi: bidi-override
原生 radio 能搞定的,别用 JS 插手。JS 只需处理三件事:
document.querySelector('[value="3"]').checked = true
change
input[name="rating"]
document.querySelector('input[name="rating"]:checked)?.value
半星、取消选中、拖动评分——这些都不是表单需求,而是 UI 增强,必须加 JS。但它们不该破坏原生 radio 的基础能力,比如取消功能做完后,仍要确保最终选中的那个 input 是 checked 状态,否则表单照样收不到值。
真正容易被忽略的,是焦点管理。键盘用户按 tab 进入评分区后,焦点落在第一个 input 上,但你隐藏了它——必须用 input:focus + label 给 label 加 outline 或 box-shadow,否则他们完全不知道自己在哪颗星上。
input:focus + label
前端入门到VUE实战笔记:立即使用 在学习笔记中,你将探索 前端 的入门与实战技巧!
相关文章
使用 CSS Grid 实现动态高度子容器自适应填充与边界约束
如何在 Flex 布局中实现表格列内文本自动换行
如何在 Flex 布局中实现表格列内文本自动换行(Word Wrap)
如何在 HTML 页面中按用户输入数量动态显示图片副本
实现表格中每行输入值的实时求和校验与提交按钮状态控制
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
相关标签:
本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:如何通过HTML的Element.scrollLeft和scrollTop获取和设置元素内部的滚动偏移量
下一篇:如何使用影子DOM封装样式_SHADOWROOT实现组件样式隔离
作者最新文章
HTML页面局部滚动怎么设置
利用正则表达式完成HTML表单校验
HTML中文乱码怎么改成GBK编码
HTML页面刷新变成404错误怎么搞
HTML图片放大镜怎么做过渡效果
如何在HTML项目中统一编码设置规范
如何在HTML中用表单元素创建日期范围
HTML缓存机制怎么正确处理重定向
如何在HTML表单中配置step属性
如何使用HTML调整长内容表格布局
热门AI工具
Seko
立刻MV
UpDream
DeepSeek
豆包大模型
二狗PPT
VibeKnow
AionClaw
相关专题
html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。
2023.06.14
6075
7
html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。
2023.06.21
3412
4
html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。
2023.07.31
3090
5
html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。
2023.08.01
3119
HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。
2023.08.11
4859
6
在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。
3061
3
html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。
2023.08.31
2869
html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。
2023.09.01
2528
HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。
2023.09.20
2588
热门下载
相关下载
精品课程
共0课时 | 0人学习
共1课时 | 224人学习
共6课时 | 54.7万人学习
共89课时 | 133.7万人学习
共49课时 | 82.4万人学习
共22课时 | 2.5万人学习
共31课时 | 3.5万人学习
共28课时 | 4.4万人学习
最新文章