自适应行为无法用静态标注表达
别名: 重排手记 · 换行阈值 · 容器查询 · 静态标注失效
概念解释
无法标注的自适应行为(unannotatable adaptive behavior)指那些随输入尺寸和内容而切换布局体制的变化:哪一行在什么宽度换行、哪几个子项掉进溢出菜单、容器查询触发后主从栏如何叠放。一张标好尺寸的静帧是这个函数在某一点的取值,不是函数本身。从静帧恢复不出「窄到什么程度改叠放」。
它和「把 13px 改写成 hug/fill」不是同一件事。约束方程仍描述一种布局体制内部怎么解;体制切换——从三列变成一列、从并排变成折行——是另一套规则,静帧上没有位置可写。
机制
自适应行为是分段函数。每一段内部可以用约束求解;段与段之间的切换条件(宽度阈值、内容是否溢出、容器而非视口的查询)是额外的输入。静帧标注只能给当前段的一组解,切不到下一段的条件。实现者看见的是「这一帧里三列等宽」,读不出「列宽不够一个最小单元时改为纵向堆叠,再不够则第三列进 More」。
换行、重排、容器查询之所以特别,是因为结果依赖尚未画出来的输入:未来的文案长度、用户的分栏宽度、嵌入卡片的宿主。原型或行为说明把函数写出来——触发条件、切换后的结构、失败时的退路。没有这层,实现只能把静帧里的结构当成唯一结构,于是在真实宽度上溢出、截断或自行发明一档。
边界
始终只有一档布局、内容长度被产品保证不会触线的界面,没有体制切换,静帧够用。纯缩放(整页按比例放大、不断行不改结构)也不是自适应行为,标倍率即可。服务端渲染且布局在请求时已选定、客户端不再重排的页面,切换发生在服务端,标注对象变成「请求参数对应哪一档」,而不是运行时重排。极端的艺术排版若故意在所有宽度上保持同一构图,自适应被产品否定,行为说明写的是「禁止折行」,不是折行规则。
怎么落地
- 凡会出现折行、改叠放、子项迁入溢出槽的组件,另写行为说明:触发条件、切换后谁还在主路径、溢出项去哪。
- 用可拖宽度的原型或录屏覆盖至少两档体制,而不是只导出当前画板。
- 容器查询按容器写条件,不按设备名写条件;同一组件嵌进侧栏和主栏必须能看出两套结果。
- 验证:藏起原型,只留静帧和尺寸标注,问实现者「在哪一宽度这一行会折、哪一个子项会消失」。答不出或两个人答成两种结构,说明行为没有被交付。