0

0

HTML5details标签怎么实现折叠效果_展开收起功能教程【方法】

雪夜

雪夜

发布时间:2026-01-02 13:58:02

|

463人浏览过

|

来源于php中文网

原创

<details>标签原生支持折叠展开,无需JavaScript;<summary>必须为首个子元素,用::before伪元素自定义箭头最兼容;JS应操作open属性并监听toggle事件;IE不支持需polyfill,无障碍需保留语义与焦点。

html5details标签怎么实现折叠效果_展开收起功能教程【方法】

details 标签本身就能实现折叠,不需要 JS

直接用 <details><summary> 就能完成基础展开/收起,浏览器原生支持,无需额外脚本。它不是“需要教程才能用”的功能,而是开箱即用的语义化 HTML 元素。

常见错误是手动加 onclick 或监听 click 事件去控制 display,这反而破坏了可访问性(如屏幕阅读器无法识别状态)和语义结构。

  • <details> 默认收起,open 属性可设为默认展开
  • <summary> 必须是 <details> 的第一个子元素,否则部分浏览器不渲染箭头或不响应点击
  • 点击 <summary> 文字区域即可切换状态,包括空格、图标等内部内容

如何自定义 summary 的箭头和样式

浏览器对 <summary> 的默认箭头(三角形)使用伪元素 ::marker 或私有伪类(如 Chrome 的 ::-webkit-details-marker)控制,不能用普通 CSS 覆盖所有场景。必须重置并手动添加图标才可靠。

<style>
details > summary {
  list-style: none; /* 移除原生箭头 */
}
details > summary::before {
  content: "▶ ";
  margin-right: 4px;
  font-size: 0.9em;
}
details[open] > summary::before {
  content: "▼ ";
}
</style>

注意:::marker 在部分旧版 Safari 中不生效,::-webkit-details-marker 仅限 WebKit 内核;统一用 ::before 是最兼容的方案。

立即学习前端免费学习笔记(深入)”;

Otter.ai
Otter.ai

一个自动的会议记录和笔记工具,会议内容生成和实时转录

下载

JavaScript 控制 open 状态时要注意什么

虽然原生行为已足够,但若需程序化控制(比如按钮触发、表单提交后自动展开错误项),应操作 open 属性而非 class 或 style。

  • element.open = trueelement.setAttribute('open', ''),不要写 element.style.display = 'block'
  • 监听状态变化应使用 toggle 事件(非 click),它在用户交互或 JS 修改 open 后都会触发
  • toggle 事件没有取消默认行为的机制,也不需要 —— 它只是通知状态已变
const detailsEl = document.querySelector('details');
detailsEl.addEventListener('toggle', () => {
  console.log('当前状态:', detailsEl.open);
});

兼容性和无障碍要点容易被忽略

IE 完全不支持 <details>,Edge 12–18 支持但无动画;现代项目若需兼容 IE,必须用 polyfill(如 details-polyfill)或降级为手写 JS 折叠逻辑。

无障碍方面:<details> 自动处理 aria-expanded 和焦点管理,但如果你替换了 <summary> 内容为按钮或图标,要确保保留 role="button" 和键盘可聚焦(tabindex="0"),否则键盘用户无法操作。

真正复杂的地方不在“怎么写”,而在于「要不要用」—— 如果需要动画过渡、嵌套折叠、或服务端渲染时动态控制初始状态,<details> 的能力就受限了,这时候该换 React/Angular 的组件方案,而不是硬塞 CSS 动画进去。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

1064

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

843

2023.11.06

edge是什么浏览器
edge是什么浏览器

Edge是一款由Microsoft开发的网页浏览器,是Windows 10操作系统中默认的浏览器,其目标是提供更快、更安全、更现代化的浏览器体验。本专题为大家提供edge浏览器相关的文章、下载、课程内容,供大家免费下载体验。

1739

2023.08.21

IE浏览器自动跳转EDGE如何恢复
IE浏览器自动跳转EDGE如何恢复

ie浏览器自动跳转edge的解决办法:1、更改默认浏览器设置;2、阻止edge浏览器的自动跳转;3、更改超链接的默认打开方式;4、禁用“快速网页查看器”;5、卸载edge浏览器;6、检查第三方插件或应用程序等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

398

2024.03.05

如何解决Edge打开但没有标题的问题
如何解决Edge打开但没有标题的问题

若 Microsoft Edge 浏览器打开后无标题(窗口空白或标题栏缺失),可尝试以下方法解决: 重启 Edge:关闭所有窗口,重新启动浏览器。 重置窗口布局:右击任务栏 Edge 图标 → 选择「最大化」或「还原」。 禁用扩展:进入 edge://extensions 临时关闭插件测试。 重置浏览器设置:前往 edge://settings/reset 恢复默认配置。 更新或重装 Edge:检查最新版本,或通过控制面板修复

1038

2025.04.24

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

891

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

32

2025.12.06

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 43万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号