HTML5 新特性总结:2026 年还有哪些被低估的标签

晁铭
晁铭 正式会员正式会员认证极客认证极客
发布于 2026-10-07 00:10 ·2 浏览 ·3 回复
本文转载自 Clara轻量论坛系统,原文地址:https://www.leleweb.cn/thread-731.html
转载请注明出处,版权归原作者所有。
他们都看过 1 人浏览过
CLARA轻量论坛系统

全部回复 3

做个坏人啦
做个坏人啦 正式会员正式会员认证极客认证极客 1楼 2026-10-07 00:13

这份清单方向很对,我再补三个常被漏掉的原生能力:popover、<template>、<search>,基本能再砍掉一批 UI 库依赖。

popover 属性是最被低估的一个。给任意元素加 popover,再用 popovertarget 绑触发按钮,就自带 Esc 关闭、点击外部关闭(light dismiss)、顶层渲染不用管 z-index,tooltip / 下拉菜单 / 气泡全能用它顶。注意它默认是 display: none,写样式要用 :popover-open 这个伪类;定位再配合 CSS Anchor Positioning,浮动层就不用手算坐标了。

<template> 的坑在于它惰性——内容不参与 DOM 渲染,所以你 innerHTML 拿不到东西,必须 tpl.content.cloneNode(true) 克隆。做重复列表模板或者配合 <slot> 写 Web Component 影子 DOM 时非常省事。

<search> 是 2023 年新增的语义标签,本质是个 landmark,把搜索表单包一层,无障碍工具直接能定位到,比 <div role="search"> 干净。

回到你帖子里那几块,提醒两个兼容点:<details name> 互斥是 2024 年才进基线的(Chrome 120+ / Safari 17.2+ / Firefox 130+),站点还有老设备访问的话得监听 toggle 事件手动收起同组兄弟兜底;<dialog> 的 ::backdrop 想做淡入动画,光写 transition 不生效,要配 @starting-style 和 transition-behavior: allow-discrete。另外 <datalist> 在 iOS Safari 上退化成下拉选择器、用户没法自由输入,做搜索建议还是自己实现。

顺带一提,你第三步 <output> 的示例代码好像被截断了,要不要补全一下。

最后补个容易混的:<progress> 表示任务进度(不确定或确定进度都行),<meter> 表示已知范围内的标量值(磁盘占用、评分),语义用错无障碍工具念出来会很怪。

zero
zero 见习用户见习用户 #475 2楼 2026-10-07 00:18
做个坏人啦:这份清单方向很对,我再补三个常被漏掉的原生能力:`popover`、``、``,基本能再砍掉一批 UI 库依赖。 **`popover` 属性**是最被低估的…

这三个补得比我原文值钱,尤其 popover 和 @starting-style 那两条,属于「不知道就白引一个 UI 库」

zjlxcf
zjlxcf 正式会员正式会员认证极客认证极客 #476 3楼 2026-10-07 00:21
zero:这三个补得比我原文值钱,尤其 `popover` 和 `@starting-style` 那两条,属于「不知道就白引一个 UI 库」

对,这两条真正卡人的不是写不写得出来,而是「不写就静默失效」——动画不播、控制台也不报错,你排查半天还以为是自己哪个 UI 库在打架。

把 @starting-style 那套完整版补一下,关键是退出动画必须把 overlay 和 display 一起放进 transition 并加 allow-discrete,否则元素还在 top layer 里就已经 display:none 了,表现就是入场看得见、退场直接闪没:

dialog, [popover] {
  opacity: 0;
  translate: 0 -8px;
  transition: opacity .2s, translate .2s,
              overlay .2s allow-discrete,
              display .2s allow-discrete;
}
dialog[open], :popover-open {
  opacity: 1;
  translate: 0;
  @starting-style { opacity: 0; translate: 0 -8px; }
}

还有个更容易踩的:top layer 的层叠顺序不吃 z-index,谁后 showModal() / showPopover() 谁在上面。所以「弹窗里再开一个 popover 结果被背景盖住」这种问题,改 z-index 是白改,得调打开顺序,或者给底层那个改成 popover="manual" 自己管显示隐藏。::backdrop 想加淡入淡出是同一套写法,把 dialog::backdrop 当普通元素写 @starting-style 就行,不用单独记。

好消息是这套东西天然渐进增强——老浏览器最多是没动画,功能一点不坏,所以别费劲 feature detect 包一层,直接写,能跑动画的自动跑。真要兜底就 CSS.supports('transition-behavior','allow-discrete') 判断一下,降级成瞬时切换。