列宽应由内容类型决定
别名: 列宽 · 表格列宽 · 内容定宽 · column sizing
概念解释
列宽不是把剩余宽度拿来均分。按内容类型定宽(content-typed column width)是让每一列的宽度服从它要完成的知觉任务:短码列只要放得下最宽的合法码,金额列跟数量级走,名称列吃弹性空间,长描述列不该为了「撑满」把短码列挤到换行。均分列宽看起来整齐,却会让不该换行的字段折开、该展开的字段被截断,比较和识别一起坏掉。
机制
列宽决定一行里哪些字符能同时在场。标识码、状态、日期的区分度往往在固定的字符预算内,列一窄于这个预算就会换行或截断,对象身份在垂直方向被拆成两截,行高被个别字段劫持。金额和计数需要为最大量级加符号留空,否则右齐对位会被溢出的星号或换行打断。名称和标题是弹性字段,宽度随视口增长才有意义。把所有列设成相同比例,等于假装这些任务需要同样多的水平分辨率。表头文字常常比单元格长(「最近一次同步时间」对「3 分钟前」),若列宽跟表头走,单元格会留下大片空,比较密度下降;若只跟当前页样本走,翻页后更长的值又会撑破。真正该跟的是该列内容类型的合法范围,而不是这一屏碰巧出现的字符串。
怎么研究
用同一张表比较三种定宽策略:均分、跟当前页最长单元格、按字段类型设最小最大宽。任务包括识别指定行、比较一列数值、以及在翻到含更长值的页之后重复。自变量:定宽策略、视口宽度、样本是否覆盖极值。因变量:非预期换行次数、截断导致的识别错误、为看全单元格而做的横向滚动。记录「哪一列在抢行高」,往往能直接指向定宽错误的那一列。
边界
用户可拖拽调列宽的专业表里,初始宽度仍应按类型给,但之后以用户设置为准,不要在刷新时抢回去。极窄视口上类型约束会全体无法满足,那是该重构表格而不是继续挤列宽。图标列、复选列有固定的控件尺寸,不应参与弹性分配。按类型定宽依赖你知道合法范围;自由文本且无上限时,只能给弹性列加截断规则,而不是假装存在一个「刚好」的宽度。
怎么落地
- 把列分成固定、弹性、上限三类:码与控件固定,名称弹性,描述设上限并截断或折到展开行。
- 用该字段的合法极值(最长库存量、最长人名、完整日期格式)测最小宽度,而不是用第一页的样本。
- 表头过长时缩短表头或允许表头换行,不要为迁就表头把整列拉宽。
- 验证:灌入极值数据和短数据各一页,看有无列被短数据撑出空洞、被极值数据逼出换行。任何一列的换行若改变了行高,就重新定它的类型宽度。