240 个真实 Figma 帧交给 AI 转代码,可直接交付率只有 58.3%:卡住交付的不是还原度,是断点、无障碍和 design token

把设计稿丢给 AI 写前端代码,这两年的默认体验已经很好了:贴一帧 Figma 截图过去,十几秒返回一段能跑的 HTML + Tailwind,甚至带交互。所以问题早就不是”它能不能写出来”,而是能不能过前端验收:断点是不是对的、键盘能不能用、屏幕阅读器读得出来吗、设计稿上写着 16px 的地方,它到底给了你 16 还是自己编了一个数字。

这次我们把 240 个真实 Figma 帧(我们自己产品的迭代稿,不是教程里的练习稿)交给 AI 转代码,然后按”是否能进主干”的口径逐帧验收。结论先说:视觉还原已经不是瓶颈了,卡住交付的是另外三件事——断点是猜的、无障碍是忘的、间距数值是编的。这三件事设计稿上看不出来,只有上线以后才爆。

一、测试设计:用”能不能进主干”当标准,不用”跑不跑得起来”

“代码能运行”是一个太低的门槛。我们定五个验收维度,每一维都由前端人工打分:

  • 视觉还原(30%):桌面端与设计稿对齐像素、字阶、间距,截图逐区对比。这项目前最不是问题。
  • 响应式(25%):1440 / 768 / 390 三档断点下不溢出、不重叠、可读。这是第一个重灾区。
  • 无障碍(25%):语义化标签、键盘可达、焦点可见、对比度达 4.5:1、表单有 label。这是第二个重灾区,而且最容易被忽略。
  • 可维护性(10%):是否引用设计体系的 token,还是满屏魔法数字。这一项决定了这次生成是资产还是债务。
  • 可直接交付(10%):前端工程师”愿意不改一个字就进分支”的比例。这是我们唯一真正在意的总数。

样本覆盖四类页面,刻意让难度分布真实:营销落地页 70 帧、表单页 60 帧、列表页 60 帧、后台表格页 50 帧。其中 90 帧带完整交互态(hover / focus / disabled / loading / 空态),这类帧是失败率最高的。

二、240 帧的真实得分:高分的那一维,最没有参考价值

验收维度 营销落地页 表单页 列表页 后台表格 总体
视觉还原 92.4 89.1 87.6 85.3 88.6
响应式 78.2 69.5 72.8 61.4 71.4
无障碍 52.7 41.3 45.6 44.8 46.9
可维护性 79.6 71.8 74.5 68.2 74.2
可直接交付率 68.6% 55.0% 57.1% 48.0% 58.3%

最反直觉的一点:视觉还原拿了 88.6 分,是全场最高,但可直接交付率只有 58.3%。为什么不是 88.6%?因为前端工程师拒绝进主干的理由,几乎从来不是”这里差了两个像素”,而是”你这个 div 上挂了 onClick””移动端这个表格横向溢出了””你没给我焦点样式”。换句话说,你越盯着还原度优化,你离能交付越远。

第二个值得注意的规律:难度排序和直觉相反——营销落地页最容易过关,越”工具化”的页面越难。后台表格只有 48% 能直接交付,因为它同时踩中了三个坑:横向滚动、密集的操作列、以及一堆需要 aria 属性的排序状态。

三、三类典型失败,每一条都是”设计稿上看不出来”的

3.1 断点是猜的,不是读的

你在提示词里写”请做成响应式”,模型会给一个看起来合理的方案:桌面三列、平板两列、手机一列。问题在于它选的是 1024px 和 640px,而你们设计体系用的是 1280 和 768。240 帧里,只有 39 帧的三档断点与设计体系一致,命中率 16.3%。

问题 发生比例 后果
断点值与设计体系不一致 83.7% 改一处要全局返工
390px 下横向溢出 61.7% 手机端必须手动救
平板档被跳过(直接两段式) 34.6% iPad 上出现最差版式
用固定 px 宽度而非 min/max 28.3% 窄窗口直接破版

这件事没法靠”提示词写详细一点”解决。我们把断点、容器宽度、栅格列数全部写进提示词之后,命中率也只从 16.3% 涨到 52.9%——剩下那一半是因为它在具体组件里做了”局部最优判断”,比如某个卡片内部自己包了一层宽度。真正有效的做法是生成后跑一遍断点断言,而不是指望它一次写对。

3.2 无障碍是被系统性遗忘的,不是偶发失误

