Figma 到纯 CSS 单文件技能(零脚本 & 一体化)
本技能指导 Agent 将 Figma 设计转换为 1 个独立的单文件 HTML,仅使用内部 <style> 标签和图片/SVG,绝对不包含任何 <script> 标签,完美优化用于浏览器显示和 A4 打印 / PDF 导出(黄金比例,无偏移)。
1. 目的与应用范围
在以下情况下使用此技能:
- 用户要求创建无脚本(No-Script / Zero-JS)的 HTML/CSS。
- 需要将所有内容打包到 1 个独立的 HTML 文件(All-in-one HTML)。
- 界面模板用于:文档打印 / A4 合同(Print to PDF)、保险/理赔表格、HTML 电子邮件模板、嵌入到禁用 JavaScript 的移动端 App Webview,或禁止脚本的高安全 CMS/Sandbox。
2. 强制性原则(硬性约束)
-
绝对 0 个
<script>标签(严格零脚本):- 禁止:
<script src="https://cdn.tailwindcss.com"></script>或任何 CDN 脚本。 - 禁止:内联 Tailwind 配置或运行 JavaScript 的
<script>标签。 - 禁止:内联 JS 事件处理器属性,如
onclick="..."、onload="..."。
- 禁止:
-
所有 CSS 完全位于 1 个内部
<style>标签中:- 所有 CSS 格式代码都放在 HTML 文件
<head>中的<style>标签内。 - 不从外部导入 CSS(除非用户需要 Figma 标准字体,则 Google Fonts 除外)。
- 所有 CSS 格式代码都放在 HTML 文件
-
图片与矢量管理:
- 位图(PNG/JPG/WebP):下载到内部目录
assets/<slug>/,并通过<img src="assets/<slug>/ten-anh.png" alt="..." />标签引用。 - 矢量图标 / 标志:优先以内联
<svg>或<img src="assets/<slug>/icon.svg">直接嵌入。
- 位图(PNG/JPG/WebP):下载到内部目录
-
不使用 Canvas 绝对坐标:
- 禁止对整体布局框架使用
position: absolute; top: ...px; left: ...px;。 - 必须使用 CSS Grid 和 Flexbox 来创建自然的布局结构。
- 禁止对整体布局框架使用
-
CSS 变量与设计令牌:
- 在
:root中声明从 Figma 提取的所有颜色、尺寸和字体::root { --color-primary: #0E4E96; --color-secondary: #F58220; --color-text-main: #1E293B; --color-border: #E2E8F0; --font-main: 'Barlow', -apple-system, BlinkMacSystemFont, sans-serif; }
- 在
-
A4 打印与 PDF 导出标准(100% 防偏移 A4 打印规则):
- Figma 单位对于 A4 纸张的本质:
- Figma 中的 A4 画板始终具有标准打印尺寸:$595.28 \times 841.89$ 图形点 (PostScript Points -
pt),精确对应 $210\text{mm} \times 297\text{mm}$(ISO 216)。 - 禁止:直接将 Figma 测量值赋给
px(例如width: 595.28px)。在 Web 的 96 DPI 下,$595.28\text{px}$ 仅等于 $157.5\text{mm}$(仅占 A4 页面的 $75%$),导致 A4 打印预览 ($210\text{mm}$) 会收缩并在右边留下 $52.5\text{mm$ 的空白。 - 必须:对所有尺寸参数、字体大小、内边距、外边距使用
pt单位(或标准mm单位)。A4 框架设置width: 595.28pt(或210mm)和height: 841.89pt(或297mm)。
- Figma 中的 A4 画板始终具有标准打印尺寸:$595.28 \times 841.89$ 图形点 (PostScript Points -
- 页脚与页眉条 100% 全宽:
- 页脚颜色条或页眉条必须设置
width: 100%;并结合position: absolute; bottom: 0; left: 0; right: 0;,而不是固定设置width: 595.28px/pt,确保颜色条始终从纸张左边缘覆盖到右边缘。
- 页脚颜色条或页眉条必须设置
- 必须启用打印背景颜色:
- 在
*, *::before, *::after和@media print中声明-webkit-print-color-adjust: exact !important; print-color-adjust: exact !important;。
- 在
- 必需的
@page和@media print块:@page { size: A4 portrait; margin: 0; } @media print { *, *::before, *::after { -webkit-print-color-adjust: exact !important; print-color-adjust: exact !important; } html, body { width: 210mm !important; height: 297mm !important; margin: 0 !important; padding: 0 !important; background: #FFFFFF !important; overflow: hidden !important; } .a4-page { width: 210mm !important; height: 297mm !important; min-width: 210mm !important; min-height: 297mm !important; max-width: 210mm !important; max-height: 297mm !important; margin: 0 !important; padding: 0 !important; box-shadow: none !important; page-break-after: avoid !important; page-break-inside: avoid !important; } }
- Figma 单位对于 A4 纸张的本质:
3. 单文件 HTML 模板结构(纯 CSS A4 打印就绪)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>页面标题 / 表单</title>
<!-- 可选:如果 Figma 要求特定字体 -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,400;0,600;0,700;0,800;1,400;1,600;1,700&display=swap" rel="stylesheet" />
<style>
/* 1. 基本重置 */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-print-color-adjust: exact !important;
print-color-adjust: exact !important;
}
/* 2. 设计令牌 */
:root {
--color-primary: #0E4E96;
--color-accent: #F58220;
--color-text: #111827;
--color-text-muted: #6B7280;
--color-bg: #FFFFFF;
--color-border: #231F20;
--font-family: 'Barlow', -apple-system, BlinkMacSystemFont, sans-serif;
}
/* 3. 基础主体:屏幕显示美观 */
body {
font-family: var(--font-family);
color: var(--color-text);
background-color: #E2E8F0;
margin: 0;
padding: 24px 0;
display: flex;
justify-content: center;
align-items: flex-start;
-webkit-font-smoothing: antialiased;
}
/* 4. 标准 A4 框架 (595.28pt x 841.89pt = 210mm x 297mm) */
.a4-page {
position: relative;
width: 595.28pt;
height: 841.89pt;
min-width: 595.28pt;
min-height: 841.89pt;
background-color: var(--color-bg);
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
box-sizing: border-box;
overflow: hidden;
margin: 0 auto;
}
.page-content {
position: relative;
z-index: 2;
width: 532.96pt;
margin: 0 auto;
padding-top: 21.97pt;
}
/* 全宽页脚条 */
.footer-bar {
position: absolute;
bottom: 0;
left: 0;
width: 100%;
height: 19.63pt;
background-color: var(--color-primary);
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 28.94pt;
box-sizing: border-box;
z-index: 10;
}
/* 5. A4 打印 & 防偏移 PDF 导出配置 */
@page {
size: A4 portrait;
margin: 0;
}
@media print {
html, body {
width: 210mm !important;
height: 297mm !important;
margin: 0 !important;
padding: 0 !important;
background: #FFFFFF !important;
overflow: hidden !important;
}
.a4-page {
width: 210mm !important;
height: 297mm !important;
min-width: 210mm !important;
min-height: 297mm !important;
max-width: 210mm !important;
max-height: 297mm !important;
margin: 0 !important;
padding: 0 !important;
box-shadow: none !important;
page-break-after: avoid !important;
page-break-inside: avoid !important;
}
}
</style>
</head>
<body>
<!-- 语义化 HTML5:没有任何 <script> 标签 -->
<main class="a4-page" id="print-page">
<div class="page-content">
<!-- 从 Figma 转换而来的布局内容 -->
</div>
<footer class="footer-bar">
<!-- 全宽页脚条 -->
</footer>
</main>
</body>
</html>
4. 5 步执行流程(纯 CSS 单文件)
- 步骤 1(读取 Figma 数据):调用
get_figma_data提取层结构、自动布局、字体、颜色和尺寸。识别 A4 纸尺寸($595.28\text{pt} \times 841.89\text{pt}$)。 - 步骤 2(下载资源):将 PNG/JPG 图片和 SVG 下载到
assets/<slug>/目录。 - 步骤 3(构建 HTML + 纯
<style>):- 在 HTML 文件的
<style>标签中编写所有 CSS。 - 应用
pt(或转换为mm)单位系统,为全宽页脚条使用width: 100%。 - 确保 100% 不插入
<script>标签。
- 在 HTML 文件的
- 步骤 4(启动浏览器并验证打印):
- 通过本地服务器或文件 URL 打开 HTML 文件。
- 检查屏幕视图(Screen view)。
- 必须检查打印预览:使用 Playwright 的
emulateMedia({ media: 'print' })或通过page.pdf({ format: 'A4', margin: { top: 0, bottom: 0, left: 0, right: 0 }, printBackground: true })导出 PDF 进行验证:确保正好 1 页(1/1),无偏移,页脚 100% 全宽。
- 步骤 5(6 点偏差审计):比较 1:1 匹配度,自行修复
<style>中的 CSS,直到达到 100% 匹配度。
