等等,这帖子戳到我最近在折腾的一个事了。你们知道吗,我上周刚跟设计那边吵了一架,就是因为一个按钮hover状态的小图标改了颜色,结果前端、设计、PM拉了三个群,最后发现是某张切图在sketch里没更新版本,导出的时候还是老颜色。整个流程走下来,半天没了,就为个颜色值。
楼主提到的“git diff根本没法review”这点,我太有感触了。我们团队现在用Storybook维护设计系统,里面很多“文档示例”其实已经是独立的、可交互的HTML/CSS模块了。最直观的好处就是,设计师现在可以直接在PR里review代码变更,他们看diff能看到“这个border-radius从4px改到了8px”,而不是对着两张几乎一样的截图猜哪里变了。视觉回归测试也简单,用puppeteer一跑,截图对比,有差异直接报错,比人眼靠谱多了。怎么说
嗯
不过楼主说“HTML is a native image format”,我觉得这里有个关键前提被忽略了:渲染环境的一致性。PNG之所以是PNG,就是因为它在任何地方打开都一样(忽略色彩管理那些)。但HTML作为“图像”,它的最终呈现严重依赖浏览器引擎、CSS支持度、甚至用户字体。你们记不记得当年那个用CSS画iPhone的哥们?诶那作品换个浏览器可能就崩了。所以这玩法,目前最适合的场景恰恰就是楼主最后提到的——封闭的、可控的设计系统、文档站、或者内部工具界面。在这里,渲染环境是团队自己约定的,甚至能锁死浏览器版本。
哦我听说Figma现在推的Dev Mode,还有国内一些设计工具在做的“代码模式”,底层逻辑跟这个有点像。都不是导出静态资产,而是试图把设计稿变成一个“描述文件”,这个文件在不同上下文(设计工具、代码环境、文档站)里能渲染出适配当时场景的最佳表现。这比单纯的“HTML当图使”又进了一步,它其实是把“设计”本身变成了一个可版本化、可diff的数据源。
另外有个八卦,不知道你们听过没。早几年Airbnb搞过一个叫“Lona”的工具(后来好像没大规模用起来),就是想用JSON来描述界面,然后这个JSON既能生成Sketch文件给设计师用,又能生成iOS/Android/Web的代码。这思路是不是很像?现在看,用HTML/CSS(或者更抽象的DSL)作为这个“中间态”或者“源文件”,可能更接近Web团队的现状。
我比较好奇的是性能。一个复杂的、带交互的“HTML图像”,如果当成静态资源塞进Markdown文档里,用iframe嵌进去,它的加载和渲染开销,跟一张优化过的WebP图片比,哪个更划算?尤其是在移动端。可能对于后台管理系统这类对性能不敏感的场景没问题,但面向C端的活动页这么搞,会不会有点冒险?
还有可访问性(a11y)这块,楼主提了一嘴,这确实是HTML的先天优势。但问题也在这里——如果开发者只是把HTML当“图”来画,用一堆div叠效果,却忽略了语义化标签和ARIA属性,那生成的东西可能比SVG还糟糕,屏幕阅读器直接懵了。所以这要求团队有很强的a11y共识和纪律,不然就是换了一种形式的“不可访问”。
最后扯点远的,我隐约觉得这事跟“低代码/无代码”平台也有点关系。那些平台产出的最终页面,本质上也是一个高度定制化的、可交互的HTML“作品”。嗯如果未来有一种标准或协议,能让这种“作品”能像图片一样被方便地嵌入、引用、甚至二次编辑,那整个前端交付的形态可能真的会变。
你们项目里有没有人开始尝试把一些高频修改的视觉元素(比如数据图表、示意图)做成这种可维护的HTML模块?而不是每次改个数字就重新导图?我想听听具体的实践和踩过的坑。