# Phase 5+ · 精美 HTML 报告生成方法论(跨阶段 · 贯穿 Phase 5/6) > **跨阶段定位**:本文档不是 Phase 5 的一部分,而是**贯穿 Phase 5(渲染)+ Phase 6(交付)的视觉设计语言系统**。 > **目标**:把一份「能跑」的 HTML 报告升级为「可直接发给客户 / 董事会 / 投资人」的精美级别报告。 > **适用对象**:写章节 JS 模块的工程师 / 把 AI 产出的骨架升级的审美设计师 / 最终质检的交付 PM。 --- ## 🎯 什么叫「精美」 基于三个落地项目(肝纯片 737 KB / 猴菇饮 604 KB / 乳酸菌儿童版 464 KB),总结出的**精美报告三条红线**: 1. **可以直接全屏演示**(不用任何后期处理) 2. **发截图到任何场合都不掉档**(朋友圈 / 董事会 / 投资路演 / 行业报告) 3. **单文件无依赖**(500 KB-1 MB 的 HTML,发邮件 / 传 IM 都能打开) 反面参考: - ❌ Bootstrap 默认的 Admin Dashboard 风 - ❌ 数据像 Excel 截图直接贴 - ❌ 整屏只有文字没有视觉重音 - ❌ 颜色用默认 Material 或 Ant Design 蓝 - ❌ 字体用默认无衬线(无 Mono 强调) --- ## 🎨 1. 视觉设计语言系统 ### 1.1 三层深色背景 ```css --bg-0: #0A0A0A; /* 最底层 · 报告画布 · 几乎纯黑 */ --bg-1: #111111; /* 中层 · section 内容区 + 卡片 */ --bg-2: #1A1A1A; /* 上层 · hover / 强调块 */ --bg-3: #252525; /* 顶层 · 高亮 tab / 选中态 */ ``` **为什么深色**:数据类报告深色能让彩色数字/图表更醒目,且对眼睛友好(演示 1 小时不累)。 ### 1.2 三层文字灰阶 ```css --text-1: #F5F5F5; /* 主文字 · 标题 · VOC 原文 */ --text-2: #A8A8A8; /* 副文字 · 说明 · subtitle */ --text-3: #6B6B6B; /* 灰阶 · 元信息 · 时间戳 / 平台标签 */ ``` **关键纪律**:**一屏内灰阶不超过 3 层**。超过 3 层视觉会散。 ### 1.3 边框系统 ```css --border: rgba(255,255,255,0.08); /* 默认边框 · 卡片 / 表格 */ --border-strong: rgba(255,255,255,0.16); /* 强边框 · 表格 header / 分组 */ ``` **禁忌**:不要用实色边框(如 `#333`),深色背景里实色边框会显得生硬。必须用 `rgba(白,0.0X)`。 ### 1.4 圆角系统 ```css --radius-sm: 4px; /* 小标签 / 代码块 */ --radius-md: 8px; /* 卡片 / 按钮 · 主用 */ --radius-lg: 12px; /* 大卡 / Hero 区 */ ``` **纪律**:**一份报告里圆角风格统一**。要么全尖角(0px),要么都 8px,不要混搭。 ### 1.5 字体系统(双字体) ```css --font-head: 'Inter','Noto Sans SC','PingFang SC','Microsoft YaHei',system-ui,sans-serif; --font-body: 'Inter','Noto Sans SC',system-ui,sans-serif; --font-mono: 'JetBrains Mono','SFMono-Regular',Consolas,monospace; ``` **为什么双字体**: - `font-head / font-body` · 西文 Inter + 中文 Noto Sans SC:现代感 + 中英混排不掉档 - `font-mono` · **所有数字、平台名、时间戳、百分比** 必须走 Mono,让数据"立"起来 **精美判断**:看报告里的数字 —— 如果平台名(XHS / DOUYIN)、点赞数(♥2.3w)、价格(¥298)全部是 Mono,就对了。 ### 1.6 字重系统 | 字重 | 用途 | 示例 | |---:|---|---| | `900` | Cover title / Chapter divider | 5rem 巨标题 | | `800` | Section head / Agenda 标题 | 1.9-2.4rem | | `700` | eyebrow / 表格 header / 强调 | 0.72-0.95rem | | `400` | 正文 / subtitle | 0.85-1rem | | `300` | 元信息 / 时间戳 | 0.72rem 可选 | **纪律**:字重**跨度大**才有层次感。不要 500-600 中间字重滥用。 ### 1.7 字号系统(语义化) ```css /* 标题组 */ .cover-title { font-size: 3.6rem; } /* Cover 封面 */ .divider-title { font-size: 5rem; } /* Chapter 分隔 */ .agenda-title { font-size: 2.4rem; } /* 目录大标题 */ .section-title { font-size: 1.9rem; } /* 子章节 Hero */ /* 正文组 */ .body-large { font-size: 1.1rem; } /* Cover subtitle / Insight */ .body { font-size: 0.95rem; } /* 默认正文 */ .body-sm { font-size: 0.88rem; } /* VOC 原文 */ /* 元信息 */ .label { font-size: 0.82rem; } /* 标签 / 分类 */ .meta { font-size: 0.78rem; } /* 元信息 */ .eyebrow { font-size: 0.72rem; } /* 大写眉标 */ ``` ### 1.8 间距系统(8px 网格) ``` 4 / 8 / 12 / 16 / 20 / 24 / 32 / 40 / 48 / 60 / 80 / 120 ``` - 卡片内 padding:`14-20px` - 卡片之间 gap:`12-16px` - section 内 padding:`60px 48px` - section 之间:各占 `100vh`,用 `border-bottom: 1px solid --border` 分 - Chapter divider:`padding: 120px 40px` **禁忌**:不要用 `13px` / `15px` / `17px` / `23px` 这种奇数值,破坏网格对齐。 ### 1.9 品类专属主色 · BRAND 调色板 **每个品类一个主色 + 4-6 个辅色**。下面是三个案例的调色板: | 品类 | MAIN | 次色 | tone 哲学 | |---|---|---|---| | 肝纯片 DMY | `#4A90E2` 科技蓝 | `#722F37` 酒红 · `#D4AF37` 酒精金 | 理性 · 严肃 · 醒目 | | 猴菇饮 | `#B87333` 温润铜 | `#1A7C5F` 暗绿 · `#F5E6D3` 米白 | 东方 · 草本 · 温润 | | 乳酸菌儿童 | `#8FD3B8` 薄荷 · `#FFB6A3` 桃色 | `#B5A3E0` 淡紫 · `#FFCC33` 亮黄 | 明快 · 柔和 · 分龄 | **选色心法**: 1. 先问:品类给用户的第一感觉是「紧张」「放松」「严肃」「温暖」「专业」? 2. 查:同品类三个头部竞品的主色 —— **避开**它们 3. 选:再挑一个 LAB 色彩距离较远的主色,辅色用 HSL 偏移 ±30° 4. 验:主色在深色背景上对比度 ≥ 4.5(用 https://webaim.org/resources/contrastchecker/) --- ## 🏗️ 2. Slide-deck 式布局模式 ### 2.1 Section = Slide 原则 ```css .report-section { min-height: 100vh; /* 每个 section 占满一屏 */ padding: 60px 48px; border-bottom: 1px solid var(--border); scroll-margin-top: 20px; /* 平滑滚动锚点 */ } .section-inner { max-width: 1280px; /* 内容不超过 1280px */ margin: 0 auto; } ``` **为什么 100vh**:让报告天然变成幻灯片,用 `PageDown` / 空格键就能一屏一屏翻。 ### 2.2 三种特殊 section #### Cover 封面 ```css .cover { background: linear-gradient(180deg, #0A0A0A 0%, #111 100%); } ``` - Cover title: 3.6rem · 分两行 · 品类色 strong - 4 个 KPI 数字条(VOC 总量 / 平台数 / 竞品数 / 章节数) - 底部灰阶元信息(采集时间 / 平台分布) #### Agenda 目录 - 大标题:`8 章 × N 子章` - 2 列 grid · 每条 = `Ch N · 标题 + 一句话 hero line` - 每条左 4px 品类色 border · 可点击跳转 hash #### Chapter Divider 章分隔 ```css .divider { background: linear-gradient(180deg, #0F0F0F 0%, #000 100%); display: flex; align-items: center; padding: 120px 40px; text-align: center; } ``` - eyebrow: `CHAPTER 01`(大写 · letter-spacing 0.35em · 品类色) - title: 5rem · 字重 900 - hero line: 一句话 · 1.15rem · `max-width: 800px` ### 2.3 Grid 布局响应式 ``` 1 列 · Hero / 单行文字 2 列 · VOC 卡并列 / 对比 / 理论 mapping 3 列 · 痛点卡 / 决策列表 / 小 KPI 4 列 · Cover KPI / StatStrip ``` **推荐语法**: ```html
``` ### 2.4 滚动动线 · 4 种节奏 | 节奏 | 用途 | 视觉处理 | |---|---|---| | `urgent` | Ch1 诘问起点 | 红/橙高亮 · 大字数字 | | `analytical` | Ch2/3 竞品 VOC | 冷色 · 表格 · 矩阵 | | `insight` | Ch4 KANO | 紫/蓝 · 渐变 Hero 金句 | | `empathy` | Ch5 场景 | 暖色 · 场景插图位 · VOC 多 | | `strategic` | Ch6 无人地带 | 绿色 · 2x2 矩阵 · 高亮 | | `forward` | Ch7 新机会 | 金色 · 上升感 · 虚实结合 | | `blueprint` | Ch8 4P | 蓝黑 · 表格密 · 数字多 | 在 section 上加 `data-tone="..."`,可用 CSS 按 tone 切换强调色: ```css [data-tone="urgent"] { --accent: var(--coral); } [data-tone="strategic"]{ --accent: var(--jiang-green); } ``` --- ## 🧱 3. 4 类核心视觉模块 每个子章节的 "5 件套" 在视觉上对应 4 类模块: ### 3.1 Section Head(Hero) ```html
1.1 · 成人爆款 vs 儿童心智

