最推荐用组合实现faq,因其原生支持展开收起、键盘操作和无障碍访问;本质是定义列表,缺乏交互能力,需js补足且语义不符。

用<dl></dl>做FAQ不是最推荐的做法,它适合术语解释类内容,比如“HTML:超文本标记语言”,但不适合问答交互场景。真正语义清晰、可访问、支持展开收起的FAQ结构,应该用<details><summary></summary></details>组合。
为什么<dl></dl>不太适合FAQ
<dl></dl>本质是“定义列表”,<dt></dt>代表术语(如“缓存是什么?”),<dd></dd>是其解释。但它没有交互能力,不能默认折叠,也不被屏幕阅读器识别为可切换的问题项。用户点击后无法收起,对移动端也不友好。
-
<dl></dl>不支持原生展开/收起,需额外JS控制显隐 - 缺少键盘操作支持(空格/回车无法切换)
- SEO和辅助技术中,它传递的是“术语-定义”关系,而非“问题-答案”逻辑
更合适的FAQ写法:<details><summary></summary></details>
这是HTML5原生支持的语义化方案,无需JS就能工作,自带焦点、键盘响应和无障碍属性。
- 每个
<details></details>代表一个FAQ条目,建议加id便于URL锚点跳转(如id="q1") -
<summary></summary>自动获得role="button",支持空格/回车触发切换 - 内部可放任意HTML内容(段落、链接、代码块等),比
<dd></dd>更灵活
示例:
网页加载慢怎么办?
检查图片是否过大,启用浏览器缓存,减少HTTP请求数量。
如果必须用<dl></dl>,怎么让它接近FAQ效果
仅限简单静态页面或兼容老旧系统时降级使用,需配合少量CSS和JS补足功能:
- 给每个
<dt></dt>加tabindex="0"并监听keydown事件模拟按钮行为 - 用
aria-expanded和hidden手动管理显隐状态 - 避免嵌套
<dl></dl>——FAQ通常不需要多层术语嵌套
注意:<dl></dl>里<dt></dt>和<dd></dd>必须成对出现,且<dd></dd>不能直接放在<dl></dl>外。
小结:选对标签,不只是语法问题
FAQ的核心需求是“可折叠、可聚焦、可跳转、可读取”。<details><summary></summary></details>天然满足;<dl></dl>需要大量修补才能勉强达标。2026年主流浏览器已全面支持<details></details>,连iOS Safari和Android Chrome都无兼容性顾虑。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











