Figma 轉純 CSS 單一檔案技能(無腳本、一體成型)
此技能指導 AI Agent 將 Figma 設計轉換為僅一個獨立的 HTML 檔案,只使用內部 <style> 與圖片/SVG,絕對不含任何 <script> 標籤,完美最佳化瀏覽器顯示與 A4 列印/精準無偏移的 PDF 輸出。
1. 目的與適用範圍
使用此技能時機:
- 使用者要求產生不使用腳本(No-Script / Zero-JS)的 HTML/CSS。
- 需要將所有內容打包在單一 HTML 檔案(All-in-one HTML)中。
- 介面範本用於:文件列印/A4 合約(列印成 PDF)、保險/理賠申請表、Email 範本 HTML、嵌入禁止 JavaScript 的行動應用程式 Webview,或高度安全禁止腳本的 CMS/沙盒。
2. 強制規則(Hard Constraints)
-
嚴格零腳本(Strict Zero-Script):
- 禁止:
<script src="https://cdn.tailwindcss.com"></script>或任何 CDN 腳本。 - 禁止: 內聯
<script>標籤設定 Tailwind 或執行 JavaScript。 - 禁止: 內聯 JS 事件處理器屬性,如
onclick="..."、onload="..."。
- 禁止:
-
所有 CSS 完全位於單一內部
<style>標籤中:- 所有 CSS 格式代碼放置在 HTML 檔案
<head>中的<style>標籤內。 - 不從外部匯入 CSS(除非使用者需要 Figma 標準字型,此時可引用 Google Fonts)。
- 所有 CSS 格式代碼放置在 HTML 檔案
-
圖片與向量管理:
- 點陣圖(PNG/JPG/WebP):下載至內部目錄
assets/<slug>/,並透過<img src="assets/<slug>/圖片名稱.png" alt="..." />引用。 - 向量圖示/圖標:優先直接嵌入內聯
<svg>或使用<img src="assets/<slug>/icon.svg">。
- 點陣圖(PNG/JPG/WebP):下載至內部目錄
-
禁止使用 Canvas 絕對座標:
- 禁止在整體版面佈局中使用
position: absolute; top: ...px; left: ...px;。 - 強制使用 CSS Grid 與 Flexbox 建立自然結構。
- 禁止在整體版面佈局中使用
-
CSS 變數與 Design Tokens:
- 在
: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 列印與 100% 精準 PDF 輸出規範(ANTI-DRIFT A4 PRINT RULES):
- Figma 中 A4 尺寸的原則:
- Figma 中的 A4 Artboard 始終使用標準列印尺寸:$595.28 \times 841.89$ 圖形點(PostScript Points -
pt),正好對應 $210\text{mm} \times 297\text{mm}$(ISO 216)。 - 禁止: 直接將 Figma 數值轉換為
px(例如width: 595.28px)。在網頁 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 Artboard 始終使用標準列印尺寸:$595.28 \times 841.89$ 圖形點(PostScript Points -
- 頁尾與頁首橫條 100% 滿版:
- 頁尾顏色條或頁首標題列必須設定
width: 100%;搭配position: absolute; bottom: 0; left: 0; right: 0;,而不是固定width: 595.28px/pt,以確保顏色條從左紙邊到右紙邊完全覆蓋 $100%$。
- 頁尾顏色條或頁首標題列必須設定
- 強制啟用列印背景顏色:
- 在
*, *::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 檔案範本(Pure CSS A4 Print Ready)
<!DOCTYPE html>
<html lang="zh-TW">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>頁面標題 / 表單</title>
<!-- 可選:如果 Figma 需要特定字型,可引用 Google Fonts -->
<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. 基本 RESET */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-print-color-adjust: exact !important;
print-color-adjust: exact !important;
}
/* 2. DESIGN TOKENS */
: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. BASE BODY: 螢幕顯示美觀 */
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. 五步驟執行流程(Pure CSS Single-File)
- 步驟 1(讀取 Figma 資料):呼叫
get_figma_data解析圖層結構、Auto-Layout、字型、顏色與尺寸。辨識 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 檔案。
- 檢查螢幕顯示。
- 強制檢查列印預覽:使用 Playwright 的
emulateMedia({ media: 'print' })或透過page.pdf({ format: 'A4', margin: { top: 0, bottom: 0, left: 0, right: 0 }, printBackground: true })匯出 PDF,驗證:確實為單頁(1/1)、無偏移、頁尾 100% 滿版。
- 步驟 5(6 點差異比對):比較 1:1 吻合度,自動修正
<style>中的 CSS,直到達到 100% 吻合。
