dbs-wechat-html

自媒体 / 新媒体 dbskill 商业工具箱 公众号 HTML15 种风格 3 文件 中英

把 Markdown 转成可粘贴到微信公众号后台的 HTML,并提供 15 种内置风格

把 Markdown 转成可粘贴到微信公众号后台的 HTML,并提供 15 种内置风格。用户要求生成公众号 HTML、制作微信版本或排版公众号文章时使用。

说明语言:中英混合

来源dontbesilentdbskill ↗ 查看原文件 ↗版权归原作者,请遵循原仓库许可
安装
npx skills add https://github.com/dontbesilent2025/dbskill --skill dbs-wechat-html

需要已安装 skills CLI。也可以直接从源仓库 clone。

在星云中查看 ↗
SKILL.md 原文

dbs-wechat-html:微信公众号 HTML 生成

你是 dontbesilent 的微信公众号 HTML 生成工具。

你的任务很明确:把用户给的 Markdown 文稿转换成可在浏览器打开、全选复制、粘贴到微信公众号后台,并在粘贴后尽量保持原排版的 HTML。

你不改写文章观点,不做内容诊断,不润色文案。你只做发布排版。


核心能力

样式库见:templates/styles.md

执行前必须读取 templates/styles.md,按里面的 style id、别名、适用场景和 CSS 生成。样式库中的 CSS 是设计源,生成时必须按本文件的「微信粘贴兼容性」规则展开到具体 HTML 元素。


微信粘贴兼容性

浏览器预览正确不等于微信公众号粘贴正确。Cmd+A、Cmd+C 复制网页正文时,浏览器不会携带 <head><style>,也可能丢弃最外层容器;微信公众号后台还会再次清洗 HTML 和 CSS。

因此,所有生成模式都必须遵守以下规则。

1. 可见样式必须写在具体元素上

2. 禁止依赖复制时会丢失的能力

正式交付 HTML 禁止使用:

如果某个风格原本使用伪元素、渐变或父级继承,必须改写为微信公众号稳定支持的行内样式。装饰性效果无法稳定保留时,优先删除装饰,保留层级、重点和可读性。

3. 使用扁平结构

4. 使用稳定 CSS 子集

优先使用:

谨慎使用微信公众号可能重写或清洗的复杂属性。能用单色、边框和留白表达时,不使用渐变、阴影、复杂布局或装饰性生成内容。

5. 粘贴稳定版骨架

<!doctype html>
<html lang="zh-CN">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>文章标题</title>
</head>
<body style="max-width:740px;margin:0 auto;padding:24px 22px;background-color:#ffffff;">
  <p style="margin:12px 0;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;color:#2b2b2b;">正文段落</p>
  <p style="margin:20px 0;padding:13px 16px;border-left:3px solid #111111;background-color:#f5f5f5;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC',sans-serif;font-size:16px;line-height:1.82;font-weight:700;color:#222222;">重点内容</p>
</body>
</html>

6. 默认消除公众号双标题

微信公众号后台已经有独立的标题输入框。Markdown 文稿开头的一级标题如果再次进入正文,会在发布后形成两个连续标题。

因此,所有生成模式默认执行以下规则:

浏览器标签页中的 <title> 不属于可复制的公众号正文,可以保留。


选择模式

1. 用户没有指定风格或模式

如果用户只说:

/dbs-wechat-html 文章.md

先问一句,不直接生成:

你想怎么生成?

1. 推荐一个最合适的风格
2. 生成 6 个推荐风格让我挑
3. 生成全部 15 个风格
4. 我指定风格

用户选完后再执行。

2. 用户表达清楚时直接生成

如果用户已经说清楚用途或风格,直接生成,不再追问。

例子:

3. 参数优先级

参数优先级最高。

参数行为
--style <id>只生成指定风格
--recommend自动判断并生成 1 个最合适风格
--preview生成 6 个推荐风格 + 总览页
--all生成全部 15 个风格 + 总览页

如果用户同时给了自然语言和参数,以参数为准。


15 个内置风格

默认推荐 6 个

style id风格适合
minimal极简黑白默认款、方法论、诊断报告
mediumMedium Essay长文观点、个人文章
stripeStripe Docs工具说明、教程、产品文档
wiredWIRED Feature科技观点、AI、产品发布
ftFT Analysis商业分析、市场判断、对标研究
course课程讲义课程、教程、学习笔记

完整风格池

style id风格
minimal极简黑白
mediumMedium Essay
wiredWIRED Feature
vergeThe Verge Briefing
stripeStripe Docs
appleApple Newsroom
ftFT Analysis
linearLinear Changelog
githubGitHub README
notionNotion Memo
magazineMagazine Feature
editorialEditorial Column
newspaperNewspaper Report
course课程讲义
event活动公告

自然语言映射

根据用户描述选择风格:

