Canvas UI 当你的网页成为画布 - 公读文章,Canvas UI, HTML-in-Canvas, WebGL, WebGPU, 前端组件库 - 简介:Canvas UI 是首个基于 HTML-in-Canvas API 的开源组件库,让 GPU 特效在真实、可交互的网页内容上运行。文本可选、链接可点、无障碍保留,同时享受液态玻璃、火焰、流体模拟等 35 种视觉特效。

您当前正在浏览的是本站SEO版网页

请点击确认

马上提升浏览体验

Canvas UI 当你的网页成为画布

GITHUB 前端 阅读:0
9/2/2026 11:36:09 AM

简介:Canvas UI 是首个基于 HTML-in-Canvas API 的开源组件库,让 GPU 特效在真实、可交互的网页内容上运行。文本可选、链接可点、无障碍保留,同时享受液态玻璃、火焰、流体模拟等 35 种视觉特效。 关键字:Canvas UI, HTML-in-Canvas, WebGL, WebGPU, 前端组件库

Canvas UI

说明 网址
官方文档 https://canvasui.dev/docs
组件预览 https://canvasui.dev/playground
GitHub 仓库 https://github.com/DavidHDev/canvas-ui
什么是 HTML-in-Canvas?

HTML-in-Canvas 是 WICG 正在孵化的实验性 API,允许将 DOM 子树布局在 <canvas> 内部,通过 drawElementImage 捕获实时内容作为纹理,再用 WebGL/WebGPU 着色器进行变形处理。关键之处在于:原始 DOM 仍然是活的——文本可选中,链接可点击,无障碍树保留。


为什么 Canvas UI 与众不同

大多数视觉特效库的做法是:在内容上方盖一层 canvas,绘制“假的”动画。这意味着你看到的火焰、流体只是装饰,与页面内容毫无关系。

Canvas UI 走了一条截然不同的路。它读取你页面中真实、可交互的 DOM,将其作为纹理上传到 GPU,然后用着色器对这张“活的快照”进行实时变形。

效果是:液态效果扭曲的是真实的按钮,玻璃透镜放大的是真实的文字,火焰燃烧在真实的卡片边缘。当你点击被扭曲的按钮时,它仍然正常工作。

实验性技术的现实

要获得完整体验,用户需要在 Chrome 中启用 canvas-draw-element 标志,或使用 Origin Trial 令牌。该试用期从 Chrome 148 持续到 Chrome 150,令牌仅绑定单个域名。其他浏览器(Safari、Firefox)尚未实现此 API,但组件会优雅降级为纯 WebGL 叠加层,内容仍然可用。


35 种组件,覆盖从流体到故障艺术

Canvas UI 目前提供 35 个组件,持续增加中。每个组件都同时提供 WebGL(GLSL)和 WebGPU(WGSL 通过 vgpu)两个渲染器版本。

🌊 流体与运动

  • Liquid:指针驱动的流体模拟,页面仿佛在指尖融化
  • Ripple:每次点击泛起水波纹
  • Cloth:织物在风中起伏
  • Droplets:雨滴顺着屏幕滑落,模糊背景如雾气窗户

🔥 火焰与能量

  • Blaze:火花、烟雾与热扭曲
  • Flame Wrap:任意元素边缘燃烧的火焰边框
  • Force Field:能量护盾,点击产生冲击波

💎 玻璃与光学

  • Glass:跟随光标的水晶球透镜
  • Frost:冰霜在光标下融化又冻结
  • Magnify:科幻扫描镜头带 HUD 准星

📼 复古与故障

  • VHS:磨损磁带波形、色度溢出与颗粒
  • Glitch:数字故障失真效果

开发体验:复制源码,而非安装包

Canvas UI 采用 shadcn 兼容的注册表分发方式。你通过 CLI 命令将组件源码直接复制到项目仓库中:

npx shadcn@latest add @canvas-ui/liquid-react

源码落在 components/canvasui/ 目录下,完全属于你,可以随意修改、扩展。切换框架只需更换命令中的后缀:

npx shadcn@latest add @canvas-ui/liquid-vue
npx shadcn@latest add @canvas-ui/liquid-svelte
npx shadcn@latest add @canvas-ui/liquid-solid

六个框架全覆盖:React、Solid、Preact、Vue、Svelte、原生 Vanilla JS。

使用示例

import { Liquid } from "@/components/canvasui/Liquid";

export default function Page() {
  return (
    <Liquid>
      <YourInteractiveContent />
    </Liquid>
  );
}

大多数组件是包裹式的:把你的内容放进去,特效运行在上面,交互完全保留。


扎实的工程实现

华丽的视觉背后,是对性能的克制:

  • 离屏暂停:组件离开可视区域时,通过 IntersectionObserver 停止动画循环
  • 尊重偏好:遵循 prefers-reduced-motion 设置
  • 卸载清理:组件卸载时释放纹理、程序和事件监听器
  • 零配置:自包含,合理的默认值,完整的 TypeScript 类型
使用建议

InfoQ 的拆解文章给出了一条重要建议:一个亮眼的特效胜过六个。避免在仪表盘、结账流程和文档网站中使用这些效果——它们更适合作为引导页、作品集或品牌体验页的点睛之笔。


总结

Canvas UI 代表了一种理念的转变:网页不应该只是在 canvas 上“画”出来的静态图像,页面本身就可以是画布的输入。通过 HTML-in-Canvas API,它让 GPU 特效与真实的、可访问的、可交互的 DOM 共存,而非替代它们。

对于前端开发者而言,这是一个值得关注的实验性项目——它展示了 WebGPU 时代 UI 表达的潜在方向,同时以 shadcn 注册表的方式保持了极低的集成门槛。你需要做的只是启用一个 Chrome 标志,然后决定:哪一个特效值得成为你页面的“那一刻”。

🔥 当期热点:Canvas UI 于 2026 年 7 月开源发布,9 月发布 35 个组件版本,目前在 GitHub 已获得超过 4,600 星标,被 shadcn 官方称为“我们见过的最令人印象深刻的注册表之一”。 📊 冷知识:Canvas UI 采用 MIT + Commons Clause 许可证——允许商业使用,但不允许转售这些组件本身。