乐于分享
好东西不私藏

为什么公众号预览没问题,进编辑器后格式会…

为什么公众号预览没问题,进编辑器后格式会…

为什么公众号预览没问题,进编辑器后格式会乱

这次我专门把公众号发布链里“预览正常、进编辑器后格式变乱”的问题梳理了一遍,也顺手把当前模板做了一轮修复。

结论先说:这类问题很多时候不是文章写得有问题,也不是 Markdown 本身有问题,

而是微信公众平台的富文本编辑器会重新处理你提交进去的 HTML 结构和样式。

所以你在浏览器里看到的效果、工具里预览到的效果、草稿箱里再次打开编辑器后看到的效果,并不一定完全一致。

最容易出问题的,不是标题和段落,而是这三类结构

这次对下来,风险最高的主要有三类:

1. 列表

也就是:

无序列表

有序列表

嵌套列表

如果依赖原生:

ul

ol

li

再配合:

list-style: disc

list-style: decimal

padding-left

这种写法在普通浏览器里往往没问题,但进了公众号编辑器以后,最容易出现:

圆点没了

序号错乱

缩进变化

行距不一致

再次编辑时结构被改写

2. 代码块

代码块的问题主要不在“能不能显示”,而在“能不能稳定按原样显示”。

如果代码块依赖:

横向滚动

深色背景

较复杂的嵌套结构

严格保留原始空白

就容易出现这些问题:

背景色没了

字体色丢了

横向滚动失效

代码被强制换行或压坏

3. 表格

表格是另一个常见风险点。

尤其当表格里有:

长文本

多列

依赖宽度控制的布局

就容易出现:

单元格把表格撑坏

预览正常,最终显示偏掉

编辑态和手机端效果不一致

为什么会这样

原因很直接:

公众号后台不是一个“原样渲染浏览器”,而是一个会重新接管富文本结构的编辑器。

换句话说,你交进去的是一段 HTML,但微信后台不一定会完整保留:

标签结构

CSS 样式

列表语义

滚动行为

一些细节属性

所以真正的问题不是“浏览器兼容性”,而是:

微信编辑器会不会把你的结构再改一遍。

这次查资料后,能明确落地的经验

我查到的资料里,几个结论和我们现在遇到的问题是对得上的。

1. 原生列表确实是高风险区

有现成的公众号排版实践明确提到:

微信公众号对部分 CSS 样式不支持

无序列表和有序列表本身就容易出现行距和显示问题

来源:

HandleHtml 项目 https://github.com/guoshimeihua/HandleHtml

这个资料里甚至直接把两个典型坑写出来了:

代码块显示不正确

无序列表和有序列表行与行之间没有空隙

这和我们现在碰到的现象基本一致。

2. 内联 CSS 也不是万能的

另一个做公众号排版的实践里也明确说明:

常见做法是先生成带内联 CSS 的 HTML

再把它复制到公众号后台

但这不等于微信就会 100% 保留所有样式。

来源:

https://elliot00.com/posts/org-to-mp

3. 表格最终效果需要看手机端

第三方公众号编辑器对表格也给了非常现实的提示:

编辑时可见的效果,不等于最终效果

表格宽度和布局可能出现偏差

来源:

96 编辑器帮助文档 https://bj.96weixin.com/help/100013.html

这次我做了什么修改

这次不是只改了一个小样式,而是按“微信兼容优先”的思路做了一次降级处理。

1. 列表不再依赖原生 ul/ol/li

这是这次最核心的修改。

我把 wx_safe 模板里的原生列表,改成了“伪列表段落”:

不再依赖 ul

不再依赖 ol

不再依赖 li

直接转成普通段落

前面手动加:

1.

2.

这样做的好处是:

微信编辑器就算重写结构,也只是普通段落

不再依赖它对列表标签的支持程度

2. 修了 Markdown 混合列表被错误合并的问题

我还顺手发现了另一个容易误判的问题:

有时候“数字列表后面接圆点列表”

在 Markdown 转 HTML 这一步就已经被错误合并了

