固定高度容器是主要失败点
别名: 固定高度 · line-clamp · 卡片截断
概念解释
放大后丢字、盒子里再套一层滚动,多半不是「字太大」,而是容器把高度写成了常数。卡片、选项卡、对话气泡、粘滞底栏按 100% 下的三行去定 height / max-height,字一放大,行高×行数超过盒子,多出的内容只能被剪掉或在盒子内部再滚。固定高度是这类失败里最常见的结构原因。
机制
字号是变量,高度若是常量,乘积关系在放大后必然破裂。height: 120px、绝对定位的顶底钉死、flex 子项 overflow: hidden 且不允许长高,都会在检查点上先坏。line-clamp: 3 把行数钉死,效果等价于按行数固定高度——100% 时像摘要,200% 时可能把关键句夹断。
内部再出现滚动条,看起来像「内容还在」,对放大用户却是嵌套滚动:整页已经在纵滑,盒子里还要再滑,焦点和阅读起点容易丢。这和整页被撑出横向滚动不同,根子仍是盒子不肯长高。min-height 给的是下限,盒子仍可随内容生长;出问题的是把高度当成设计稿上的那条死线。
怎么研究
在样式里检索 height、max-height、line-clamp、钉死的绝对定位块,放大到 200% 后逐个截图:裁切、内部滚动、还是成功长高。对比把 height 改成 min-height 前后的丢失节点数。
自变量:高度约束类型(固定 / 最大 / 行数钳制 / 无)、内容长度。 因变量:裁切发生与否、内部滚动出现与否、完整文本是否仍可见。
虚拟列表按行高回收 DOM,放大后行高变化会露洞或重叠,要单独记,不要只当「截断」。
边界
视频播放器、地图、画布有固有宽高比,高度可以锁,文字应放在可长高的外层,不要写进画布像素里。单行输入框、工具条的高度可以有上限,但值与标签不能因此被吃掉。聊天窗口常见内部滚动,那是区域语义,前提是当前消息全文仍在该滚动区域内完整可读。更高倍数的重排可能要求拆掉卡片栅格本身,那是另一组布局策略,不能用来给检查点上的固定高度开脱。
怎么落地
- 用
min-height代替height去保卡片节奏;内容变长时盒子必须能长高。 - 不要用行数钳制承载法律声明、错误全文、价格与库存这类不能丢的句子。
- 绝对定位的粘滞栏按内容定高度,或给主栏留出随字号变的
padding,避免正文被栏裁切。 - 验证:文本 200%,每一张卡、每一个 tab 面板、每一条提示,完整句子仍在且不必在盒子里二次纵滑才能读完。把可疑的
height改成min-height后截图对照,裁切消失即坐实原因。