mcpField
B
better-layout

better-layout

github.com/jakubkrehel设计与 UI9.0k31.9k 次安装3 天前更新
代码仓库

关于 better-layout

用于审查界面分组、对齐、间距和响应式结构的设计技能,也检查翻译扩展与 RTL 镜像。它要求基于可复现的布局问题提出发现,并按项目样式系统给出修复方向。

主要功能

  1. 01用间距组织内容分组
  2. 02让元素对齐共享边缘
  3. 03用逻辑属性支持 RTL
  4. 04检查响应式与翻译布局
  5. 05按严重程度报告问题

适用场景

  1. 01审查窄屏界面
  2. 02检查界面的 RTL 镜像
  3. 03查找文本扩展后的裁切

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jakubkrehel/skills --skill better-layout

安装后在 Claude Code 中输入/better-layout确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

grouping-and-alignment.md
spacing-and-adaptivity.md
agents/
openai.yaml

详细介绍

布局

此技能设定分组、对齐、间距和响应式结构,然后通过调整尺寸、翻译和镜像为 RTL,对这些结构进行压力测试。

所有修复都写入项目的样式系统。以下数值仅适用于项目没有间距刻度或密度系统的情况;否则请使用项目令牌。发现的问题必须有可展示的故障,例如内容被裁切、发生重叠、镜像出错或分组难以辨认。仅仅数值与这些起始值不同,不算问题。

点击区域和焦点行为属于 better-accessibility。圆角、阴影和动画属于 better-ui。行长、文本间距和截断机制属于 better-typography。文字本身属于 better-writing。

用间距分组,而不是用线条

优先用间距分组,其次用背景形状,最后才用分隔线,且仅在间距本身无法表达结构时使用。组间距至少是组内间距的 2 倍,因此组内使用 8px 时,组间距应为 16px 或更大。具体做法见 grouping-and-alignment.md。

让控件与内容有所区分

为每个交互元素添加背景形状、边框、下划线,或将其放在工具栏等固定区域中。控件若与旁边的静态文本样式相同,就无法让人看出它是控件。参见 grouping-and-alignment.md。

对齐到共用边缘

选取少量对齐边缘,并让所有内容都与之对齐。每一层嵌套使用一个项目间距单位,16px 是一个实用的默认值。参见 grouping-and-alignment.md。

对需要镜像的内容使用逻辑属性

将依赖方向的布局写成起始和末尾属性:margin-inline-start、padding-inline-end、inset-inline-start、text-align: start。物理左侧和右侧仅用于安全区域内边距等物理几何属性。映射表和 RTL 布局规则见 grouping-and-alignment.md。

按重要性排序

最重要的内容放在靠近顶部和起始边缘的位置。在一行内,标识性内容放在前面,元数据和操作放在后面。视觉顺序应与 DOM 顺序一致,因此绝不要使用 order、row-reverse 或网格布局将内容移出源代码顺序。参见 grouping-and-alignment.md。

每个视图只设一个主要操作

每个视图只设一个主要操作。次要操作超过 3 个时,将其放入菜单。优先使用较短的视图并链接到更深层的内容,而不是在顶层视图中展示所有内容。主要操作的颜色标识由 better-colors 负责。

提示存在隐藏内容

每个屏幕外或折叠的内容都需要有可见提示。使用项目既有的提示方式,让下一项在滚动边缘外露出 16–32px,或显示展开控件。

用户需要的截断值必须有查看完整内容的途径:展开控件、详情视图,或同样可通过键盘访问的工具提示。截断机制由 better-typography 负责。具体做法见 spacing-and-adaptivity.md。

无边框控件需要更大的间距

如果没有既有的密度系统,带边框或填充的相邻控件之间应从 12px 的间距开始。无边框文本和图标控件的可见字形之间应留出 24px,并将每个按钮自身的内边距计算在内。紧凑布局可以使用更小的间距,但点击区域绝不能重叠,控件也必须保持区分度。参见 spacing-and-adaptivity.md。

按钮与边缘保持内缩

在内容布局中,全宽按钮应位于布局边距内,在移动设备上从距内联方向边缘约 16px 处开始。与边缘齐平的操作仅适用于遵循既定平台界面、考虑安全区域且能与系统 UI 清晰区分的情况。请参阅 spacing-and-adaptivity.md。