这不是微信的问题,而是 Markdown 解析阶段的问题。

所以这次又补了一处:

给转换器加了 sane_lists

这样可以避免:

1. 步骤一

2. 步骤二

- 要点A

- 要点B

这种结构在转换成 HTML 时先被合并成一整组错误列表。

3. 代码块改成更保守的展示方式

原来代码块比较依赖:

overflow-x: auto

white-space: pre

这在微信编辑器里不够稳。

所以我把它改成了:

pre-wrap

自动换行

减少对横向滚动的依赖

这样虽然牺牲了一点“原汁原味的代码块排版”,但换来了更高的稳定性。

4. 表格改成更保守的固定布局

这次也把表格再收了一层:

增加 table-layout: fixed

单元格增加 word-break: break-word

目标不是让表格更花,而是:

避免长文本把列宽撑坏

尽量让表格在公众号环境里稳住

这次修完后,我确认下来的结果

我已经实际验证过:

1. wx_safe 转换后的 HTML 已经不再输出原生列表标签

也就是说,当前列表已经不是靠:

<ul>

<ol>

<li>

来撑样式了。

而是直接变成普通段落 + 手工标记。

2. 混合列表现在可以正确区分

比如:

1. 步骤一2. 步骤二- 要点A- 要点B

现在转换后会正确变成:

1. 步骤一

2. 步骤二

• 要点A

• 要点B

不会再被错误并成同一组序号列表。

现在这套经验最适合怎么用

如果你的目标是:

文章在公众号后台里尽量稳

草稿保存后再次打开编辑器不要太乱

正式发布前少返工

那最实用的经验就是这几条:

1.列表不要过度依赖原生列表标签

2.代码块不要过度依赖滚动和复杂背景

3.表格尽量保守,宁可换行,不要强撑

4.样式要优先“稳定”,而不是优先“浏览器里最好看”

最后一条判断标准

以后看公众号模板好不好,不要只看浏览器预览。

更应该看三件事:

1.能不能进草稿

2.草稿再次打开编辑器后会不会乱

3.手机端最终显示稳不稳

如果这三步都稳,那个模板才是真的能用。

附:样式检查区

这一节不是为了讲新内容,而是专门给公众号后台做肉眼检查用的。你可以直接看这一节在:

草稿箱预览

再次打开编辑器

手机端最终展示

这三个阶段是不是一致。

标题样式检查

这是二级标题样式。

这是三级标题样式

这是普通正文段落。这里故意放一段比较常见的说明文字,用来观察段间距、行高、字体大小和手机端阅读节奏是否正常。

正文里也放一个行内代码示例:wx_safe,再放一个路径示例:skills/wechat-article-writer/__init__.py,用来确认行内代码底色和文字颜色会不会失真。

无序列表检查

第一条无序列表

第二条无序列表

第三条无序列表

有序列表检查

1.第一步先生成 Markdown

2.第二步再转换成 HTML

3.第三步发布到公众号草稿箱

嵌套列表示例

1.一级步骤一

2.二级步骤一

3.二级步骤二

4.一级步骤二    – 补充说明 A    – 补充说明 B

引用样式检查

这是一段引用文字,用来观察左侧边线、内边距和颜色在公众号后台里是否稳定。

代码块检查

def publish_article(file_path: str, author: str) -> None:    print("publish:", file_path, author)very_long_variable_name_for_wechat_editor_layout_check = "this is a long line used to verify wrapping behavior in the final editor"

表格检查

项目
作用
观察点
列表
检查圆点和序号
是否丢失、是否错位
代码块
检查背景和换行
是否被压扁、是否溢出
表格
检查列宽和边框
是否变形、是否撑宽

链接样式检查

这里放一个链接,方便确认颜色和下划线是否正常:

OpenClaw 仓库


这是一条分割线。上面这些内容都建议在公众号后台里逐项看一遍,不要只看本地浏览器预览。

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 为什么公众号预览没问题,进编辑器后格式会…

猜你喜欢

  • 暂无文章