2026-09-17 同步的图生网页榜 Top10 挤在 145 分内、置信区间互相重叠——「能生成」已经普及。真正拉开差距的是生成结果能不能进主干:设计令牌映射、可访问性与兼容、视觉回归可见性。
「能生成」已不再是门槛。真正决定 AI 前端能不能进主干的,是生成结果接不接得上你已有的组件库、过不过得了可访问性与兼容性、以及改完之后有没有办法回滚。
下面是 2026-09-17 16:20 同步的「图生网页」(Image-to-WebDev)榜 Top 10。这个榜单的评测方式很直接:同一张截图或设计稿交给两个匿名模型,各自在沙盒里还原成可运行网页,用户实际点击体验后按布局还原度、视觉细节与代码正确性投票,再经 Bradley-Terry 模型换算成 Elo 积分(榜单来源)。
| 排名 | 模型 | Elo | 投票数 | 价格(输入/输出,$/M tokens) |
|---|---|---|---|---|
| 1 | GPT 6 Astra (Max) | 1733 ±21 | 1085 | $10 / $50 |
| 2 | Claude Fable 5.1 (Max) | 1710 ±21 | 964 | $10 / $50 |
| 3 | Claude Opus 5 (Max) | 1665 ±13 | 2490 | $5 / $25 |
| 4 | Muse Spark 1.3 (Max) | 1645 ±18 | 1152 | $1.25 / $4.25 |
| 5 | Qwen 3.8 (Max 0902) | 1639 ±19 | 1094 | $2 / $6 |
| 6 | Claude Fable 5 | 1623 ±11 | 3806 | $10 / $50 |
| 7 | Qwen 3.8 (Max) | 1618 ±13 | 2468 | $2 / $6 |
| 8 | GPT 5.6 Sol (xHigh) | 1604 ±13 | 2515 | $4 / $20 |
| 9 | Grok 4.6 (High) | 1596 ±18 | 1171 | $2 / $6 |
| 10 | GLM 5.3 Flash | 1588 ±15 | 1600 | $0.07 / $0.25 |
几个容易被读错的地方:
换句话说,榜单衡量的是生成,而企业上线的瓶颈在合入。下面三条边界,正是 1733 分这个数字覆盖不到的地方。
模型默认输出的是通用样式:任意 hex 色值、任意 px 间距、一层套一层的 div。它不认识你的组件库,也不知道你设计系统里 --space-4 到底等于多少。把这类代码直接放进项目,等于在样式系统里开了一个不受控的旁路。
补上这道缺口的标准做法,是在生成结果和组件库之间加一层设计令牌(Design Token)。W3C 设计令牌社区组发布的 Design Tokens Format Module(2025.10,2026-09-08 修订版) 定义了这套中间格式:令牌有 $value、$type、$description,并支持用花括号或 JSON Pointer 做别名引用,从而把「源令牌到语义令牌再到组件层」的链路固化下来。它的定位就是跨工具、跨平台的单一事实来源,正好卡在设计稿与代码之间。
落到 Web 端,需要约束的其实只有三件事:
color.text.primary),间距走统一刻度。padding: 13px 必须映射到最近的刻度令牌,而不是原样保留。实际操作里,这层约束的输入不是一张图,而是一份令牌清单、组件白名单和命名规则。只丢一张设计稿给模型,等于放弃了映射控制权。
生成代码在可访问性上的缺失是结构性的,因为模型优化的目标是看起来对,而 a11y 是用得对,两者在截图里看不出来。
div 拼一切。导航应是 nav、主内容应是 main、可点击项应是 button 而不是加了 onClick 的 div。role 和 aria-*,却漏掉配套的键盘行为,反而制造错误。缺 ARIA 可以补,错 ARIA 要拆。:focus-visible 被样式重置掉、把可聚焦元素塞进 aria-hidden 容器。这些不会在任何截图里暴露。100vh 的地址栏行为、iOS 安全区、:has() 与 container queries 的支持度、字体回退与滚动惯性。桌面 Chrome 上跑得好,不等于上线没问题。可行的兜底是:生成后强制跑一遍 axe-core 或 Lighthouse 的可访问性审计,再挑一到两台真机做抽查。工具能抓出大部分语义与对比度问题,焦点顺序和多主题仍需要人眼过一遍。
没有视觉回归,生成或修改后的页面就处于一种谁都不敢改的状态:评审无从下手,改动无法回滚。这一条经常被忽略,却是生成结果能不能进主干的真正闸门。
Web 端现成的方案已经足够:
expect(page).toHaveScreenshot() 首次运行生成参考截图,之后每次跑测试都与基准比对,可用 maxDiffPixels 设置容差。要注意官方提示:浏览器渲染会随操作系统、浏览器版本、无头模式甚至电源状态变化,基准图必须在同一环境里生成,否则到处是假阳性。关键不在工具,而在于把生成页面纳入路由或 story 清单加 CI 截图比对,让每一次生成或修改都产生一份可回滚的 diff,并且 diff 必须随 PR 一起评审。
!important、任意 px,强制引用令牌。一个常见的失败路径是:团队觉得生成页面看着没问题,直接合进 main。两周后症状齐发——同一个卡片在不同页面出现三套间距;有的地方引用了令牌,有的地方是硬编码 hex;暗色模式局部破版;最要命的是,没人说得清哪一段是生成的、哪一段是手写的,回滚只能整页回退。
根因不是模型不行,而是跳过了中间层与回归。补救要从当天做起:给生成物打来源标记、纳入视觉 diff、按令牌做归一。等到样式散落再收拾,成本会翻好几倍。
不能单独作为依据。头部 10 名挤在 145 分内,第一名与第二名的 23 分差还落在各自的置信区间里,按榜单口径不构成统计学显著差异。选型应看自身约束:令牌映射能力、a11y 表现、数据合规,以及成本。榜首与第十名的价差约两个数量级,这个差异往往比名次更能决定长期总成本。
要,但颗粒度不同。样式与令牌映射、a11y 这类可自动化的一致性问题交给三闸;交互逻辑、表单状态与多主题走人工确认门。把生成代码当免检,是最常见的坑。
把生成结果当作结构与布局草稿:保留 DOM 结构与布局意图,把样式层整体替换为组件库组件加令牌引用。不要试图把两套样式系统合并,那会同时污染双方。
不直接适用。本文只覆盖 Web 端:小程序有自己的渲染层与审核约束,移动端原生涉及平台控件与包体,各自的边界不同,需要单独拆解。