F2.16.3undefined overflow breaks or occludes layout设计

未定义的溢出行为会导致布局被撑破或遮挡相邻元素

别名: 撑破布局 · overflow visible · 整页横滑

概念解释

一条没有空格的 URL 丢进评论,整页被撑出横向滚动条,底栏跟着跑出视野。标签 Supercalifragilistic 放进 80 px 的芯片行,邻芯片被盖住或挤走。十行标题把卡片里的购买按钮顶到折线以下。没有溢出政策时,引擎走默认:很多元素是 overflow 可见,最小宽度跟着内容走——布局失去边界,不是「略丑」。

政策写清之后仍可能选错,但至少是一种可争论的选择。未定义是事故。

机制

盒模型里 min-width: auto 让不可断字符串成为地板,百分比列和网格分数都打不赢这根棍子,于是整页变宽。overflow: visible 则让多出来的墨水画到邻格上,邻格还在,只是被盖住,点到的可能是上面那层。两种失败:撑破(文档变宽、出现页级横滑)和遮挡(结构还在,命中测试乱了)。长折行是第三种:外框被合法撑高,按钮掉出卡片或折线,任务对象还在 DOM 里,已经不在决策视野里。

边界

有意的溢出是设计:徽章探出头像一角、下拉盖住下面的表。那要写明谁可以盖谁、盖住的是否还可点。画布、地图本来就会画出视口,靠平移而不是靠「不溢出」。代码编辑器整页横滑有时是功能。事故专指展示性布局在没有声明的情况下被内容改写了边界。

怎么落地

  • 给可能接到用户串、URL、代码的槽加上 min-width: 0(或等价)和一条已命名的溢出政策,打断「内容说了算」的地板。
  • 页级禁止出现横向滚动条,除非该页就是宽表且有可见的横向滚动提示。
  • 验证:向每个槽注入一根 80 字符无空格串,再贴一段 20 行。任何页级横滑、盖住邻控件、主按钮被顶出卡片或折线,都是未定义溢出。对失败槽补上政策后再灌一次,邻元素应仍可完整看见、完整点到。用真实 URL 和一段用户粘贴的日志各测一遍,不要只用 lorem。

延伸

  • 同组F2.16.1 布局需要用极端长度的内容(超长标题、空值)测试而非典型样例 · F2.16.2 内容溢出容器时的处理方式(截断、换行、滚动)需要显式定义 · F2.16.4 真实数据的长度分布往往比设计稿中的占位文本更极端
  • 相邻F4.10 文本截断与省略 · F2.08 卡片式布局 · F2.11 流式与自适应布局
  • 站内检索min-width auto · overflow visible · horizontal scrollbar · unbreakable string

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/F2.16.3