Files
lidf a777665775 feat: 初始化混沌学园微信公众号 HTML 排版 Skill
- SKILL.md: 完整设计规范(色彩体系、微信公众号兼容规则、图片排版方案)
- scripts/extract_wechat.py: 微信公众号文章抓取脚本
- scripts/build_hundun_html.py: 混沌风格 HTML 生成脚本(组件化)
- examples/hundun-lead-article.html: 领教营二期排版示例
- resources/color-palette.md: 混沌品牌色彩参考
2026-07-22 12:06:55 +08:00

222 lines
9.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: hundun-wechat-layout
description: |
混沌学园风格微信公众号文章 HTML 排版技能。适用于将微信公众号原文章内容(文字+图片)提取后,
以混沌品牌视觉体系(混沌黄 #F5B700 + 石墨黑 #181818 + 原生白底)重新排版生成可直接粘贴到
微信公众号编辑器的纯内联 HTML 代码。支持 Hero 大图 + 瀑布流图墙、时间线卡片、模块卡片等组件。
---
# 混沌学园微信公众号 HTML 排版技能
## 一、适用场景
当用户要求以下操作时,应激活此技能:
- 将微信公众号文章重新排版为混沌学园品牌风格
- 抓取微信公众号文章并生成新的 HTML 排版
- 制作混沌风格的微信推文 HTML 片段
- 生成适用于微信公众号编辑器的纯内联样式 HTML
## 二、核心设计规范
### 2.1 色彩体系
| 角色 | 色值 | 用途 |
|:-----|:-----|:-----|
| **混沌黄 (Primary)** | `#F5B700` | 标题强调、侧边 Accent 条、标签徽章、CTA 按钮、边框点缀 |
| **深金 (Secondary)** | `#D99B00` | 正文中的关键词强调(`<strong>` 标签) |
| **石墨黑 (Dark)** | `#181818` | Hero 顶部看板背景、年份徽章、核心理念卡片、底部 CTA 按钮 |
| **辅助深色** | `#242424` | 深色卡片内部的子容器背景 |
| **原生白底** | `#FFFFFF` | 最外层容器,顺应微信公众号默认白底阅读环境 |
| **极浅灰** | `#F8F9FA` | 常规内容卡片背景(历史年份、报名须知等) |
| **微黄底** | `#FFFDF5` | 模块卡片背景(亮剑/试锋/决衡等课程模块) |
| **正文色** | `#2B2B2B` | 主正文颜色 |
| **辅助正文** | `#333333` | 非卡片区域的段落文字 |
| **二级正文** | `#4E5969` | 卡片内部说明文字 |
| **边框灰** | `#E5E6EB` | 浅色卡片边框 |
| **分割线** | `#D9D9D9` | 虚线分割(报名区域二维码上方) |
### 2.2 排版约束(微信公众号铁律)
> [!CAUTION]
> 以下规则**不可违反**,否则将在微信公众号中渲染异常或被过滤。
1. **最大宽度**`max-width: 667px`(微信公众号最大内容宽度)
2. **移动端内边距**:两侧至少 `4px ~ 8px`,防止内容贴边
3. **100% 内联样式**:所有 CSS 必须写在 `style="..."` 属性内,**严禁** `<style>` 标签、`<link>` 外链、`class` 选择器
4. **禁止标签**`<script>``<link>``<style>``<iframe>``<form>``<input>`
5. **允许标签**`<section>``<p>``<span>``<strong>``<em>``<h1>`~`<h6>``<img>``<div>``<ul>`/`<ol>`/`<li>``<br>``<hr>`
6. **图片防盗链**:所有 `<img>` 标签必须加 `referrerpolicy="no-referrer"`
7. **字体栈**`font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;`
8. **不使用** CSS Grid(兼容性不足),使用 `display: flex` 替代
### 2.3 图片排版方案:Hero 大图 + 瀑布流(推荐方案 B)
每组图片采用以下结构:
1. **首图 Hero Shot**100% 全宽大图):
- 从该组中选取最具视觉冲击力的第一张
- 圆角 `10px`,轻灰边框 `1px solid #E5E6EB`,微阴影 `box-shadow: 0 4px 12px rgba(0,0,0,0.08)`
2. **瀑布流副图(Column-Based Masonry**
- 将剩余图片**交替分配到左右两列独立容器**(奇数索引 → 左列,偶数索引 → 右列)
- 左右列各自 `width: 48.5%`,顶部对齐 `align-items: flex-start`
- 列内图片垂直堆叠,仅用 `margin-bottom: 8px` 分隔
- **关键**:不使用 `flex-wrap` 行内双列(会导致空白),而使用两个独立列容器
```html
<!-- Hero Shot -->
<section style="margin: 12px 0 10px 0;">
<img src="..." referrerpolicy="no-referrer"
style="width: 100%; height: auto; display: block; border-radius: 10px;
border: 1px solid #E5E6EB; box-shadow: 0 4px 12px rgba(0,0,0,0.08);" />
</section>
<!-- Masonry Sub-grid -->
<section style="display: flex; justify-content: space-between; align-items: flex-start;
width: 100%; box-sizing: border-box; margin-bottom: 10px;">
<!-- 左列 -->
<section style="width: 48.5%; box-sizing: border-box;">
<img src="..." referrerpolicy="no-referrer"
style="width: 100%; height: auto; display: block; border-radius: 6px;
border: 1px solid #E5E6EB; box-shadow: 0 2px 6px rgba(0,0,0,0.05);
margin-bottom: 8px;" />
<!-- 更多左列图片... -->
</section>
<!-- 右列 -->
<section style="width: 48.5%; box-sizing: border-box;">
<img src="..." referrerpolicy="no-referrer"
style="width: 100%; height: auto; display: block; border-radius: 6px;
border: 1px solid #E5E6EB; box-shadow: 0 2px 6px rgba(0,0,0,0.05);
margin-bottom: 8px;" />
<!-- 更多右列图片... -->
</section>
</section>
```
> [!WARNING]
> 不要使用横向滚动模式(`overflow-x: auto; display: flex;`)来展示多张图片。
> 在微信公众号中横向滑动体验很差,用户更习惯纵向浏览。
## 三、页面结构模板
一个完整的混沌风格微信推文 HTML 由以下模块**按顺序**组成:
### 3.1 外层容器
```html
<section style="max-width: 667px; margin: 0 auto; box-sizing: border-box;
background-color: #FFFFFF; color: #2B2B2B;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC',
'Hiragino Sans GB', 'Microsoft YaHei', sans-serif;
padding: 12px 4px;">
<!-- 所有内容模块放在这里 -->
</section>
```
### 3.2 Hero 顶部看板(深色反转区域)
- 背景 `#181818`,顶部 `4px` 混沌黄边框线
- 包含:品牌标签(黄底黑字小标签)、标题(白字+黄色关键字)、副标题、Banner 大图
### 3.3 引言区块
- 浅灰背景 `#F8F9FA`,左侧 `4px` 混沌黄 Accent 条
- 排版为左侧高亮线 + 正文段落
### 3.4 核心理念卡片(深色反转)
- 石墨黑背景 `#181818`,内部小卡片 `#242424`
- 左侧 `3px` 混沌黄 Accent 线
- 适用于"既要…又要…"式的对仗金句
### 3.5 时间线年份卡片
- 浅灰背景 `#F8F9FA``1px solid #E5E6EB` 边框
- 年份徽章:黑底黄字 `#181818` 背景 + `#F5B700` 文字
- 标题 + 正文描述 + Hero 大图 + 瀑布流副图
### 3.6 招募要求卡片
- 浅灰背景,左侧 `4px` 石墨黑 Accent 线
- 带 emoji 图标的子标题 + 无序列表
### 3.7 课程模块卡片
- 微黄背景 `#FFFDF5``1px solid #F5B700` 混沌黄边框
- 日期标签用黄底黑字 `background: #F5B700; color: #181818`
- 适用于"亮剑/试锋/决衡"等模块名称
### 3.8 报名须知卡片
- 浅灰背景,信息列表格式
- 底部虚线分割线 + 居中报名二维码
- 二维码只出现一次,`border: 2px solid #F5B700`
### 3.9 底部 CTA 横幅
- 黄色渐变背景 `linear-gradient(135deg, #F5B700 0%, #FFA000 100%)`
- 深色胶囊按钮(客服微信号),**不重复放二维码**
## 四、微信图片抓取与处理工作流
### 4.1 抓取流程
1. **使用 Python `urllib.request` 抓取原文 HTML**`read_url_content` 会被微信 anti-bot 拦截)
2. 设置 User-Agent 为桌面微信:`Mozilla/5.0 ... MicroMessenger/8.0`
3. 将原始 HTML 保存到本地文件
4. 使用正则或 BeautifulSoup 提取 `<img>` 标签的 `data-src``src` 属性
5. 整理图片索引列表 `[序号] URL`
```python
import urllib.request
url = "https://mp.weixin.qq.com/s/..."
req = urllib.request.Request(url, headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/120.0.0.0 Safari/537.36 '
'MicroMessenger/8.0.0'
})
with urllib.request.urlopen(req) as resp:
html_content = resp.read().decode('utf-8')
```
### 4.2 图片引用
- 微信 CDN 图片域名:`mmbiz.qpic.cn`
- 所有 `<img>` 标签必须加 `referrerpolicy="no-referrer"` 绕过 Referer 校验
- 原文图片 URL 可直接在新 HTML 中引用,无需下载到本地
### 4.3 图片分组建议
按文章内容段落/年份/主题将图片分组,每组:
- 控制在 3~7 张为宜
- 第一张选取最具代表性的作为 Hero Shot
- 每组不超过 6 张副图(`max_sub=6`
## 五、常见错误与排查
| 现象 | 原因 | 解决方案 |
|:-----|:-----|:---------|
| 图片显示为裂图 ❌ | 缺少 `referrerpolicy="no-referrer"` | 给所有 `<img>` 添加该属性 |
| 双列图片上下空白大 | 使用了 `flex-wrap` 行内双列 | 改为两个独立列容器 |
| 样式被微信过滤 | 使用了 `<style>` 标签或 `class` | 全部改为内联 `style="..."` |
| 排版溢出/横向滚动 | 图片未设 `max-width: 100%` | 图片加 `width: 100%; height: auto;` |
| 微信抓取返回验证页 | 直接 HTTP 请求被拦截 | 添加 MicroMessenger User-Agent |
| 二维码重复出现 | 在报名区和底部 CTA 都放了 | 二维码只在报名须知区放一次 |
## 六、文件组织
```
skills/hundun-wechat-layout/
├── SKILL.md # 本文件:技能说明与规范
├── scripts/
│ ├── extract_wechat.py # 微信公众号原文抓取脚本
│ └── build_hundun_html.py # 混沌风格 HTML 生成脚本
├── examples/
│ └── hundun-lead-article.html # 示例输出(领教营二期招募文)
└── resources/
└── color-palette.md # 混沌色彩体系参考
```