火次果
火次果

暂无菜单项

首页/文章/技术文章/web前端/HTML5/
打开 MD 链接

Grid 项重叠但不压字:收缩写法

发布于 1周前
7

容器收缩时让若干个网格项叠在一起,同时保证文字不被压掉,容易走偏的方向是给网格项加负 margin。挤压出来的重叠会破坏轨道计算,文字也会被相邻项盖住。正确做法是把重叠交给单元格,把可见性交给内容层。

显示文本内容的黑色显示器,用于说明网格项重叠时的文本可见性
重叠由单元格共享产生,不由外边距挤压产生

写法

.stack {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
}

.stack > .item {
  grid-area: 1 / 1;          /* 共用同一个单元格 */
  display: flex;
  min-width: 0;
  z-index: 1;
}

.stack > .item:nth-child(2) { z-index: 2; }

.item > .label {
  min-width: 0;
  overflow: visible;
}

grid-area: 1 / 1 让所有项落在同一行同一列,重叠由布局本身产生,不需要负 margin。项内的内容层用 flex 排布,叠放顺序交给 z-index。

min-width: 0 的作用

flex 子项的默认最小宽度是内容宽度,容器收缩时子项不肯让位,文字被挤出可视区。显式写 min-width: 0 之后,子项允许小于内容宽度,收缩交由容器决定,文字块仍按自身规则排布并保持完整。

两类错误做法

  1. 用负 margin 制造重叠。轨道尺寸与间隙被改写,断点切换后位置不可预测,相邻项的文字互相遮挡。
  2. 用 overflow: hidden 或 white-space: nowrap 强行收口。文字被截断或产生省略号,与「保持完整可见」的诉求相反。

检查清单

  • 重叠来自共享单元格,不是外边距;
  • 内容层带 min-width: 0;
  • 叠放顺序用 z-index 显式声明;
  • 容器收缩到最小断点时文字仍完整。

常见问题(FAQ)

多个网格项怎么放进同一格?
给每一项指定相同的 grid-area,例如 1 / 1,几项就落在同一行同一列,重叠由布局产生。
为什么文字会被挤出容器?
flex 子项默认最小宽度为内容宽度,容器收缩时不让位。给子项设置 min-width: 0,允许它小于内容宽度后再由容器分配空间。
负 margin 做重叠有什么问题?
改变了网格轨道的计算结果,断点切换后位置不可预测,且相邻项会互相遮挡文字,属于结构性破坏。
叠放顺序如何控制?
用 z-index 显式声明。同一网格单元格内的元素按文档顺序堆叠,指定 z-index 后顺序确定。
文字很长时怎么处理?
保持 overflow: visible 让文字完整显示,或改为允许换行。截断与省略号与保持完整的目标相反,不宜采用。
CSS Grid全宽布局弹性布局网格布局页头页脚
支持作者
如果这篇内容对你有帮助,可以请作者喝杯咖啡
0 点赞
0 收藏
分享
0 讨论
反馈
0 / 600
细中粗
0 讨论
热门最新
总结
暂无总结
嗨,下午好!
所有的成功,都源自一个勇敢的开始
创作
社区
购物
会员
近期热门

暂无数据

火次果
火次果
首页
资迅中心
小店
AI导航
社区
所有的成功,都源自一个勇敢的开始
不辜负每一个勇敢的开始
关于FAQ协议
火次果 © 2026鲁ICP备2025164830号-1