为什么 乳酸菌素片 成人爆款,儿童心智却是空白

7.9 亿成人市场已验证 OTC 信任,但儿童 SKU 不到 5%,家长搜索"儿童乳酸菌"第一反应仍是妈咪爱或合生元。
``` **三段式纪律**: - eyebrow(品类色 · Mono · 大写 · letter-spacing) - title(大字号 · 800 字重 · 至少一个 `` 品类色强调) - subtitle(灰 `text-2` · 行高 1.75 · 最大 900px 宽) ### 3.2 数据组(StatStrip / VocCard) #### StatStrip · KPI 数字条 ```html
7.9亿
成人乳酸菌素片市场
vs 儿童 0.4 亿
``` **精美点**: - 背景用 `主色0C`(12% 透明度)· 边框 `主色33`(20% 透明度) - 数字 900 字重 · 2rem · Mono + 品类色 - delta 用更小字号 + Mono,和数字叠加 #### VocCard · 证据卡 ```html
XHS · 小橘子妈妈 · 上海
♥2.3k
「宝宝 2 岁抗生素后吃了一周,大便好多了,比妈咪爱便宜还不用冷藏」
``` **精美点**: - **3-4px 品类色 left border**(这是视觉识别码,所有报告一致) - 顶部 flex 两端:平台 + 昵称 + IP(左)· ♥ 点赞(右) - 平台名大写 · Mono · 品类色 · 0.1em letter-spacing - 正文用 `「」` 中文引号包裹 · 行高 1.7 · 字号 0.88rem ### 3.3 结构组(CompareTable / Matrix2x2 / TheoryBox) #### CompareTable · 对比表格 ```html
维度
本品
``` **精美点**: - header 底边 `2px 主色44`,行底边 `1px border` - 本品列整列品类色加粗,对手列用 `text-2` 淡化 - letter-spacing 0.05em 让表头"透气" #### Matrix2x2 · 无人地带四象限 关键精美法则:**第 4 象限(本品独占)必须用品类色高亮**。 ```html
右下 · 家庭 × 便捷(无人地带)
  • ✨ 本品独占
