HTML评分是静态分析结果,不依赖星星组件运行;Lighthouse只检查标签语义、属性完整性等静态可访问性标记,不执行JS或监听aria-valuetext等动态变更。
HTML评分不依赖星星组件,也不影响它运行 —— 两者根本不在同一层。 Lighthouse 的 HTML 评分是静态分析结果,只看标签语义、属性完整性、结构合规性;星星组件是运行时交互控件,性能和行为由 JS 绑定方式、DOM 更新粒度、CSS 动画触发机制决定。
aria-valuetext 不会提升 HTML 评分Lighthouse 的 HTML 评分项(如「表单控件有恰当的标签」或「使用语义化标签」)只检查是否存在 aria-label、aria-labelledby 或 legend 这类静态可访问性标记,但不会执行 JS、不监听属性动态变更。即使你在 change 事件里反复更新 aria-valuetext,Lighthouse 扫描时看到的仍是初始值或空值。
fieldset + legend 包裹、每个 input[type="radio"] 是否有对应 label[for]、name 是否统一且非空aria-valuetext 是给屏幕阅读器 runtime 用的,不是给 Lighthouse 静态 parser 用的for 属性?id 和 for 值是否拼错?legend 文本是否为空?input[type="range"] 为什么拉低 HTML 评分还不好用用 input[type="range"] 实现星星评分,表面省事,实际在 HTML 评分和可用性上双输:
range 很少配 label,更难加 legend;强行加 aria-label 又无法表达“5星制”语义value="4" 自动映射成“四颗实心星”,你得靠 CSS 刻度线或 JS 渲染图标,这导致 DOM 结构与语义脱节→ 键只能步进 1,但默认 step 是 1,没设 min="1" max="5" 就可能滑出合法范围;而 radio 组天然限制在 1–5 之间range 滑块热区窄,误操作率高;星星点击区域可轻松放大到整个 label,体验更好name 冲突会导致 HTML 评分归零吗不会直接归零,但会触发多个严重扣分项:
立即学习“前端免费学习笔记(深入)”;
input[type="radio"] 被视为一组 —— 如果 10 行都用 name="rating",Lighthouse 会认为你只提供了一个评分控件,其余 9 行无表单语义,扣「表单结构清晰」分id(如每行都有 id="star1")违反 HTML 规范,Lighthouse 直接标红「ID 重复」,属于基础合规性错误name="rating-event-123"、id="rating-event-123-star3"、for="rating-event-123-star3"
#star3,得用属性选择器如 input[id$="-star3"] 或靠 class 控制样式真正卡住性能的从来不是 HTML 评分本身,而是你用 document.querySelectorAll('.star') 在每次 hover 里查 DOM,或用 innerHTML 重绘整行星星 —— 这些动作发生在运行时,跟 Lighthouse 那个静态分数毫无关系。