我拆了 399 个 AI 生成的网页:75% 拿 emoji 当图标,89% 用了大圆角,56% 是同一套四件套
先说结论,一句话:
"AI 味的界面"是可以量化的。 我把一个平台上 399 个由 AI 生成、真实上架的单页应用全部下载下来,只统计它们的 CSS 设计值(不看功能、不评价好坏),结果是:渐变 78.9% 、emoji 75.2% 、圆角 ≥12px 89.5% 、系统字体栈 80.2% ;而"渐变 + emoji + 大圆角 + 系统字体"这四件同时命中的,占 56.1%。
也就是说:一半以上的页面,用的是同一套设计默认值。
一、样本是什么,为什么可信
| 项 | 数字 |
|---|---|
| 平台 | CSDN「码上创」(一个"用 AI 构建场景应用"的投稿平台) |
| 抓取时间 | 2026-10-26 08:00 |
| 作品记录 | /api/products 返回 814 条,按 id 去重后 407 个(这个接口对 pageSize 不敏感,翻页会返回同一批,不去重会把总数算成两倍) |
| 成功抓到的页面 | 399 个 (8 个链接打不开,其中 2 个填的是 http://127.0.0.1:...,说明审核并不点开链接) |
| 作者数 | 206 个 |
| 页面形态 | 全部是单文件内联 HTML:CSS 和 JS 都写在页面里,没有构建产物,没有外链样式表 |
这一点很关键:这些页面没有"设计系统",每一个都是模型从零生成的一整页。 所以它们的设计值,几乎等于模型在"做一个好看的网页"这句话下的直接输出。
统计脚本是纯正则 + 状态扫描,只读源码,不做渲染。所有数字在文末给了复现方式。
二、五个数字
1. 渐变:78.9%
399 个页面里 315 个用了 linear-gradient。
不是"用了渐变",而是渐变被当成了"现代感"的同义词。你去掉颜色看结构,会发现大量页面是"顶部一个大渐变区 + 白色圆角卡片"这一个模子。
2. emoji:75.2%
300 个页面的源码里出现了 emoji(中位数每页 3 个)。
这个数字我要说清楚口径:我统计的是源码里出现的 emoji 字符 ,绝大多数出现在标题、按钮、列表图标位置------也就是当图标用。真正做了 SVG 图标的页面是少数。
一个页面用 emoji 没问题。问题是:当 75% 的页面都用 emoji 当图标时,emoji 就不再是"设计选择",而是"没做选择"。
3. 圆角:89.5% 的页面最大圆角 ≥12px,76.4% 出现胶囊/正圆
- 最大
border-radius为 999px 的页面:203 个(50.9%) - ≥12px:357 个(89.5%)
- 出现
999px/50%/100px这类"胶囊或正圆"的:305 个(76.4%)
圆角本身没错。但**"所有东西都是圆的"是一个风格决定**,而当 9 成页面都这么决定时,它就不是风格,是默认值。
4. 字体:80.2% 用系统字体栈,最常见的那一条出现了 149 次
出现次数第一的 font-family 是这条:
-apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", sans-serif
139 个页面(35%)一字不差地用了它。
这条栈本身是对的 (国内加载不了 Google Fonts,用系统字体最稳)。我要指出的不是"应该换字体",而是:同一句话被模型生成了 139 次。
顺带一个反直觉数字:真正写了 Inter 的只有 6.3%,写了 prefers-color-scheme(深色模式)的只有 3.3%,用了 Tailwind 式 class 命名的只有 5.3%。
深色模式 3.3% 这个数字我盯了很久:它说明模型在"做一个应用"时,默认只做浅色一种状态。不是不会,是没被要求。
5. 四件套:56.1%
同时满足「有渐变 + 有 emoji + 最大圆角 ≥12px + 系统字体」的页面:224 / 399。
如果把这四条当成一个"AI 味指纹",那么超过一半的作品,指纹完全一致。
三、这不是"少数人批量灌水"造成的
这是我自己最先怀疑的地方。拉动数据前我就知道:有个作者发了 25 个作品,我自己也发了 11 个。如果比例是被"同一个人重复发布"拉高的,那这个结论就是假的。
所以我做了一次对照:每个作者只保留一个作品,样本从 399 降到 206,重算一遍:
| 指标 | 全部 399 个 | 每作者只留 1 个(206 个) |
|---|---|---|
| 渐变 | 78.9% | 75.2% |
| emoji | 75.2% | 77.2% |
| 圆角 ≥12px | 89.5% | 87.4% |
| 胶囊/正圆 | 76.4% | 77.2% |
| 系统字体 | 80.2% | 75.7% |
| 四件套 | 56.1% | 53.4% |
| 深色模式 | 3.3% | 3.4% |
几乎没变。
这说明它不是"某几个人的偏好",而是206 个不同的人、在不同的提示词下,独立地收敛到了同一组数值。
这就是我要写的核心:这不是审美问题,是分布的众数问题。
四、为什么会长成这样(机制,不是指责)
三条,都是结构性的:
1. 训练数据里"好看的网页"本来就长这样。
模型学到的是"现代 Web 界面"的条件分布。当你说"做一个好看的 XX 应用",它给出的不是某个设计师的判断,而是这个分布的均值。均值天然是:柔和渐变、大圆角、卡片阴影、emoji 当图标。
2. "简洁 / 现代 / 高级感"这类词,指向的是同一批视觉特征。
提示词越笼统,输出越靠向中心。你想让它"好看",它就给你平均值;你只有说清"给谁看、在什么场景下看、为什么不能是别的样子",它才会离开中心。
3. 单文件约束把设计压成了"一页 CSS"。
不能引组件库、不能引字体、不能引图标集 ------ 于是图标只剩 emoji,字体只剩系统栈,圆角只剩手写数字。约束本身没错,但它把所有人的选择空间压成了同一个盒子。
五、这三个数字能怎么用
用法一:判断一个作品有没有"做过选择"
不要看它好不好看,看它在哪几个默认值上偏离了。
一个页面如果:渐变 ✓、emoji ✓、圆角 16px ✓、系统字体 ✓ ------ 它可能很好用,但它没有一个设计决定是作者自己做的。反过来,如果一个页面在四个默认值里偏离了两个以上,基本可以确定背后有人在某个具体场景上想过事。
这不是"AI 味 = 差"。AI 味 = 没做选择。这两件事必须分开,否则就会变成对工具的偏见。
用法二:给你的页面加一条"反默认"清单
上线前自查四问:
- 我这个渐变,是为了表达什么?(如果答案是"显得现代",删掉)
- 我的图标为什么是 emoji?(如果没有理由,换成 2--3 个手写 SVG 也比 20 个 emoji 强)
- 我的圆角是多少,为什么是这个数?("组件库默认"不是理由)
- 深色模式下它长什么样?(399 个页面里只有 13 个想过这个问题)
用法三:想不像 AI 做的,改的不是色值,是"为什么"
这是我自己的体会。前 12 个作品我都在改色值、改布局,最后一个才想明白:让页面不像 AI 做的,不是换一套颜色,而是让每一个数值都能回答"为什么是这个数"。
六、我拿这组数据做了什么
我做完这次统计之后,正好要做一个新工具(一个帮租客在退租前算清押金的页面)。我把这四条默认值全部反着用了:
- 不用渐变(纸色
#f6f5f1纯平底) - 不用 emoji(一个都没有)
- 不用胶囊圆角(10px 一档,只有一处)
- 字体仍然用系统栈(这条我没反------因为它在国内是正确的选择,不是为了"像 AI")
换成了"档案纸 + 表格 + 印章色"这一套(米白底、细网格、墨蓝标题、砖红警示)。
结果我自己也没想到:当你不去用那四个默认值时,页面立刻有了"这是某个具体的东西"的感觉 ------ 因为剩下的每一个决定,都必须有理由。
(这个工具叫「押金体检」,链接在文末。它本身就是这篇文章的一个实验样本。)
七、口径与局限(这部分比结论重要)
- 只看源码,不看渲染。 渐变是不是真被用上了、emoji 是不是真当图标,我没有逐个渲染验证。0.5 个百分点的误差我不在乎,但方向性错误我在乎 ------所以
var(--x)形式的渐变我单独排除了(那是变量引用,不是设计值)。 - 只有一个平台、一个时间点。 399 个作品都来自同一个投稿平台,作者大概率是国内开发者、用中文提示词。这个结论不能推广成"所有 AI 生成的网页"。 它能说的是:在这批人、这批工具、这批提示词下,收敛是真实发生的。
- "四件套"是我事后选的一组特征,不是事先定义的模型。 我挑的是最容易测、最不依赖审美判断的四条。换一组特征,比例会变。它不是"AI 味指数",它是一个可复现的观察角度。
- 数字会变。 平台每天都在进新作品(我抓的那天 18 小时只增了 4 个,前段时间是 18 小时 120 个)。三个月后重跑,可能就不一样了------这恰恰是它值得重跑的原因。
八、复现
原始语料:407 条作品记录 + 399 个页面,落盘在本地 cache_1026/。
统计脚本 homogeneity3.py:正则取 hex / linear-gradient / border-radius / font-family,按 id 去重、按 submittedBy 分作者,输出 homogeneity3.json。
关键口径都写在脚本注释里:hex 补 # 前缀、var( 渐变排除、inter 必须作为字体名 token 精确匹配(第一版我用子串匹配,把 internet、pointer 也算了进去,Inter 一度虚高到 95%------这类错误不会报错,只会给你一个很像真的数字)。
如果你要重跑:换成你自己的语料目录即可,脚本不依赖平台接口。
林小黑 · 2026-10-26
同系列:《407 个应用、2660 票、53043 次浏览:我把码上创的榜单整个算了一遍》《静态扫出 19 个"死按钮",真跑起来是 0 个》
本文用到的工具:押金体检 https://vb.csdn.net/apps/index-e5b43a/