✅ 机会:分龄装 × 咀嚼片 × 卡通 IP
``` #### TheoryBox · 理论盒 用于 KANO / JTBD / 3C 这类理论 mapping,不抢戏但要清晰。 ```html
📐 KANO 模型 · 五类需求映射
``` ### 3.4 结论组(InsightHero / DecisionList) #### InsightHero · 金句观点卡 ```html
💡 KEY INSIGHT · 关键洞察
乳酸菌素片不是"更便宜的益生菌",而是OTC 药线信任的儿童入口。
``` **精美点**: - 135° 渐变背景(`主色14` → `主色04`) - 2px 品类色边框(注意 alpha 44) - 金句字号 1.1rem · 行高 1.8 · 至少一个 `` #### DecisionList · 落地决策 ```html
🎯 落地决策
P0 · 产品:上架分龄装(1-3/3-6/6-12 岁)咀嚼片 SKU
``` **精美点**: - 决策项左边 **3px 品类色** border - 每条开头用 `P0 · 动词`(加粗 + 品类色 + 动词化) - 2 列布局,避免单列显得稀疏 --- ## 📊 4. 数据可视化 Pattern ### 4.1 StatStrip(已讲) ### 4.2 Progress Bar · 比例条 ```html
妈咪爱 62%
``` ### 4.3 Inline Bar Chart(轻量) ```html
``` **纪律**:尽量不用外部 chart 库。SVG 和纯 div 能画的都别引 Chart.js / ECharts,会破坏单文件无依赖。 ### 4.4 Tag Cloud · 标签云 ```html
#冷链 · 156
``` ### 4.5 Sankey / Flow Diagram(复杂场景) 如果是"决策链"「家长 → 医生 → 药店 → 购买 → 使用 → 复购」这种流程图,推荐**5-6 个方块 + 箭头 Unicode**: ```html
家长焦虑
→
搜索
``` --- ## 🎮 5. 微交互 / 导航 ### 5.1 键盘导航(必装) ```js (function() { const sections = document.querySelectorAll('.report-section'); let idx = 0; function go(i) { idx = Math.max(0, Math.min(sections.length - 1, i)); sections[idx].scrollIntoView({ behavior: 'smooth' }); if (sections[idx].id) history.replaceState(null, '', '#' + sections[idx].id); } document.addEventListener('keydown', (e) => { if (e.key === 'ArrowRight' || e.key === ' ' || e.key === 'PageDown') { e.preventDefault(); go(idx + 1); } if (e.key === 'ArrowLeft' || e.key === 'PageUp') { e.preventDefault(); go(idx - 1); } if (e.key === 'Home') go(0); if (e.key === 'End') go(sections.length - 1); }); if (location.hash) { const i = [...sections].findIndex((s) => '#' + s.id === location.hash); if (i >= 0) idx = i; } })(); ``` ### 5.2 平滑滚动 + 锚点 ```css html { scroll-behavior: smooth; } .report-section { scroll-margin-top: 20px; } ``` ### 5.3 卡片 hover(可选但推荐) ```css .voc-card { transition: background .15s, border-color .15s; } .voc-card:hover { background: var(--bg-2); border-color: var(--border-strong); } ``` ### 5.4 Page Indicator(可选) 在右下角固定一个 `slide X / Y` 小角标: ```html
1 / 38
``` 配合 JS: ```js // 在 keydown 或 scroll 事件里更新 document.getElementById('page-indicator').textContent = `${idx+1} / ${sections.length}`; ``` --- ## 🖨️ 6. 性能 / 交付优化 ### 6.1 单文件无依赖 **必须遵守**: - 所有 CSS inline 写到 `