make-interfaces-feel-better

make-interfaces-feel-better

热门

应用具体的设计工程细节,让界面更有质感、更精致。适用于 Code Review 或优化 UI 间距、字体排版、边框、阴影、动效、点击热区、图标、文本换行及交互状态等场景。

24万Star
3.6万Fork
更新于 2026/7/29
SKILL.md
只读
名称
make-interfaces-feel-better
描述

应用具体的设计工程细节,让界面更有质感、更精致。适用于 Code Review 或优化 UI 间距、字体排版、边框、阴影、动效、点击热区、图标、文本换行及交互状态等场景。

提升 UI 界面质感与细节 (Make Interfaces Feel Better)

在需要通过叠加设计工程细节来让界面看起来更精致、更有高级感时使用此 Skill。

来源:挽救自 linus707 废弃的社区 PR #1659。

适用场景

  • 用户反馈 UI 看起来不对劲、太扁平、大众脸、拥挤、卡顿跳动或未完成感。
  • 你正在构建控件、卡片、列表、仪表盘、导航、表单或工具栏。
  • 组件需要设置 hover(悬停)、active(按压)、focus(聚焦)、enter(进场)、exit(离场)、loading(加载)或 empty(空状态)等交互状态。
  • 前端审查(Review)需要具体的优化前/优化后(before/after)建议。

核心原则

同心圆角 (Concentric Radius)

对于相近嵌套的圆角表面:

outer radius = inner radius + padding

如果 padding 很大,直接将两层视作独立的表面即可,没必要死板套公式。重点是视觉协调度(optical coherence),而不是公式崇拜。

视觉对齐 (Optical Alignment)

几何居中不等于视觉居中。图标按钮、播放三角、箭头、星星以及不对称图标通常需要微微偏移。能改 SVG 最好;改不了就用像素级的 margin 或 padding 来调。

阴影与边框 (Shadows And Borders)

用边框做分隔线和焦点环(focus ring)。当卡片、按钮、下拉菜单或弹窗(popover)需要空间层次感时,使用多层叠加阴影。阴影应当带有透明度且足够克制,以便适配各种背景。

文本换行 (Text Wrapping)

  • 标题和短标题使用 text-wrap: balance
  • 短到中等长度的正文、图注、描述文本和列表项使用 text-wrap: pretty
  • 长篇大段的文字、代码和预格式化内容切勿使用以上两种设置。
  • 计数器、倒计时、价格、表格及其他动态更新的数字,使用 font-variant-numeric: tabular-nums

字体平滑渲染 (Font Smoothing)

在 macOS 上,若项目根布局未设置平滑渲染,请在根布局添加抗锯齿:

html {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

图片描边 (Image Outlines)

图片通常需要一层微妙的内嵌描边,避免边缘模糊融入背景表面。

img {
  outline: 1px solid rgba(0, 0, 0, 0.1);
  outline-offset: -1px;
}

@media (prefers-color-scheme: dark) {
  img {
    outline-color: rgba(255, 255, 255, 0.1);
  }
}

描边要用中性的黑白透明度通道(alpha channel)。切勿用品牌主色给图片描边上色。

动效 (Motion)

交互状态变更优先选择 CSS transition,因为当用户在动画播放到一半改变意图时,transition 能顺畅重定向。keyframes 仅用于分阶段的单次进场或加载序列。

推荐的动效默认配置:

  • 进场 (Enter):组合透明度 (opacity)、微幅 translateY,可选模糊度 (blur)。
  • 离场 (Exit):比进场更快更安静,通常建议 150ms。
  • 按压 (Press):针对按钮触感使用 scale(0.96),如果动画干扰了用户操作,要保留关闭手段。
  • 图标切换 (Icon swaps):使用透明度、缩放和模糊渐隐渐现 (cross-fade),而不是直接显隐切换。

动效作用域 (Transition Scope)

绝对不要使用 transition: all。必须明确指定变更的属性:

.button {
  transition-property: transform, background-color, box-shadow;
  transition-duration: 150ms;
  transition-timing-function: ease-out;
}

仅在合成器友好属性(如 transformopacityfilter)出现首帧卡顿(stutter)时使用 will-change。绝对不要用 will-change: all

点击热区 (Hit Areas)

可交互控件的点击热区应至少达到 40x40px,在版面允许的情况下最好达到 44x44px。当可见图标偏小时,可用伪元素扩展热区,但切记不要让扩展后的热区发生重叠。

Review 输出规范

在做 UI 打磨 Review 时,请用优化前/优化后对比表格汇报具体的改动:

原则 优化前 (Before) 优化后 (After)
同心圆角 父元素与子元素使用相同圆角 父元素圆角计算了 padding 边距
等宽数字 数字变化时计数器发生跳动 计数器启用 tabular-nums
动效作用域 transition: all 显式指定 transition 属性

如果代码片段不够明显,请注明文件路径和属性名。已检查但未改动的原则直接忽略。

自查清单 (Checklist)

  • 嵌套圆角元素在视觉上自然协调。
  • 图标已完成视觉居中对齐。
  • 按钮、卡片和弹窗合理使用了边框或阴影。
  • 标题和短句避免了尴尬的文本换行。
  • 动态变化的数字启用了等宽数字格式。
  • 需要的图片都加了中性描边。
  • 进场和离场动画已拆分,克制细腻,且支持中途打断。
  • 按钮按压有触觉反馈,且不会过于夸张。
  • 严禁出现 transition: allwill-change: all
  • 小控件依然保持了良好的可点击热区。