You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用transition-behavior: allow-discrete实现手风琴内容过渡遇阻求助

解决方案建议

方案1:正确结合 @starting-style 与 transition-behavior 修复打开动画

问题根源是元素从display:none切换到display:grid时,浏览器没有初始的0fr布局状态可过渡,导致打开动画无法触发。通过@starting-style显式定义展开状态的起始样式,就能让过渡生效:

.accordion-content {
  display: none;
  grid-template-rows: 0fr;
  overflow: hidden; /* 防止内容溢出 */
  transition: grid-template-rows 500ms, display 500ms allow-discrete;

  &[aria-hidden="false"] {
    display: grid;
    grid-template-rows: 1fr;
  }

  /* 为展开状态定义起始过渡样式 */
  @starting-style {
    &[aria-hidden="false"] {
      grid-template-rows: 0fr;
    }
  }
}

关键说明:

  • overflow: hidden 必须保留,否则内容在0fr状态下仍会显示
  • @starting-style 会告诉浏览器:当元素切换到aria-hidden="false"状态时,从grid-template-rows:0fr开始过渡到1fr
  • 此方案仅支持Chrome/Edge 115+、Safari 16.4+,Firefox暂不支持transition-behavior

方案2:兼容Firefox的无障碍优化方案

如果需要兼容Firefox,放弃display:none的离散过渡,改用visibility配合grid-template-rows,同时通过aria-hidden确保无障碍:

.accordion-content {
  display: grid;
  grid-template-rows: 0fr;
  visibility: hidden;
  overflow: hidden;
  transition: grid-template-rows 500ms, visibility 500ms;

  &[aria-hidden="false"] {
    grid-template-rows: 1fr;
    visibility: visible;
  }
}

关键说明:

  • visibility: hidden 的元素不会被键盘Tab键选中,解决无障碍问题
  • 动画全程保持display:grid,所以打开/关闭过渡都能正常触发
  • 完全兼容所有现代浏览器,包括Firefox

额外无障碍优化建议

  • 确保手风琴触发按钮绑定正确的aria-expanded属性,与内容的aria-hidden状态同步
  • 触发按钮应支持键盘回车/空格触发展开/关闭操作
  • 内容区域的aria-hidden必须与视觉状态严格一致,确保屏幕阅读器正确识别

内容的提问来源于stack exchange,提问作者Luca Detomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:50:10