一份关于 2026 年硅谷头部 AI SaaS、设计系统团队博客与 Docs 视觉和工程范式的深度盘点,以及如何在中文语境下复刻这套审美。

最近半年我一直在看硅谷头部 AI SaaS 公司的博客、Changelog 和 Docs 站,试图回答一个问题:它们看起来为什么都那么像,但又比一般 SaaS 高一个档次?
把 Anthropic、Vercel、Linear、Resend、Cursor、Stripe、shadcn 这些站点放在一起对比之后,我发现 2026 年的硅谷 AI SaaS 博客已经收敛到了一套高度一致的“瑞士派 × 工程师审美”范式:OKLCH 语义化 token、Tailwind v4 @theme 块、shadcn/Radix 组件契约、Next.js App Router、MDX / Velite / Fumadocs 的内容层、Shiki 双主题代码块、@vercel/og 的动态 OG、View Transitions API 的软切换。
视觉上,它们抛弃了纯黑 #000 与拟物渐变,转向“温暖的近黑”和“单色 + 单一克制 accent”。字体则成为身份本身:Vercel 有 Geist,OpenAI 有 OpenAI Sans,Anthropic 有 Anthropic Sans / Serif / Mono,Linear 用 Inter Display。
这篇文章把视觉、工程、设计系统、中文本地化串成一张图。目标是让一个有经验的前端工程师或设计师读完之后,清楚地知道:这些公司是怎么做的、为什么这样做、以及怎么在中文语境下复现这套审美。
2025 年 1 月 22 日 Tailwind v4 发布时,官方博客里写得很直白:
We've upgraded the entire default color palette from rgb to oklch, taking advantage of the wider gamut to make the colors more vivid in places where we were previously limited by the sRGB color space.
出处:Tailwind CSS v4.0 announcement。
shadcn/ui 也跟进了:2025 年 3 月起新工程默认 style,所有色值从 HSL 全量迁到 OKLCH,而且是非破坏性变更。这之后 Radix Themes、Vercel Geist、Linear 的拾色器全部接入 OKLCH。
new-yorkOKLCH 的工程价值有三个:
@supports (color: oklch(...)) 自动降级。Anthropic 的站点上已经看不到 #000。第三方设计拆解平台 Refero 把 Anthropic 的色板剖了一遍:
Anthropic's site runs on warm ivory parchment — not white, not gray, but the color of aged paper under good light.
Anthropic 公开的 Brand Guidelines skill 把主色定为 #141413 深色、#faf9f5 ivory、#d97757 Clay 主 accent、#788c5d Olive、#6a9bcc Blue。
Linear 在 2024 年 11 月的官方设计博客 How we redesigned the Linear UI part II 中亲自承认了从“线性紫蓝渐变”向“中性近黑”的转向:
We continued polishing the new color theme … by limiting how much chrome (blue in our case) was used in the calculations applied to our color system.
LogRocket 2025 年的 Linear Design 年终回顾 直接说 Linear 自己在 2025 年也大幅削减了 glass / 复杂 gradient,从 monochrome blue 变成 monochrome black / white。
无论是 Anthropic、Vercel、Linear 还是后来的众多模仿者,语义 token 几乎都收敛到了 shadcn 这一组:
每个 color 都有 -foreground 配对色,所有组件都引用 var,切换 :root 与 .dark 就完成主题切换。Radix Colors 的 12 步色阶哲学被几乎所有衍生方案直接照搬:1-2 是 backgrounds,3-5 是 component states,6-8 是 borders,9-10 是 solid backgrounds,11-12 是 text。
这条最值得讲。2025 到 2026 年,硅谷头部 AI SaaS 几乎都在做自家字族。
Vercel Geist 在 2023 年 10 月发布,由 Vercel 与阿根廷 Basement Studio 合作。Google Fonts 公开 credit 的设计师包括 Andrés Briganti、Mateo Zaragoza、Guillermo Rauch、Evil Rabbit、José Rago、Facundo Santana。官方 README 写得很坦诚:
Geist has been influenced and inspired by the following typefaces: Inter, Univers, SF Mono, SF Pro, Suisse International, ABC Diatype Mono, and ABC Diatype.
Vercel 自己定位为:Geist embodies our design principles of simplicity, minimalism, and speed, drawing inspiration from the renowned Swiss design movement。它使用 SIL OFL 1.1 开源,npm 上的 `geist` 包 可以一键集成,import { GeistSans, GeistMono } from 'geist/font' 即可,零 CLS、零外部请求。
OpenAI Sans 是 OpenAI 公司史上第一次品牌重塑的一部分,2025 年 2 月发布,由柏林的 ABC Dinamo 与 OpenAI 内部团队合作。CXO Digitalpulse 的拆解 描述为 blends geometric precision and functionality with a rounded, approachable character。这套字体合并了 OpenAI 此前在不同产品上用的六七种字体,并通过共享的 emotive point 与 ChatGPT 的脉动光标形成统一符号。
Anthropic 字体三件套在站点上的分工被 Refero 拆得很清楚:Anthropic Serif 用于暗色大标题,Anthropic Sans 用于浅色界面标题,Anthropic Mono 用于日期、类别等结构化 metadata。最有趣的细节是标题强调机制不是颜色,而是 double-underline:用粗厚双下划线替代色彩强调。
Linear 在重设计中明确写到:We started using Inter Display to add more expression to our headings while maintaining their readability and kept using regular Inter for the rest。Inter 是 Figma 主设计师 Rasmus Andersson 的作品,且免费。这种“工程师审美 + 不上奢侈版权”的取舍,是 Linear、Tailwind、Resend 一致的选择。
Resend 在 Rebranding Resend 里公开:Domaine is our new serif font for editorial headlines;Favorit 用于 subheadings,Inter 继续作为正文主字体。Resend 还直接说自己是 dark mode first。
把这一圈看下来,2026 年最稳的 SaaS 博客字体搭配是:Domaine Display / Tiempos 做编辑标题,Inter 做正文,Geist Mono / JetBrains Mono / Sohne Mono 做代码。
主流博客的 max-width 收敛到 content column 640-720px + bleed full-width media。行高西文 1.5-1.65,CJK 推荐 1.7-1.8。Typotheque 的 CJK 排版文章 给出的具体值是:
For CJK text, which tends to have a higher density of information per character, a leading value of around 1.7 improves both readability and aesthetic balance.
响应式字号基本都靠 clamp() + modular scale,这点没什么悬念。
这套审美不是没有装饰,而是装饰退到了系统层:
2025 年 React 团队在 React Conf 2025 上把 <ViewTransition> 从 experimental 移到 canary。Chrome DevRel 的 What's new in view transitions (2025 update) 原话是:
They announced react@experimental support back in April and this week, at React Conf, they moved support of it into react@canary which means the design is close to final.
Firefox 144 带来 same-document view transitions Baseline,web.dev 已经把它列为 Baseline Newly available。Next.js 也在 `next.config.js` 中提供了 `experimental.viewTransition` 标志,并在 View transitions guide 里介绍了基于 App Router 的用法。
主流用法有四种:列表到详情的共享元素 morph、Suspense reveal 的 skeleton 软切换、路由方向区分、scroll-driven animation 做阅读进度条与 hero parallax。
务必加 prefers-reduced-motion 兜底:
Vercel 的 Next.js docs、Astro、Anthony Fu 的 antfu.me、Fumadocs 默认全部用 Shiki。
三个关键能力:
codeToHtml(code, { themes: { light: 'github-light', dark: 'github-dark' } }) 一次生成两套 inline 样式,通过 CSS 变量在 :root / .dark 切换,零客户端 JS。实践可以参考 Afnizar 与 Nikolai。@shikijs/twoslash 与 hast-util-to-jsx-runtime 可以和 React Server Components 适配。fumadocs-twoslash 一键启用,可以在静态 HTML 中得到 TypeScript 真实类型 hover。代码块 chrome 上普遍包含文件名、行号、高亮行、diff、复制按钮、language badge。差异化点是 Anthropic 的代码块沿用 ivory 卡片美学,Vercel / Linear 用 Geist Mono / Inter Mono,Resend 用 dark-mode-first 卡片 + 蓝色 accent。
Contentlayer 实际已停滞。Dub.co 团队在 Migrating from Contentlayer to Content Collections 一文 给出最直接的诊断:
ever since their main sponsor, Stackbit, was acquired by Netlify, Contentlayer has been effectively unmaintained.
原作者 schickling 也在 GitHub Issue #429 亲自确认:他们的赞助缩减后,自己目前只能每月分配一天给项目。
2026 年的选型矩阵可以这样看:
@next/mdx:直接 MDX 编译,适合极简静态博客。PkgPulse 的 2026 横评 把 Fumadocs、Nextra v4、Starlight 做了详细对比。结论大致是:Fumadocs 在 headless 和可替换 UI 上胜出,Nextra v4 在开箱即用上胜出。
我的推荐组合:
next/mdx。Tailwind v4 把 token 从 tailwind.config.js 全部迁移到 CSS 的 @theme 块。shadcn 文档官方写法 很清楚:
@theme inline 是关键。它把 CSS 变量内联到 Tailwind 的设计 token,utilities 在编译时仍引用 var(--primary),因此 runtime 改 :root 即可整站换肤。Style Dictionary 与 Radix Colors 主要作为色阶生成器使用,`@radix-ui/colors` 仍是行业最稳的 12 步色阶来源。
shadcn 模式 已经成为 React 生态默认:npx shadcn@latest add button 把组件源码复制到 components/ui/,使用方拥有源码、自己改、CVA 处理 variant。
GitHub Discussion #9754 里官方推荐的做法是直接在 components/ui 下改,而不是再包一层 wrapper。加 wrapper 会破坏 token 契约。
MDX 自定义组件的 idiomatic 写法是在 mdx-components.tsx 里集中映射:
PortableText 的关键差异是它是 JSON,数据库友好、多端复用,但需要写 components 序列化。Sanity 官方推荐 @portabletext/react。代码块的 idiomatic 处理是用 createHighlighter 单例,当 block._type === "code" 时调用 codeToHtml 产出 HTML 字符串,React 再用 dangerouslySetInnerHTML。
OG 图:Vercel 在 2022 年 10 月发布了 `@vercel/og`,底层是 Satori。官方公开的性能数据很惊人:
Vercel OG (500KB) is 100x more lightweight than Chromium + Puppeteer (50MB), which allows functions to start almost instantly.
App Router 中直接 import { ImageResponse } from "next/og" 即可,官方文档 提醒 Satori 只支持 flexbox,不支持 grid,字体只支持 ttf / otf / woff,bundle 不超过 500KB。
字体加载:next/font/google / next/font/local 在构建时下载、自托管、子集化,自动加 font-display: swap,减少 CLS。Vercel 自家的 Custom fonts without compromise using Next.js and `next/font` 把这个流程总结为 CLS、FOUC、客户端 JS 复杂度同时下降。CJK 字体需要单独的分包 CDN。
暗色模式:next-themes + class="dark" 切换 + suppressHydrationWarning 防 FOUC。
搜索与评论:小站用 Pagefind;中型文档站用 Algolia DocSearch;Fumadocs 内置 search。评论默认 Giscus。
哲学:Swiss 风格 + 工程师审美 + black / white precision。
可借鉴的具体规范:
next/font 自托管:pnpm add geist 后 import { GeistSans, GeistMono } from "geist/font",零网络请求。哲学:12 步色阶,每一步都有明确职责。1-2 是 backgrounds,3 是 normal,4 是 hover,5 是 pressed,6 是 subtle non-interactive borders,7 是 subtle interactive borders,8 是 stronger borders and focus rings,9 是 highest-chroma solid,10 是 hover for solid,11 是 low-contrast text,12 是 high-contrast text。Step 11 与 12 在自家 step 2 背景上分别保证 APCA Lc 60 / Lc 90,见 DeepWiki 拆解。
可借鉴的具体规范:
blue + blueDark,变量名相同,只在 .dark 下重定义。哲学:You own the code。它不是 npm 库,而是 CLI 复制源码进项目。
可借鉴的具体规范:
--chart-1..5 + --sidebar-*。-foreground 配对色。--radius 作根 token,sm / md / lg / xl / 2xl 用 calc() 派生。Linear Method 的哲学是 Opinionated software。一个用例只有一条好的路径。Linear Method 主页原话:
There is a lost art of building true quality software. To bring back the right focus, here are the foundational ideas Linear is built on.
可借鉴的具体规范:
复刻硅谷的视觉容易,工程要补的是 CJK 这一层。
vinta/pangu.js 是 CJK 与拉丁字符之间自动加空格的事实标准:
注意:官方明确不建议在 Markdown 上跑 pangu,因为会破坏链接、代码块。应该在 HTML 渲染后处理,或针对 plain text 节点处理。
CJK 段落排版必须叠这一层:
中文字体的工程挑战是思源黑体完整 CJK woff2 往往超过 4MB,直接加载会拖慢 LCP。解决方案是按 Unicode range 分包 CDN。
guangzhengli 的 nextjs-blog-template 实际上把“硅谷工程师审美 + 中文博客最佳实践”压缩成了一个开源模板:内容文件在 src/content/blog,配置集中在 src/lib/config.ts,Giscus、RSS / Atom / JSON Feed、小红书 / 微信 / Buy Me a Coffee 链接、可选 edge / fluid compute 都有。这是中文社区目前最完整的硅谷范式复刻模板。
正向模仿层:即刻、V2EX、掘金上的高赞文章把 shadcn/ui、Tailwind v4、Vercel Geist、Linear 设计哲学当作显学来拆解。少数派的设计向文章长期推 Linear、Raycast、Arc、Cursor。
批评层:LogRocket 2025 年 Linear design 回顾 指出 linear design 已经让几乎每个 SaaS 网站长一样。中文社区对此的回应是把工程师审美与汉字编辑性结合:霞鹜文楷正文 + Geist Mono 代码 + Anthropic 风 ivory 卡片混搭。少数派、阮一峰周刊属于中文编辑传统派,坚持高密度链接列表与古早 HTML。
本土化关键障碍:
font-display: swap + 同度量 fallback。:lang(zh) p 上覆盖。@import "tailwindcss",@custom-variant dark (&:is(.dark *))。-foreground 配对。:root 与 .dark 各一套,@theme inline 把 var 暴露为 utility。--radius 作根 token,其他 size 用 calc() 派生。@radix-ui/colors 作为色阶来源。next/font/local 自托管 Geist 或 Inter,subset 只选 latin。font-display: swap 必加;CJK 配 metric-compatible fallback。npx shadcn@latest init,选 new-york style + neutral baseColor + cssVariables: true。cn() = clsx + tailwind-merge。@portabletext/react + Shiki createHighlighter 单例。fumadocs-twoslash。mdx-components.tsx。{ light: "github-light", dark: "github-dark" }。@shikijs/twoslash 加 TypeScript hover。@vercel/og 生成动态 OG,1200×630。generateStaticParams 预渲染。Article schema。next-themes + <html suppressHydrationWarning> 防 FOUC。experimental.viewTransition 或局部 document.startViewTransition。prefers-reduced-motion 兜底。pangu.js,client 端 pangu.autoSpacingPage(),不要处理 Markdown 原文。word-break: keep-all + line-break: strict + overflow-wrap: break-word + text-wrap: balance + line-height: 1.75。fumadocs-twoslash。#000。抄 Anthropic 的 #141413 / #faf9f5 / #d97757 或 Linear 的 neutral with reduced chrome;纯黑在 OLED 之外会显得廉价。@vercel/og 配合 Satori 亚秒内出图,免去手工设计。components/ui/*.tsx 里的 CVA 即可。priority。@portabletext/markdown 与自定义 serializer,工程量很大。pangu.js 不要处理 Markdown 原文,应在 HTML 渲染后或针对 plain text 节点处理。如果这篇文章对你有帮助,欢迎在评论里聊聊你自己的博客是怎么搭的、最后选了哪一套栈。