公众号是中文内容创作最高频的发布场景之一,但它的编辑器对外部 HTML / CSS 的兼容性极弱,从其他工具粘贴进去经常翻车。理解四个高频坑能省下大量调整时间。
公众号编辑器的样式白名单
公众号粘贴 HTML 的处理流程:
- 解析 HTML
- 遍历每个标签
- 只保留白名单内的 inline style
- 移除所有 class / id / 外联 CSS
白名单大致包括:
- 颜色:
color、background、background-color - 字体:
font-size、font-weight、font-family、line-height - 边距:
padding、margin(部分) - 边框:
border(部分)、border-radius - 文本:
text-align、text-indent、letter-spacing
不在白名单的(display: flex、grid、transform、animation、伪类、媒体查询)全部失效。
实战影响:转换工具必须把所有样式 inline 写到每个标签上——
<!-- 不行:会被剥成纯 div -->
<div class="quote">引言文字</div>
<style>.quote { background: #f5f5f5; padding: 16px; }</style>
<!-- 行:inline 样式 -->
<section style="background: #f5f5f5; padding: 16px; border-left: 4px solid #6c63ff;">
引言文字
</section>
本工具的输出 HTML 体积大约是 Markdown 源文件的 5-10 倍,原因就在 inline 样式重复。
代码块:从 pre 到 span 海
公众号原生没有代码块——白名单连 <pre> 都不在。要在公众号呈现代码高亮,必须把每个语法 token 变成 inline 染色的 <span>:
<section style="background: #1e1e1e; padding: 16px; border-radius: 6px; font-family: Menlo, Consolas, monospace; font-size: 13px; line-height: 1.6; overflow-x: auto;">
<span style="color: #569cd6;">function</span>
<span style="color: #dcdcaa;">hello</span><span style="color: #d4d4d4;">() {</span>
<span style="color: #ce9178;">"world"</span>
<span style="color: #d4d4d4;">}</span>
</section>
一段 30 行代码扩成几 KB HTML 是常态。本工具内置的代码主题:
| 主题 | 风格 | 文章场景 |
|---|---|---|
| GitHub Light | 白底克制彩色 | 技术教程、长文 |
| GitHub Dark | 深蓝灰底 | 通用深色 |
| One Dark | 紫黑底暖色 | 视觉冲击、公众号文风 |
| Dracula | 紫调深色 | 设计感强 |
| Monokai | 经典暖色深底 | 代码 demo |
注意:代码块不要太长——公众号正文区移动端只有 ≈340px 宽度,超出会出现水平滚动条,阅读体验差。建议 60 字符 / 行以内,超长代码截图代替。
图片:链接还是上传
把 Markdown 里的图片直接粘到公众号有三种翻车:
1. 图被压糊:公众号会重新压缩外链图,质量降很多 2. 图被裁切:编辑器有”自动适配宽度”,长图被裁 3. 防盗链 403:粘贴外链图,发布后图变成”X”——公众号 CDN 反爬,外链域名取不到图
正确流程:
- 在 Markdown 编辑器把全文写完,图片用占位
- 复制 Markdown → 粘贴到公众号编辑器
- 每张图重新点编辑器的”图片”按钮上传——上传后图存在公众号 CDN,无防盗链问题,质量更稳
公众号编辑器对图片的常见限制:
- 单张图片大小有上限(一般 5-10MB,超过会拒收)
- 单篇图片数量有上限,写作中建议控制在几十张以内,否则会卡编辑器
- 客户端按设备能力下发 WebP 或 JPEG(节省流量)
- 可设置”封面图”(卡片显示用)
中英文混排空格
中英文之间手动加半角空格是中文排版社区的约定(“盘古之白”),不是字体技术问题——加了之后中英文密度均匀,节奏更舒服;不加则视觉上中英黏连,长文累眼。
正式排版规则(盘古之白 / Pangu):
- 中文与英文之间加半角空格:
使用 React - 中文与数字之间加半角空格:
年龄 28 岁 - 中文与全角符号之间不加:
他说:"你好" - 标点不加空格:
Vue.js,React.js
不规范:
我用React写了一个CRUD应用,性能比Vue3好30%。
规范:
我用 React 写了一个 CRUD 应用,性能比 Vue3 好 30%。
本工具的”自动空格”开关使用 pangu.js,自动在中英文交界处加半角空格。可手动关。
引用块和强调
公众号默认引用块样式很丑(左侧灰色细边)。转换工具一般会重写:
<blockquote style="
border-left: 4px solid #6c63ff;
padding: 12px 16px;
margin: 1em 0;
background: #f7f8fa;
color: #555;
">
引言文字
</blockquote>
加粗和斜体需要 inline 强化:
<strong style="color: #6c63ff;">重点</strong>
<em style="color: #ff9800;">侧重</em>
光用 <strong>、<em> 标签虽然会显示加粗 / 斜体,但颜色变化能让重点更突出。
表格的兼容性
Markdown 表格转公众号 HTML 后展示尚可,但有限制:
- 移动端宽表会水平滚动(公众号支持,但部分老版本不支持)
- 表格无法插入图片(公众号编辑器限制)
- 单元格合并(rowspan / colspan)部分失效
复杂表格建议截图作为图片插入,不要用 Markdown 表格。
标题层级
公众号正文 H1 不建议用——大标题已经是文章标题。正文从 H2 开始:
<h2 style="
font-size: 19px;
font-weight: bold;
color: #333;
margin: 24px 0 12px;
padding-bottom: 6px;
border-bottom: 2px solid #6c63ff;
">第一章</h2>
<h3 style="
font-size: 16px;
font-weight: bold;
color: #555;
margin: 18px 0 8px;
">小节</h3>
H4 以下慎用——大多数主题不会差异化样式,用户辨识不出层级。
字体栈
公众号字体回退链:
font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC",
"Microsoft YaHei", "Source Han Sans CN", sans-serif;
iOS / macOS 显示 PingFang,Windows 显示 Microsoft YaHei,其他用系统默认。代码用:
font-family: Menlo, Consolas, "Courier New", monospace;
Mac 上 Menlo,Windows 上 Consolas,老系统回退到 Courier New。
一句话总结
公众号粘贴前问自己四件事:样式都 inline 了吗、代码块切 span 了吗、图准备重传了吗、中英文加空格了吗——四件都对,复制即上线。