内容延伸至边缘,控件悬浮其上

背景和媒体内容延伸至视口边缘。控件和文本应留在布局边距和安全区域内。只有当视口 meta 标签包含 viewport-fit=cover 时,env(safe-area-inset-*) 才会是非零值。

内容会滚动到粘性界面元素下方。将 scroll-padding-block-start 设置为粘性页眉的高度,确保锚点目标和聚焦元素不会落在其下方。请参阅 spacing-and-adaptivity.md。

结构保持到无法适配为止

断点应由内容决定,而不是由设备预设决定。保留展开布局,直到它无法适配,然后再折叠。组件级适配优先使用容器查询,并先测试支持范围内最小和最大的尺寸。请参阅 spacing-and-adaptivity.md。

为内容增长和裁切做好准备

翻译后的字符串会变长,较短的字符串按比例增长得更多,因此一个单词的按钮标签是屏幕上风险最高的元素。使用 max-width 和 min-height 设置文本容器尺寸,不要使用固定宽度或高度,并允许行内容换行。使用伪本地化以及德语等字符串较长的语言进行测试。

调整大小、缩放或滚动时,切勿让关键操作被裁切。应将其保留在正常文档流中,或放在稳定的界面元素中。请参阅 spacing-and-adaptivity.md。

完成前检查

检测模式修复方法
grid-template-columns: … 1fr,或承载长文本或宽表格、导致内容溢出轨道的弹性子项在轨道上使用 minmax(0, 1fr),在弹性子项上使用 min-width: 0
width: 100vw使用 width: 100%;100vw 会包含滚动条,在桌面端造成水平滚动
全高移动面板上的 height: 100vh使用 100dvh,避免浏览器工具栏和键盘遮挡底部
承载文本的盒子使用带固定长度的 height:使用 min-height,或使用带 overflow-y: auto 的 max-height
可复用组件内部使用 @media (max-width: …)在组件父级使用 @container
在没有宽度的弹性项、行内块或绝对定位元素上使用 container-type: inline-size为其指定明确宽度;尺寸包含会使收缩至适配内容的盒子宽度变为零
使用 env(safe-area-inset-*),但视口 meta 标签中没有 viewport-fit=cover添加它,否则内边距会解析为 0
inset-inline-* 或 *-inline-* 与 safe-area-inset-left 或 -right 组合使用使用对应内边距的物理方向 left 或 right,并添加 [dir="rtl"] 覆盖规则
镜像 UI 上使用 float: left使用 float: inline-start
镜像 UI 上使用 translateX 或 background-position: left添加 [dir="rtl"] 覆盖规则;两者都没有逻辑方向形式
粘性页眉未设置 scroll-padding-block-start将其设置为页眉高度

报告

严重程度。 在受支持的视口下,HIGH 表示内容或操作受阻。在 320px 宽度或 200% 缩放时发生裁切或重叠,始终属于 HIGH;内容被截断且无法查看完整值,也属于 HIGH。内容超出滚动边界,或被折叠内容遮挡且没有明显提示,同样属于 HIGH。MEDIUM 会损害层级结构、阅读顺序或适配性。LOW 指孤立的对齐或间距优化问题。

验证。 无浏览器时,检查是否使用逻辑属性而非物理属性、容器和媒体查询是否适用于受支持的视口列表,以及 DOM 顺序是否与视觉顺序一致。有浏览器时,检查每个受支持的宽度、320px、200% 缩放和 RTL 镜像。将无法执行的每项检查报告为 Not verified。

格式。 按违反的原则分组,并按严重程度排序;每个根本原因占一行,列出其出现的所有位置:

SeverityLocationBeforeAfterWhy

Location 格式为 path/to/file:line。Why 需指出相关原则及其对用户的影响。

若仍有任何 HIGH,则以 Block 结尾;否则以 Approve 结尾,并将其余事项保留在表格中作为待处理工作。对于未检查的范围,绝不标记为 Approve。若无待处理问题,则写明 "No actionable layout findings" 并报告验证情况。

评论

支持 Markdown