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。