HTML 新标签 到底有什么用?

HTML1周前发布 admin
147 0

一、先说结论

<search> 是 HTML 新增的一个语义化容器标签,专门用来包裹页面或应用中”与搜索、筛选功能相关”的内容——通常就是一个搜索框、筛选控件组,或者两者的组合。它本身不参与展示搜索结果,只负责标记”这一块是搜索/筛选区域”。

如果你已经很熟悉 <header><nav><footer> 这类语义化标签,那么理解 <search> 会非常轻松:它属于同一个家族,只是专门服务于”搜索”这个场景。

二、它解决了什么问题

<search> 出现之前,前端开发者想要标记一个搜索区域,通常有两种做法:

  1. 用一个普通的 <div> 包裹搜索表单,纯靠 class 命名(比如 class="search-box")表达语义,但浏览器和屏幕阅读器完全看不懂这层含义;
  2. <form> 元素手动加上 role="search",让辅助技术知道”这是一个搜索表单”。

第二种做法能用,但存在几个局限:

  • 只能用在 <form> 上,如果搜索功能不是靠表单实现的(比如纯 JS 拼出来的搜索交互块),就没法自然地加这个角色;
  • 语义完全依赖开发者主动补一个 ARIA 属性,很容易被遗漏;
  • 从标签本身完全看不出”这里是搜索区域”,可读性和可维护性都打折扣。

<search> 元素的引入,本质上是把这层语义从”靠属性模拟”变成了”原生标签自带”。

三、<search> 具体是做什么的

按照标准定义,<search> 是一个容器,用来包裹文档或应用中那些带有表单控件、或者其他与”执行搜索或筛选操作”相关的内容。这里的”搜索”范围其实很宽泛,可以是:

  • 针对整个网站或应用的全局搜索;
  • 针对当前页面/文档内容的过滤查找;
  • 针对整个互联网某个子集的搜索(比如搜索引擎首页本身)。

需要特别注意的一点是:<search> 不是用来展示搜索结果的。搜索结果依然应该放在页面的主体内容区域(比如 <main> 里),<search> 只负责包住”输入查询条件”这部分交互控件。不过,如果搜索框自带的”快速联想建议”下拉列表是搜索功能本身的一部分,那么把它嵌套在 <search> 内部是合适的。

<search> 元素在属性上非常”朴素”——它只支持全局属性,没有任何专属属性,这也符合语义化标签一贯的设计思路:结构和样式无关,专注表达含义。

四、和无障碍访问(Accessibility)的关系

<search> 最直接的价值,体现在无障碍访问层面。使用 <search> 包裹内容后,它会自动对应一个 search 的 ARIA landmark(地标)角色。

这意味着什么?屏幕阅读器用户可以通过”地标导航”功能,直接跳转到页面中的搜索区域,而不需要在一堆内容里逐个摸索。以前要达到同样的效果,需要手动给 <form> 加上 role="search";现在只要用 <search> 包一层,浏览器和辅助技术就能自动识别,不用再手写 ARIA 角色。

一个典型的写法大致是这样:

<header>
  <h1>电影网站</h1>
  <search>
    <form action="./search/">
      <label for="movie">查找电影</label>
      <input type="search" id="movie" name="q" />
      <button type="submit">搜索</button>
    </form>
  </search>
</header>

这里 <search> 是语义容器,负责声明”这一块是搜索区域”;里面的 <form> 才是真正负责提交查询请求的表单。两者分工明确,并不冲突。

五、和 <input type="search"> 是什么关系

这是很多人第一次看到 <search> 标签时容易混淆的地方——两者名字很像,但完全是两回事:

  • <input type="search"> 是一种表单控件类型,早在很多年前就已经被广泛支持,作用是渲染一个专门用于输入搜索关键词的文本框(在部分浏览器里会带有清除按钮等细节样式);
  • <search> 是一个语义容器标签,2023 年才被主流浏览器支持,作用是从结构层面标记”这一整块内容是搜索/筛选区域”。

换句话说,<input type="search"> 关心的是”这个输入框长什么样、怎么交互”,<search> 关心的是”这一整块内容在页面结构里扮演什么角色”。两者可以搭配使用,就像上面的示例代码那样:外层用 <search> 声明语义,内层用 <input type="search"> 承载实际的输入交互。

六、浏览器支持情况

<search> 元素目前已经进入 Baseline(网页平台”基线可用特性”)的 “Newly Available(新近可用)” 阶段,起始时间是 2023 年 10 月。主流浏览器的支持时间点大致集中在同一时期:Chrome、Edge 118(2023 年 10 月),Firefox 118(2023 年 9 月底),以及 Safari 17(2023 年 9 月)。也就是说,从 2023 年秋天开始,各大主流浏览器基本上都已经支持这个标签了。

不过需要提醒一点:对于还需要兼容比较老旧浏览器版本的项目,在正式大规模使用前,建议根据自己项目的目标用户群体,确认一下浏览器覆盖范围是否满足需求。好在即便某个旧浏览器不认识 <search> 标签,它也会被当作一个普通的无语义容器来解析,不会导致页面报错或布局崩溃,属于”渐进增强”友好型的标签。

七、什么时候该用它,什么时候不用

适合使用 <search> 的场景:

  • 网站头部/侧边栏的全站搜索框;
  • 电商网站的商品筛选区(价格区间、分类、品牌等筛选控件的集合);
  • 文档站点内的”站内搜索”或”本页查找”功能区块。

不适合用它的场景:

  • 展示搜索结果的列表区域——这部分应该用 <main><ul><section> 等更贴合”内容展示”语义的标签;
  • 与搜索完全无关的普通表单(比如登录表单、联系表单),套用 <search> 反而是语义误用。

八、小结

<search> 标签的意义,并不在于它带来了多么复杂的新功能——它做的事情很简单,就是把”这里是一个搜索/筛选区域”这件事,从过去依赖 class 命名或手动 ARIA 属性的”约定俗成”,变成了浏览器和辅助技术都能原生理解的”结构化语义”。

对于日常开发来说,把网站的搜索框、筛选控件组用 <search> 包一层,几乎没有任何额外成本,却能实实在在地提升页面的语义清晰度和无障碍体验。这也是近几年 HTML 标准演进的一个明显思路:不断补齐那些”大家早就在用、但一直没有对应原生标签”的常见 UI 模式。

© 版权声明

相关文章

暂无评论

none
暂无评论...