公众号正文代码白名单 · 2026 年第 4 季度
更新于 2026-11-02
一、你可以拿它做什么
- 交付前自查:排版和设计做完,对着表查一遍,哪些样式保存后会消失,发出去之前就知道。
- 写代码时查:不确定某个属性、某种取值能不能用,查一下再写,不用反复保存试错。
- 接进自己的工具:做编辑器、插件或导出功能的,可以把这些规则放进自己的检查流程。
它不教你做效果,只帮你避坑:哪些能放心用,哪些一保存就消失,哪些两端表现不一样。
二、为什么写好的代码,发出去就变了?
从粘贴到读者手机,代码要经过四道处理:
| 处理 | 发生在 | 会做什么 |
|---|---|---|
| ① 编辑器改一次 | 粘贴、插入、重开草稿 | 改写标签,删掉部分属性 |
| ② 服务器删一次 | 保存时(预览、发表前也会保存) | 按固定规则过滤 CSS、HTML、SVG |
| ③ 页面再调一次 | 读者打开文章 | 清掉 class,深色模式改色,作废部分动画 |
| ④ 不同手机显示不一样 | 显示 | iOS、Android、HarmonyOS NEXT 支持的属性和事件不同 |
每一项都写清是在哪一步被删、被改,还是 iOS、Android 都正常。出了问题能直接定位。
三、参数速查
先看几张速查表,大部分日常写法这里就能查到,逐条结果在完整版里。
3.1 CSS 属性名:756 个,服务器只删 2 个
按属性名粗分(含 -webkit- 前缀版):
| 类别 | 保留 | 删除 | 代表 |
|---|---|---|---|
| 布局 | 110 | 0 | display flex grid-template-columns gap align-items aspect-ratio |
| 尺寸与盒子 | 170 | 0 | width max-width margin padding border-radius box-shadow |
| 文字与字体 | 130 | 0 | font-size line-height letter-spacing text-align writing-mode text-emphasis |
| 颜色与视觉 | 113 | 1 | color background-image opacity -webkit-filter backdrop-filter clip-path;删 filter |
| 变换与动画 | 83 | 0 | transform perspective animation transition offset-path |
| 滚动 | 46 | 0 | overflow scroll-snap-type scroll-snap-stop overscroll-behavior |
| 定位 | 20 | 1 | z-index inset top left;删 position |
| 其他 | 58 | 0 | break-inside page-break-after all |
| @ 规则描述符 | 24 | 0 | font-display src unicode-range(写在行内无效) |
最容易踩的坑:position 会被删,所以 top、left、inset 写了也不生效。-- 开头的自定义属性也会整条被删。
3.2 CSS 取值:这些写法整条被删
| 写法 | 例子 | 结果 |
|---|---|---|
| 乘号 | calc(100% * 0.5) | 删整条 |
| 前后有空白的加号、减号 | calc(100% - 10px) | 删整条 |
| 整数负百分比 | translate(-50%,-50%) | 删整条 |
| 引号里带点 | content:"1.0" | 删整条 |
< 或 if() | if(media(…): …) | 删整条 |
| 不跟在函数名后面的括号 | calc(1s / (4 / 2)) | 删整条 |
url() 不是图床域名、用单引号、data: | url('…') | 拆除整个元素 |
其中两种换个写法就能保留:-50% 写成 -50.001%;单独加括号的部分,外面再套一层 calc()。
url() 只认 4 个图床域名:mmbiz.qpic.cn、mmecoa.qpic.cn、wx.qlogo.cn、res.wx.qq.com。用外链图片之前,先传到公众号图床。
3.3 SVG 动画:animate 和 set 只认 14 个属性名
| 属性名 | 服务器 | iOS | Android | HarmonyOS NEXT |
|---|---|---|---|---|
width height | ✅ | ✅ | ✅ | ✅ |
d | ✅ | ✅ | ✅ | ✅ |
stroke-dashoffset | ✅ | ✅ | ✅ | ✅ |
fill opacity visibility | ✅ | ✅ | ✅ | ✅ |
x y r points | ✅ | ✅ | ✅ | — |
stroke-width stroke-linecap | ✅ | ✅ | ✅ | — |
名单外,如 cx stroke display | ❌ 整个动画元素被删 | — | — | — |
— 表示这一项没有在 HarmonyOS NEXT 手机上单独测过。
第 14 个是 transform,服务器保留;位移、缩放、旋转用 animateTransform。名单区分大小写,大小写变体、实体、加空格、加命名空间前缀都会被删。animateTransform、animateMotion 不受这份名单限制。
编辑器里在动不算数,保存后再看一次。
3.4 触发值:服务器全部保留,手机上不一定触发
begin 的值 | 服务器 | iOS | Android | HarmonyOS NEXT |
|---|---|---|---|---|
click | ✅ | ✅ | ✅ | ✅ |
touchstart touchmove | ✅ | ✅ | ✅ | ✅ |
touchend | ✅ | ✅ | ✅ | — |
mouseover mouseout | ✅ | ✅ | ✅ | ✅ |
dblclick | ✅ | ✅ | ✅ | ✅ |
focus blur | ✅ | ⚠️ 不可靠 | ✅ | ✅ |
tap | ✅ | ❌ | ❌ | — |
click-0.1s | ✅ | ❌ | ❌ | — |
xx.click(引用其他元素) | ✅ | ❌ | ❌ | — |
所以点击用 click,不用 tap。
3.5 HTML 和 SVG:会被删的
| 类别 | 名称 | 结果 |
|---|---|---|
| HTML 元素 | script style link meta base title input textarea | 连同内容删除 |
| HTML 元素 | button details iframe video audio form object marquee math | 拆除,只留内容 |
| SVG 元素 | style script title feImage | 删除 |
| SVG 元素 | linearGradient mask clipPath filter pattern use marker | 保留,但 id 被删,引用不到 |
| 属性 | id on* contenteditable xlink:href xml:base | 删除 |
样式写在标签上,不要依赖 id 和 <style>。
3.6 四个等级
每条规则都标了「保质期」:
| 等级 | 含义 |
|---|---|
| 稳定 | 由服务器的固定规则或网页标准决定,各端一致,可以长期放心用 |
| 看系统版本 | 较新的 CSS,读者手机的系统或内核要达到一定版本 |
| 平台有差异 | 只有部分平台支持,或 iOS、Android 表现不同 |
| 随微信改版可能变化 | 依赖微信自己的实现,微信改版时最该留意 |
关键位置的内容,优先用「稳定」的写法。
完整白名单和检查 skill 输入查看码后可见。
完整版
输入付费后拿到的密码,打开这一期的完整白名单和检查 skill。