如何解决Grid布局FAQ项展开后同行单元格高度异常问题?
修复Grid布局FAQ展开时同行单元格被拉伸的问题
问题根源
你的Grid布局里设置了grid-template-rows: repeat(2, 1fr),同时Grid容器默认的align-items: stretch属性会强制同一行的所有单元格高度匹配该行最高的元素——哪怕其他单元格的内容处于收起状态,也会被拉伸到相同高度。
解决方案1:修正Grid容器核心属性
直接修改.faq__container的样式,让单元格高度由自身内容决定,不再强制拉伸:
.faq__container { display: grid; grid-template-columns: repeat(2, 1fr); /* 删掉固定行高设置,让行高自动适应内容 */ grid-row-gap: 16px; grid-column-gap: 24px; align-items: start; /* 关键:让单元格顶部对齐,高度随内容变化 */ }
解决方案2:简化折叠逻辑的CSS与JS(可选优化)
当前的.content和.expanded类存在样式重复,可以合并成单一状态控制,同时简化JS逻辑:
优化后的CSS
/* 保留基础折叠内容样式 */ .content { padding: 0; background-color: white; max-height: 0; overflow: hidden; transition: max-height 0.2s ease-out; max-width: 535px; font-family: 'SF Pro Text'; font-style: normal; font-weight: 400; font-size: 15px; line-height: 133%; } /* 用.active类控制展开状态,无需单独的.expanded类 */ .content.active { max-height: 1000px; /* 用足够大的值替代scrollHeight计算,过渡效果依然生效 */ padding-top: 16px; /* 展开时添加顶部内边距,区分标题与内容 */ }
简化后的JavaScript
document.querySelectorAll(".collapsible").forEach(btn => { btn.addEventListener("click", function() { const content = this.parentElement.nextElementSibling; // 切换内容的展开/收起状态 content.classList.toggle("active"); // 切换按钮的图标状态 this.classList.toggle("active"); }); });
额外优化:提升点击体验
当前按钮仅为右侧图标区域,可让整个标题行都支持点击:
.faq_item__title_container { display: flex; align-items: center; justify-content: space-between; cursor: pointer; /* 显示点击指针 */ } .collapsible { border: none; cursor: pointer; /* 移除按钮继承的字体样式,避免和标题冲突 */ font-family: unset; font-size: unset; font-weight: unset; color: unset; }
内容的提问来源于stack exchange,提问作者Clarify
相关产品推荐
相关产品推荐

