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

MUI Grid双列布局卡片点击展开时相邻卡片同步拉伸问题

问题原因

这是Flex布局的默认拉伸特性+现有样式设置共同导致的,和JS交互逻辑无关:

  • MUI Grid容器默认采用Flex布局,同一行的Grid子项默认align-items: stretch,会自动拉伸到和当前行最高的子项保持一致高度
  • 你给Card组件设置了height: 100%,会自动撑满父级Grid item的全部高度
  • 点击卡片展开时,当前卡片内容变高把所在Grid item撑高,同排相邻的Grid item被Flex规则拉伸到同等高度,内部的Card因为height:100%也跟着被拉长,就出现了同步变高的问题。
解决方法

改动最小的方案是给每个包裹Card的Grid item添加alignSelf: "start"属性,让Grid子项高度只跟随自身内容决定,不被同排其他元素的高度拉伸:

// 找到ExamoCard组件最外层的Grid item,添加sx配置
<Grid 
  item 
  xs={12} 
  lg={6}
  sx={{ alignSelf: "start" }} // 新增这一行即可
>
  <Card
    // 原有Card属性全部保留,不需要删除height:100%配置
  >
  {/* 原有卡片内容保持不变 */}
  </Card>
</Grid>

这个方案不需要改动现有展开逻辑,卡片收起状态下如果存在微小高度差,给Card加个固定minHeight就能保证排版整齐。
如果不需要收起状态下同排卡片强制等高,也可以直接删除Card样式里的height: "100%",同样能解决相邻卡片被拉伸的问题。

注意这个问题是CSS布局特性导致的,不需要写event.preventDefault()、拦截事件冒泡之类的JS逻辑,调整样式即可生效。另外你当前把expandedId状态写在每个ExamoCard组件内部、让卡片独立维护展开状态的写法是正常可用的,不需要额外把状态上提到父组件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:15:42