J2.02.3fixed-height container设计研究

固定高度容器是主要失败点

别名: 固定高度 · line-clamp · 卡片截断

概念解释

放大后丢字、盒子里再套一层滚动,多半不是「字太大」,而是容器把高度写成了常数。卡片、选项卡、对话气泡、粘滞底栏按 100% 下的三行去定 height / max-height,字一放大,行高×行数超过盒子,多出的内容只能被剪掉或在盒子内部再滚。固定高度是这类失败里最常见的结构原因。

机制

字号是变量,高度若是常量,乘积关系在放大后必然破裂。height: 120px、绝对定位的顶底钉死、flex 子项 overflow: hidden 且不允许长高,都会在检查点上先坏。line-clamp: 3 把行数钉死,效果等价于按行数固定高度——100% 时像摘要,200% 时可能把关键句夹断。

内部再出现滚动条,看起来像「内容还在」,对放大用户却是嵌套滚动:整页已经在纵滑,盒子里还要再滑,焦点和阅读起点容易丢。这和整页被撑出横向滚动不同,根子仍是盒子不肯长高。min-height 给的是下限,盒子仍可随内容生长;出问题的是把高度当成设计稿上的那条死线。

怎么研究

在样式里检索 heightmax-heightline-clamp、钉死的绝对定位块,放大到 200% 后逐个截图:裁切、内部滚动、还是成功长高。对比把 height 改成 min-height 前后的丢失节点数。

自变量:高度约束类型(固定 / 最大 / 行数钳制 / 无)、内容长度。 因变量:裁切发生与否、内部滚动出现与否、完整文本是否仍可见。

虚拟列表按行高回收 DOM,放大后行高变化会露洞或重叠,要单独记,不要只当「截断」。

边界

视频播放器、地图、画布有固有宽高比,高度可以锁,文字应放在可长高的外层,不要写进画布像素里。单行输入框、工具条的高度可以有上限,但值与标签不能因此被吃掉。聊天窗口常见内部滚动,那是区域语义,前提是当前消息全文仍在该滚动区域内完整可读。更高倍数的重排可能要求拆掉卡片栅格本身,那是另一组布局策略,不能用来给检查点上的固定高度开脱。

怎么落地

  • min-height 代替 height 去保卡片节奏;内容变长时盒子必须能长高。
  • 不要用行数钳制承载法律声明、错误全文、价格与库存这类不能丢的句子。
  • 绝对定位的粘滞栏按内容定高度,或给主栏留出随字号变的 padding,避免正文被栏裁切。
  • 验证:文本 200%,每一张卡、每一个 tab 面板、每一条提示,完整句子仍在且不必在盒子里二次纵滑才能读完。把可疑的 height 改成 min-height 后截图对照,裁切消失即坐实原因。

延伸

  • 同组J2.02.1 放大后内容不得丢失或截断 · J2.02.2 放大后不应产生双向滚动
  • 相邻J2.11 文本缩放与重排 · J2.07 低视力与屏幕放大
  • 站内检索min-height · line-clamp · fixed-height container

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J2.02.3