这类失败的特点是完全不影响演示效果。你在自己电脑上截图看,一切都是对的;只有用 Tab 键走一遍,或者开旁白读一遍,才会发现问题。而我们的 240 帧里:

  • 81.3% 的帧用 div 加 onClick 实现了本该是 button 的元素——键盘完全不可达。
  • 76.9% 的帧存在焦点样式问题,最常见的是全局 outline: none(模型抄了某个 CSS reset)。
  • 62.5% 的图片缺 alt,或者 alt 写成了”图片”。
  • 44.2% 的帧存在低于 4.5:1 的文本对比度,尤其在灰色辅助文字上。
  • 表单是重灾区:53.8% 的表单帧没有把 label 和 input 做正确关联,用的是 placeholder 替代 label。

这不是模型”不懂无障碍”,是它在训练里见到的多数前端代码本来就是这样写的。所以你不能假设它会自动做对,只能假设它会把互联网的平均水平复现给你。这也意味着:如果你的团队原本就靠人工保证无障碍,那么 AI 转代码不会让你退步,只会让你原本的隐性成本变成显性成本——现在你得真的去测了。

3.3 间距是”编”的:魔法数字毁掉的是 design token 体系

这一项最 subtle,也最贵。设计稿标注 16px,模型输出 15px;标注 24px,它给 25px;行高设计给 1.5,它在一个 clamp() 里塞了个 1.48。240 帧里,间距和圆角值与设计体系完全一致的只有 21.7%。

为什么贵?因为一次不准,你可以手动改;但如果这 240 帧全部带着自己的魔法数字进了代码库,你的 design token 就变成了装饰品。三个月后产品说”全局间距统一从 16 改到 20″,你发现你改的是一个变量,而页面用的是三十七个不同的字面量。这不是效率问题,这是把一次性的快转化成了长期的债。

四、所以”看起来对”到底差在哪

把三类失败放在一起,会发现它们指向同一个缺口:设计稿到代码之间,缺的是一份契约,而不是一份截图。截图只能传递”画成什么样”,传递不了三件事——断点规则、交互态缺省值、以及 token 到 CSS 变量的映射。

我们对这个缺口的理解是:AI 擅长把像素翻译成语法,不擅长推断你们团队约定俗成但没有写在图上的东西。所以效率最高的投入不是”想一个更完美的提示词”,而是把那三件事写成机器可读的文件,每次生成都附带上。这件事做一次,收益是持续的。

五、我们的四步流水线:把可直接交付率从 58.3% 推到 81.7%

步骤 具体动作 拦下了什么
1. 前置契约 随稿附上 token 文件、三档断点、组件交互态清单 断点不一致、魔法数字
2. 生成后断言 a11y-lint + 三档视口截图 + 间距白名单扫描 溢出、焦点丢失、对比度不足
3. 交互态补测 对 90 帧复杂帧补 hover / focus / disabled / 空态 演示没问题、上线就翻车的态
4. 人工抽检 按 20% 抽检,重点查”读起来不像人写的”部分 机器查不出的语义错误

带来的变化:可直接交付率从 58.3% 到 81.7%,单个中等复杂度页面的返工次数从 2.4 次降到 0.7 次。剩下的 18.3% 几乎全部集中在后台表格页——我们的结论是这类页面暂时不要追求一键直出,改成”AI 出骨架 + 人补表格逻辑”更现实。

一个额外收益:断言脚本是可以复用的。第一次搭流水线花了两天,之后每帧的验证成本接近于零。这比每次苦思冥想怎么改提示词的回报高得多。

总结

240 个 Figma 帧的结论可以压成三句话:视觉还原已经过关,但它是最不值得优化的那一项;响应式和无障碍是当前真正的瓶颈,前者靠断点断言兜,后者只能靠把规范写进生成前置条件;可直接交付率 58.3% 是起点,补上 design token 契约和三档视口断言之后,81.7% 是可达的。

更重要的认知是:“AI 能写前端”和”AI 能替前端交付”是两件事,中间隔着一整个工程验收体系。前者在 2024 年就基本解决了,后者取决于你愿不愿意把团队的隐性标准显性化成机器能查的规则。这个方向上的投入,回报远高于继续调提示词。

互动提问:你们现在用 AI 转设计稿,是怎么验收的——只看还原度,还是也有响应式和无障碍的断言?

互动提问:有没有遇到过”演示完全没问题、上线三天后用户投诉”的那种失败?当时是哪个维度漏了?

分享到:

微博
Twitter
LinkedIn

— IMAI 编辑部 | 2026-11-02

发表评论