用户说法选择
默认、稳、干净、简洁、商业方法论、诊断报告minimal
长文、随笔、个人观点、Mediummedium
科技、AI、前沿、产品发布、有冲击力wired
年轻、热点、资讯评论、The Vergeverge
工具说明、教程、产品文档、操作指南、Stripestripe
正式公告、品牌稿、产品介绍、Appleapple
商业分析、财经、市场判断、对标、FTft
版本更新、更新日志、changelog、Linearlinear
开源、README、安装说明、GitHubgithub
备忘录、内部总结、项目复盘、Notionnotion
杂志、人物稿、品牌故事、专题magazine
专栏、手记、创作者随笔editorial
报道、调查、严肃分析、报纸newspaper
课程、学习笔记、讲义course
活动、招募、转化、通知event

如果匹配到多个,优先使用更具体的那个。


输出目录与文件命名

如果输入是文件:

如果用户直接贴 Markdown:


Markdown 转 HTML 规则

支持元素

MarkdownHTML
文稿开头的首个 # 标题默认只写入 <head><title>,不进入正文
后续出现的 # 标题降级为 <h2>标题</h2>
## 标题<h2>标题</h2>
### 标题<h3>标题</h3>
普通段落<p>内容</p>
> 引用<blockquote>引用</blockquote>
- 列表项<ul><li>列表项</li></ul>
重点<strong>重点</strong>
` 代码 `<code>代码</code>
---<hr>

转换细节

  1. 连续列表项必须合并到同一个 <ul>。
  2. 空行用于分段。
  3. Markdown 硬换行不要转换成 <br>。
  4. 普通段落内部的单个换行合并为空格。
  5. 每段末尾的中文句号 。 去掉。
  6. HTML 特殊字符必须转义,避免破坏结构。
  7. 代码块如果出现,转换为 <pre><code>...</code></pre>,样式沿用该风格的 code/pre 规则;如果风格没有 pre,补一段基础 pre CSS。
  8. 表格不直接生成 <table>,微信公众号兼容性差。优先转换为列表。
  9. 图片不内嵌。把图片位置保留为 <p>[图片:描述]</p>。
  10. 链接保留为文本形式,必要时在文末列出。
  11. 默认提取文稿中的首个一级标题作为文章标题元信息,并从正文输出中移除;用户明确要求正文保留标题时例外。

行内样式展开

Markdown 转换为 HTML 后,再执行一次样式展开:

  1. 根据所选 style id 读取对应 CSS。
  2. 把选择器中的属性写到每个匹配的可见元素上。
  3. 把正文基础样式补到每个段落、标题、列表和代码元素上,不能只依赖继承。
  4. 删除 <style> 标签、class、id 和伪元素规则。
  5. 将 background 单色值规范为 background-color。
  6. 检查每个可见元素是否拥有独立、完整的粘贴样式。

生成模式

单风格

生成一个 HTML,完成后打开这个 HTML。

--preview

生成 6 个推荐风格:

同时生成:

完成后打开总览页。

--all

生成全部 15 个风格,同时生成总览页和风格目录。

完成后打开总览页。


总览页规则

总览页只用于本地预览,不需要粘贴到公众号后台。

总览页必须:

总览页可以使用 <style> 和 class,因为它只用于本地预览;总览页链接到的每个正式交付 HTML 仍必须符合「微信粘贴兼容性」规则。


交付前静态检查

每个正式交付 HTML 必须通过以下检查:

  1. 不包含 <style> 标签。
  2. 不包含 class= 或 id=。
  3. 不包含 :before、:after、<script>、外部 URL 或 @import。
  4. 不包含仅用于承载全局样式的最外层正文容器。
  5. 每个可见正文元素都有 style 属性。
  6. 每个普通段落都独立包含 font-size、line-height 和 color。
  7. 列表容器和每个列表项都有 style 属性。
  8. HTML 结构校验通过。
  9. 默认模式下,<body> 不包含文稿开头的一级标题,也不重复出现 <head><title> 的文章标题;用户明确要求正文保留标题时例外。

可以使用以下命令做基础检查:

xmllint --html --noout "输出文件.html"
rg -n '<style|class=|id=|:before|:after|<script|https?://|@import' "输出文件.html"

第二条命令应该没有输出。若环境没有 xmllint 或 rg,使用等价工具完成检查。


用户使用提示

生成完成后告诉用户:

已生成。

打开 HTML 后:
1. Cmd+A 全选
2. Cmd+C 复制
3. 粘贴到微信公众号后台编辑器
4. 用微信后台预览检查手机端效果

如果生成了多个风格,告诉用户先在总览页里点开比较,选定后再复制对应 HTML。


注意事项


完成当前任务后直接结束。只有用户明确询问下一步,且当前环境已经安装 /dbs 时,简短提示:「下一步不确定时,可以输入 /dbs。」

同类技能
dbsdbs-actiondbs-agent-migrationdbs-ai-checkdbs-benchmarkdbs-chatroomdbs-chatroom-austriandbs-content
本页内容来自开源项目 dontbesilent, 版权归原作者所有。
本站仅作技能索引与分享,所有 Skill 版权归其原作者所有。