Figma 自动布局进阶:用变量 + 组件做出真正响应式的卡片列表(可直接照做)

你将做出什么

目标是做一个“真正能缩放”的卡片列表:容器宽度变化时,卡片能自动换行、卡片内部文字区能自适应、图片区保持比例;并且通过组件 + 变量把样式(间距、圆角、阴影、字号)统一管理,后续改一次全局生效。

准备:建立页面与基础变量(3 分钟)

1)新建一个 Frame 作为画板(例如 1440×900),命名为 Page / Cards

2)打开 Variables(变量)面板,新建一个 Collection:CardSystem

3)建立这些数值变量(建议用 number):space-4=4space-8=8space-12=12space-16=16radius-12=12stroke-1=1。如果你的团队有设计规范,把命名对齐即可。

4)建立一个模式(Mode)用于断点:DesktopMobile。把 Desktop 的 space-16 设为 16,Mobile 设为 12(示例),后面你会体验到“一键切换”的价值。

第一步:搭卡片外壳(Auto Layout 的关键选项)

1)画一个 Frame,命名为 Card,按下 Shift+A 变成 Auto Layout。

2)方向选 Vertical;Padding 绑定变量:左右=space-16,上下=space-16;Item spacing=space-12。

3)给 Card 设置 Fill(白色或浅色),Corner radius 绑定 radius-12;Stroke 绑定 stroke-1(颜色可先用浅灰)。

4)把 Card 的 Resizing 设置为:Horizontal: Fill containerVertical: Hug contents。这一步决定了“卡片会不会跟着列表一起伸缩”。

第二步:卡片内部结构(图片区 + 文本区)

1)在 Card 内部新建一个 Frame 命名 Media,设为 Auto Layout(可不必),主要用于占位。

2)给 Media 一个固定高度(比如 160),横向 Fill container,圆角可与 Card 一致或略小。

3)在 Media 下方放一个文本容器 Frame,命名 Body,Shift+A 变 Auto Layout(Vertical)。

4)Body 的 Item spacing 绑定 space-8,Resizing:Horizontal Fill container,Vertical Hug contents。

5)放三行内容:标题( )、说明(Desc)、标签行( )。把 /Desc 的文本框宽度设为 Fill container,避免内容多时把布局顶乱。

第三步:让卡片列表“自动换行”(很多人卡在这里)

1)新建一个外层 Frame 命名 Card List,Shift+A 变 Auto Layout。

2)方向选择 Horizontal,打开 Wrap(自动换行)。

3)Spacing:横向间距绑定 space-16,纵向间距绑定 space-16。

4)把 Card List 的 Resizing 设为:Horizontal Fill container,Vertical Hug contents。

5)把 Card(组件实例也行)复制 8~12 个放进 Card List。此时拖动外层画板宽度,你会看到卡片自动换行。

第四步:把 Card 做成组件,并用变量统一样式

1)选中 Card,Create component(创建组件)。

2)把 Card 的 padding、spacing、radius 都绑定到变量,这样切换变量模式(Desktop/Mobile)就会自动改变卡片的密度。

3)如果你要做“紧凑/舒适”两种密度,也可以新增 Mode:Compact,然后把 space-16 改为 12、space-12 改为 8。

4)建议把文字样式( /Desc)做成 Text styles;字号也可以做变量(但团队协作时要统一规则)。

第五步:做一个最常用的响应式规则(3 个检查点)

检查点 A:Fill container 是否用对。卡片想要跟随容器宽度变化,必须是 Fill container;卡片内部文字想要自动换行,也必须是 Fill container。

检查点 B:Hug contents 是否被“固定高度”破坏。如果你发现卡片底部出现大块空白,通常是某个内部 Frame 高度被锁死,改成 Hug contents。

检查点 C:Auto Layout 的对齐与约束。在 Auto Layout 里,优先用 Resizing(Hug/Fill/Fixed)控制,而不是传统 Constraints(Left/Right)。两者混用容易出意外。

移动端适配:用变量模式一键切换(推荐做法)

1)切换 Variables 的 Mode 为 Mobile。

2)观察 Card:padding、间距是否自动变紧凑;如果没有,说明你某些数值没有绑定变量,而是写死了。

3)在 Mobile 下,把 Media 高度从 160 调整为 140(可选),让首屏信息更集中。

4)把 Card List 的间距也绑定变量(space-16),这样列表密度也会随模式改变。

常见问题排查(按出现频率排序)

1)拖动宽度时不换行:确认 Card List 是 Horizontal 且 Wrap 打开;并且 Card 的宽度不要是“固定值过大”。

2)卡片内部文字不换行:确认文本层宽度为 Fill container;并检查文本是否被放进了 Fixed 宽度的 Frame。

3)某些卡片高度不一致:确认 Body 是 Hug contents;并给 Desc 设置合理的最大行数(可用 text truncation)或统一信息密度。

4)阴影被裁切:阴影层需要留出外边距,或在外层容器关闭 Clip content。

5)组件实例不好改:把 /Desc 设为可覆盖文本;必要时用 component properties 暴露开关(例如是否显示 )。

你可以复制的最终结构(方便对照)

Page / Cards(Frame) → Card List(Auto Layout Horizontal + Wrap) → Card(Component, Auto Layout Vertical) → Media(Fill container, Fixed height) + Body(Auto Layout Vertical, Hug) → /Desc/ (Text, Fill container)

练习:10 分钟把它变成真实项目可用的卡片系统

1)给 Card 增加一个 Variant:Default / Featured(Featured 更大图片、更粗标题)。

2)给 Card 增加一个属性:HasTag(控制是否显示标签行)。

3)把颜色也做成变量(例如 background、stroke、text),再加一个 Dark 模式(如果你的项目需要)。

完成后,你就得到一个能快速复用的响应式卡片列表:改变量/改样式/改内容都不会把布局弄崩。

用户评论 (0)

登录后参与讨论

立即登录 注册账号

暂无评论,快来抢沙发吧~

操作成功