跳到正文

折叠面板

Accordion

点标题展开内容,同一组里通常只开一个,标题一直在。

  • 又叫:
  • 手风琴
  • 展开收起
  • 折叠展开
  • collapsible panel
  • collapse
  • disclosure
展厅
布局与结构
形态
固定舞台
播放
手动触发
关键词
纯 CSS / 有状态 / 会引发重排 / 键盘可用 / 可以直接用
↕ 自己动手试试
L-06形态 固定舞台播放 手动触发Accordion

参数工作台

复制给 AI

随参数实时更新

做一个折叠面板(accordion):同一组里同时只展开一项(单开手风琴),展开和收起时长 260ms,缓动 cubic-bezier(0.22, 1, 0.36, 1);标题用真正的 <button> 并带 aria-expanded,箭头图标展开时旋转 180°。动画不要碰 height: auto(浏览器不会过渡),用 grid-template-rows: 0fr → 1fr 配一层 overflow: hidden。系统开启「减少动态效果」时时长设成 0。

什么时候用

  • FAQ、帮助文档,一屏要放十几条问题
  • 表单里的高级设置,默认收起,需要的人再展开
  • 移动端详情页,把长说明折起来省空间

适用场景:表单 / 页面 / 列表

推荐取值

展开时长
200–300ms
缓动
ease-out / cubic-bezier(0.22, 1, 0.36, 1)
标题高度
40–48px
展开动画
grid-template-rows: 0fr → 1fr(配内层 overflow: hidden)
图标
同一枚箭头旋转 180°

别搞混

  • 和「选项卡 tabs」的区别

    tabs 是对内容做横向切换,切走的那块完全消失;手风琴所有标题始终纵向排在一起,展开的内容还在标题下面,只是把下面的内容推下去。

  • 和「弹层 popover」的区别

    弹层浮在页面上方、会遮住别的内容;手风琴在文档流里撑开,不做遮挡。

容易踩的坑

  • 不要对 height: auto 做过渡,浏览器不会对 auto 补间动画;改用 grid-template-rows: 0fr → 1fr,或先量出内容高度再写像素值
  • 折叠部分要包一层 overflow: hidden,否则收起来时文字还露在外面
  • 标题要用真正的 button(或 details/summary),并带上 aria-expanded,键盘和读屏才用得了
  • 一旦允许多项同时展开,面板就成了长列表,这种场景该换 tabs 或分页

无障碍降级

prefers-reduced-motion: reduce 时把展开时长设为 0,内容直接显隐,箭头也不旋转。

关键词

  • accordion
  • collapsible
  • aria-expanded
  • details/summary
  • grid-template-rows: 0fr
  • disclosure pattern

参考

相关展品