原来 HTML 已经能做这些事了

查看原文 HN 讨论

文章摘要

Chris Burnell 在 HTML Day 2026 活动上用一个小时搭出了这个页面,主题是「HTML 正在一口一口吃掉过去属于 JavaScript 的地盘」,逐条列出如今只靠 HTML 就能实现的动态功能,每条都配可交互 demo、代码片段和 Can I Use 的浏览器支持链接。8 月 20 日他做了一次重要更新,专门加重了对浏览器实现质量和无障碍缺陷的警告,并强调「尽管试,但请尽可能做到无障碍」。

清单包括:

popover 属性:配合 popovertarget 和 popovertargetaction 属性,就能得到点击外部自动关闭、Esc 键关闭、自动进入 top layer 而无需操心 z-index 的弹层,全程零 JavaScript。

dialog 元素:专用的模态对话框元素,同样可以叠加 popover 属性来开关;作者还额外附了一段用 showModal() 和 close() 的 JS 写法作对照,尽管这「有点违背本页的精神」。

分组 details:给一组 details 元素设置相同的 name 属性,它们就变成互斥的手风琴——打开一个,其他自动关闭。

command 与 commandfor:新落地的 invoker commands,让页面上多个独立按钮控制同一个弹层,不写脚本。作者注明目前只有 show-modal、close、request-close、toggle-popover、show-popover、hide-popover 六个命令进入稳定版;未来还会支持增减数值、控制媒体元素、复制文本等。

loading=”lazy”:图片进入视口附近才加载,完全不需要 IntersectionObserver。

hidden=”until-found”:被隐藏的区块在浏览器页内查找命中或通过锚点链接跳转时会自动展开,浏览器会自己移除这个属性值。作者提醒这个特性还很新,只跟浏览器自带搜索配合得好,屏幕阅读器的搜索实现就不太行了。

更多原生表单元素:颜色选择器(input type=”color”)、日期选择器、range 滑块、meter 和 progress。这一节挂了最重的警告:「其中一些元素感觉相当未完成」,浏览器默认样式差异极大、无障碍体验很差,「要非常小心地使用,坑很多」,他希望未来几年表单元素能得到更多关照。

datalist:原生自动补全建议,不需要下拉库。同样带警告:跨输入类型的支持仍相当零碎,浏览器实现存在若干问题,他建议读者参考 Adrian Roselli 的《Under-Engineered Comboboxen》,甚至「现阶段干脆先别用,观察未来几年会不会改善」。

整个页面的基调因此是双重的:一方面炫耀标准的进步,一方面反复提醒规范落地和无障碍之间的巨大落差。

HN 评论精华

这条帖子拿到 1004 分、181 条评论,是本期讨论最热的一条。主线并不是「HTML 真棒」的一片叫好,而是分成三股:datalist 到底能不能用(最高票的批评帖甚至一度被标记为 dead 又被 vouch 救回)、无 JavaScript / 反 SPA 的立场表达,以及一个意外的话题——LLM 完全不会写这些新标准。