news 2026/9/24 12:29:39

双T陷波滤波器实战:精准抑制50Hz工频噪声的完整设计指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双T陷波滤波器实战:精准抑制50Hz工频噪声的完整设计指南

做微弱信号采集那阵子,我被50Hz工频噪声折磨得不轻。示波器上那条胖乎乎的噪声带,压不掉也躲不开,电源纹波、地线环路、空间辐射全都叠在一起。后来我用双T陷波滤波器(Twin-T Notch Filter)把中心频率卡死在50Hz,一次实测把噪声压掉了40多个dB。这篇就把从原理推导到硬件落地的完整过程写清楚,包括陷波频率的计算、Q值怎么抬起来、PCB上怎么布局、实测怎么校准。想处理工频干扰、电源纹波或者特定频率噪声的朋友,这篇可以直接当参考。

1. 双T陷波滤波器是什么,为什么它能精准削掉电源噪声

1.1 先看一个真实场景:噪声不是不够小,而是频率太扎眼

我手头有个传感器调理电路,输出信号幅度本身只有几毫伏,结果示波器一接上去,50Hz的正弦波纹波比信号还大。当时第一反应是加低通滤波器,但低通一上去,有用的频率分量也跟着衰减了;加高通滤波,没意义,干扰频率比信号还低。这个场景非常典型:需要干掉的是特定频点上的干扰,而不是把所有高频或者低频一刀切。

普通RC低通的频率响应是一条缓降的斜坡,它对噪声是“压制”而不是“摘除”。双T陷波滤波器的思路完全不同:它只针对你设置的那个频率动手,邻域之外的信号几乎原样通过。这个特性对电源噪声特别合适,因为市电工频是定死的50Hz,或者伴有100Hz的整流纹波,你只要在那一个频点上开一个“陷阱”,前后信号该是什么样还是什么样。

还要多说一句,很多人第一反应是数字滤波。但如果在模拟前端就把50Hz干掉了,ADC的动态范围就不会被工频白占掉很多位,后级数字再处理也轻松。模拟陷波器不是老古董,它到现在仍然是信号链里性价比最高的一个环节。

1.2 “双T”这两个字到底什么意思

双T网络的名字非常直白:两个T形RC网络并联在一起。第一个T是低通结构,由两个串联电阻和一个对地电容组成,教科书写法是R、R、2C;第二个T是高通结构,由两个串联电容和一个对地电阻组成,写法是C、C、R/2。这里有个比例关系非常关键:对地支路的电容是2C,对地支路的电阻是R/2,这些倍数关系不是随便定的,是让电桥平衡精度最大化用的。

为什么两个T并联就能产生陷波?我刚接触时也绕了很久,后来用了一个很简单的方法理解:把它看成一个频率相关的电桥。在某个特定频率f0下,低通T网络的传输系数和高通T网络的传输系数在输出端恰好相等,但相位关系相反,结果输出端的信号互相抵消,等于输入信号被“吞”掉了。离开f0,两个支路的幅度和相位不再满足抵消条件,信号就能正常通过。

这个抵消条件只在一个频率点严格成立,所以形成的是尖峰形状的陷波,而不是宽带削减。把这个频率点代入R和C所在的公式,就是经典的f0 = 1/(2πRC)。关于这个公式,后面我会用一个实际例子手把手算一遍,包括用标准值电阻电容怎么凑出50Hz。

1.3 和低通、高通、带通滤波器的本质区别

拿厨房来类比,低通滤波像“漏勺”,只让小的(低频)通过;高通滤波像“筛子”,只让大的(高频)留下;带通滤波是“指定口径的筛子”。而陷波滤波器更像在一整块面板上钻了一个极细的孔:面板还是完整的,只有你打孔的那一个点出了问题,其他位置完全不碍事。

这个思路放在电源噪声场景里特别实用。比如运放供电上叠加了开关电源的100Hz纹波,负载电流里混入了某个特定频率的振荡,甚至音频系统里出现了50Hz的“嗡嗡”声,如果不想改变系统本身的工作带宽,唯一合理的做法就是用一个陷波器精准命中目标频率。这也是为什么双T结构在仪器仪表、音频、电力监测里应用这么广泛:它不跟系统抢带宽,只管自己家门口那点事。

2. 设计核心:频率公式、元件取值与选型的关键细节

2.1 陷波频率公式不是背出来的,是“凑”出来的

双T陷波频率的核心公式是f0 = 1/(2πRC),这里R是T网络主臂的单个电阻值,C是主臂的单个电容值。注意,这里说的R和C是“主臂单元”的值,不是对地支路那个2C或R/2。两个串联电阻算下来是2R,中间节点对地是2C,等效下来仍然是同一个RC常数。

我在实际设计时习惯先把电容定下来,再去算电阻。原因是标准电容的档位比电阻少很多,选一个合适的C,再用电阻去凑频率,操作起来更顺手。如果你先用电阻反过来凑电容,往往只能找到非标容量,采购又麻烦又不划算。

假设我要滤除50Hz工频,先钦定C = 1μF,那么R = 1/(2π × 50 × 1×10⁻⁶) ≈ 3183Ω。这个数不是标准值,但非常接近E96系列里的3.16kΩ。用3.16kΩ代进去,实际f0 ≈ 1/(2π × 3160 × 1×10⁻⁶) ≈ 50.36Hz,偏差只有0.7%,在常规元件容差范围内,完全可接受。如果你手里有微调电位器,后面还能一点点校到50.00Hz。

那2C和R/2怎么办?2C直接用两个1μF电容并联,R/2用两个3.16kΩ电阻并联,得到约1.58kΩ。这里有个细节很值得说:保证R、C来自同一批次,温度特性接近,这比严苛的标称精度更重要。同一批元件在温度变化时漂移方向一致,陷波的深度和频率才会更稳。

2.2 一个完整的50Hz陷波器元件取值表

上表是我实测过的一套配置,可以直接照着买:

元件取值与用法关键备注
C(主臂电容)1μF,薄膜电容(CBB)不要用X7R瓷片,温度漂移大
2C(对地电容)两个1μF并联与C同一批次,对称性更好
R(主臂电阻)3.16kΩ,1%金属膜E96标准值,精度越高陷波越深
R/2(对地电阻)两个3.16kΩ并联实测等效约1.58kΩ
运放OP07、OP27等低失调型号精密测量首选,后文会对比
反馈网络1kΩ + 18kΩ 加 1kΩ多圈电位器用于控制Q值,详见第三章
耦合电容2.2μF~10μF薄膜电容如果前级有直流分量就用

电阻我强烈建议全部选1%精度的金属膜电阻,不要用5%碳膜,后者温度系数差了一大截。电容方面,CBB聚丙烯电容是首选,它的损耗角小、容值随温度变化低、线性度好。低频瓷片电容(X7R、Z5U)在高偏压下容量会暴跌,用在陷波电路里容易导致f0飘走,我踩过这个坑,后面章节详细说。

2.3 电容和电阻的“配对”比绝对精度更重要

这是很多人忽略的一环。双T网络本质上是一个桥式抵消结构,它要求低通支路和高通支路的相位、幅度在f0点精确抵消。如果左右两个支路的元件参数不完全对称,抵消就不彻底,表现出来的现象就是陷波深度只有-15dB、-20dB,怎么压都压不下去。

理想的配对方式是用万用表挑电阻,误差控制在0.1%以内。电容配对稍微麻烦一些,最好用电桥或者有电容测量功能的万用表手动挑,把两个1μF挑到误差小于1%。我做了几次实验后发现,元件配对良好时陷波深度能到-40dB以上,而随手抓一把元件焊上去的板子,大多数只能到-25dB左右,差距非常明显。

如果实验室条件不允许高精度配对,还有一个野路子:在某个支路上串联一个小阻值微调电阻(200Ω~500Ω),用螺丝刀调到输出最小。这个方法在洞洞板上也能实现,代价是增加了调试时间。

3. 无源双T的痛点,以及如何用有源反馈把Q值抬起来

3.1 无源双T的三大短板:Q值低、插损大、带不动负载

最原始的双T网络只需要三个电阻三个电容,接在信号链路上就行,但它有三个硬伤。第一,无源双T的Q值非常低,一般在0.3左右,这意味着陷波曲线很“胖”,-3dB带宽可能达到几百赫兹,会把50Hz附近的40Hz、60Hz甚至更高频率都一并削弱。测下来就是,噪声确实小了,但有用的信号也变“闷”了。

第二,双T网络的插入损耗比较明显,信号通过它会被衰减不少,尤其在多级级联后,信噪比并没有真正改善多少。第三,无源双T的输出阻抗比较高,后级如果直接接低阻负载,陷波深度会被严重拉低。这也是为什么实际项目中很少直接裸用无源双T,必须加一级运放做缓冲和反馈增强。

3.2 正反馈把Q值抬起来的原理,一个公式看懂

把双T网络放在运放的同相输入端与地之间,运放接成电压跟随器,再从输出端通过一个分压器取一部分信号,正反馈到双T网络的公共接地端,就能大幅提升Q值。核心公式是Q ≈ 1/(2(1-k)),k就是反馈系数,也就是分压器返回的比例。

这个公式好懂也好用。k=0时,没有反馈,Q≈0.5,比无源双T略好;k=0.8时,Q≈2.5;k=0.9时,Q≈5;k=0.95时,Q≈10;k=0.99时,Q≈50。可以看到,k越接近1,Q值涨得越夸张。但代价是,系统越来越接近正反馈振荡的临界点。我用一个生活例子来比喻:无源双T像手筛面粉,筛孔有大小误差,粗颗粒多;加了正反馈,相当于给筛子加了一个自动抖动机构,让不符合大小的颗粒更精准地被弹走,但抖动幅度稍微过头,整袋面粉就飞出去了。

Q值和带宽的关系是BW = f0/Q。拿50Hz来说,如果Q=10,-3dB带宽就是5Hz,意味着45Hz~55Hz之外的信号基本不受影响,这个“刀法”在工程上已经足够锐利了。如果Q=30,带宽只有1.7Hz左右,陷波非常尖锐,但稳定性风险也随之上升。

下面给一张反馈系数与Q值、带宽的对应参考表:

反馈系数k理论Q值50Hz下-3dB带宽
00.5100Hz
0.82.520Hz
0.9510Hz
0.95105Hz
0.98252Hz
0.99501Hz

实测下来,做工频陷波,Q=10左右是比较舒服的折中:既能有效压掉50Hz,又不会对49Hz和51Hz附近的有用分量造成明显伤害。Q再高,元件参数稍有漂移,中心频率就会跑到有用信号带里,反而惹麻烦。

3.3 运放选型的取舍

运放在这里的作用有两个:一是把双T网络的高输出阻抗隔离掉,二是提供可控的正反馈信号。选型时主要看失调电压、噪声密度和带宽。

精密测量场景,比如传感器信号调理、生物电采集、仪表放大器的后级,我首选OP07或者OP27。OP07的失调电压只有几十微伏量级,温漂也低,不会因为运放自身的直流误差淹没毫伏级信号。它的带宽虽然不高,但陷波器工作在50Hz,完全够用。如果处理的信号频率比较高,比如要滤除kHz级别的开关噪声,可以换OP37或者OPA2277,带宽和压摆率更充裕。

音频场景,可以选NE5532、OPA2604这类低噪声音频运放。注意,音频系统的地环路是工频噪声的一大来源,运放本身的低噪声参数再漂亮,接地没处理好也是白搭,这一点在后续布局章节再展开。

另外说一句供电。最简单的做法是±5V到±15V双电源供电,我用的是±12V,动态范围充足。如果系统只有单电源,需要在运放同相输入端做一个VCC/2的虚地偏置,并且用耦合电容隔离前后级的直流电平,否则输出波形会被削顶或者偏置到奇怪的位置。

4. 硬件实现:原理图结构、PCB布局与焊接注意点

4.1 完整信号链路的文字版图解

虽然没法贴出完整原理图,但我可以把信号走向说清楚,照着画就行:输入信号Vin先经过一个耦合电容,进入双T网络的输入端;双T网络的输出端接到运放的同相输入端;运放反相输入端与输出端短接,构成电压跟随器;运放输出就是整个陷波器的输出Vout。反馈分压网络由R4(1kΩ)和R5(18kΩ串联1kΩ多圈电位器)组成,分压中点接双T网络的公共接地端,R4另一端接运放输出,R5另一端接地。

注意反馈极性。如果信号接反了,正反馈会变成负反馈,Q值反而下降,陷波曲线会变“胖”,跟设计目标完全反着来。焊接前先用万用表确认分压器的连接关系,输出端取信号进R4而不是进R5接地端,方向错了就是灾难。

运放电源每个引脚的旁边,要就近放一个0.1μF陶瓷电容和一个10μF电解电容,这是运放稳定工作的前提。我见过很多新手只关心R和C的取值,电源去耦电容随便一放,结果运放高频自激,示波器上全是毛刺,还误以为是陷波器没做好。电源去耦不是玄学,它是运放工作的“稳态环境”,环境不稳,电路不可能稳。

4.2 PCB布局的三个关键思维

第一,对称性。双T网络的那六个元件,在PCB上一定要左右镜像对称布置,走线长度尽量一致。很多仿真里性能很好的电路,一上PCB就报废,原因就是布局不对称导致的寄生电容差异。两个1μF电容、两个3.16kΩ电阻尽量靠近、方向一致,对地支路的元件放中间,信号从左边进右边出,保持一条直的信号通道。

第二,接地。陷波器是工频滤波器,它本身对地环路极其敏感,如果接地混乱,地线上的50Hz电流会直接注入信号地,陷波器再准也白搭。我做这块板子时用的是单点接地:输入地、输出地、反馈分压地、电源地去耦地,全部汇总到一点再回到系统总地,避免在地线上形成多个环路。

第三,屏蔽。工频噪声的空间耦合主要由长走线和浮空节点引入,所以敏感节点(运放同相输入端)的走线越短越好。条件允许的话,把这块电路装进金属屏蔽盒里,盒子单点接地,实测噪声还能再低几个dB。尤其当你的设备旁边有变压器、电机或者开关电源时,屏蔽带来的改善非常明显。

4.3 焊接与装调的细节

元件焊接方面,电阻和电容引线尽量剪短,保留引线过长会变成天线,反而引入额外噪声。CBB电容不分正负极,但如果电路里有电解电容,一定要盯紧极性方向,焊反了轻则容量错误,重则炸裂。运放如果怕焊坏,可以先焊一个IC座,再把运放插上去,方便调试时换型号。但要注意,IC座在振动环境里可能接触不良,如果是最终产品,建议直接焊死。

焊接顺序也有讲究。我习惯先把无源元件焊完,不插运放,用万用表量一下双T网络各节点的阻值和电容,确认R/2并联值、2C并联值没问题再焊运放。这样能避免在运放已经焊上之后才发现基础元件装错,拆起来十分痛苦。

装完之后不要急着接信号,先上电测运放的电源引脚电压、输出直流工作点。如果运放输出带有不正常的直流偏置,先解决供电问题再谈陷波性能。

5. 实测验证与调试方法

5.1 测幅频响应的标准流程

调试陷波器,最直观的方法是测幅频响应曲线。手头设备最低配置是信号发生器和示波器,信号发生器从10Hz扫到200Hz,步进1Hz,示波器记录输出幅度峰值,在某个频率点你会看到输出从正常水平突然掉到谷底,那个谷底就是陷波点。

如果没有信号发生器,也可以用手机播放一个扫频音频文件,再配合示波器观察——虽说不太专业,但验证电路功能完全够用。我实测的一块板子,输入信号设为200mVpp,50Hz时输出只剩下约6mVpp左右,算下来陷波深度超过了30dB,再精细调整反馈分压器,可以压到2mVpp以下,也就是超过40dB。

记录数据时,建议把输入端幅度固定,在陷波点附近加密测量频率,比如45Hz~55Hz之间每0.5Hz记一个点,才能看到真实的陷波曲线和-3dB带宽。如果你发现记录下来的曲线呈现明显的“山峰”状,也就是陷波频率两侧有凸起,那是Q值调太高了,需要适当减小反馈系数。

5.2 中心频率偏了别慌,用微调电阻校准

实测中中心频率往往不是精确的50Hz,因为电容容差轻松达到±5%。比如你标称1μF的电容实际只有0.95μF,陷波频率就会跑到约53Hz,结果就是真正干扰还在,反而削掉了一部分信号。这时候我建议在串联电阻支路里放一个多圈电位器,具体位置是在双T网络的某一个R支路上串入一个200Ω左右微调电阻。中心频率升高,就增大电阻值;中心频率下降,就减小电阻值。一边调一边看示波器,找到输出最小的点,锁住电位器,滴一点指甲油或者热熔胶固定,防止后续振动改变阻值。

这里还有一个经验:不要为了追求50.00Hz而疯狂调微调电阻。元件参数在工作温度变化时会漂移,50Hz附近1Hz以内的误差对“压噪”来说完全可接受。把频率校到50.3Hz还是49.8Hz,对系统的影响远没有陷波深度重要。

5.3 Q值调整的现场经验

Q值调整的核心就是那个反馈分压电位器。我建议接上真实噪声源来调,而不是只看信号发生器的测试结果。把前级信号接好,示波器看噪声波形的峰峰值,一边慢慢调电位器,一边观察。你会看到噪声先是明显减小,然后某个点开始出现持续振荡或者邻频过冲,这说明Q值已经接近临界了。此时往回退一点,留下10%~20%的稳定裕量,锁定电位器即可。

如果调Q的过程中发现陷波频点两侧出现了尖锐的增益峰,说明Q太高了,正反馈已经让系统在陷波频率附近产生了“谐振抬升”。这个增益峰很危险,它会把附近频率的噪声放大,反而让总噪声变大。判断标准很简单:调节过程中,噪声先降后升,说明已经过头了。

6. 常见问题与排查技巧实录

6.1 陷波深度始终只有-20dB左右,原因在哪

最常见的两个原因:第一,双T网络的元件对称性不够。解决办法是拿出万用表挑电阻、挑电容,把两支路的参数配平。第二,反馈系数偏小,Q值不够。可以先把反馈分压器的电位器调到更大反馈方向试一下,看陷波深度有没有改善。如果两个方向都动过还是不行,就要怀疑焊接错误了——比如某个电阻焊错位置,或者2C电容没并联到位。用万用表逐点量电压或者断电量阻值,基本能定位问题。

还有一个容易忽略的是探头本身。示波器探头接地夹子如果太长,会引入额外的地环路噪声,陷波器明明正常,测出来却总是有残留。换用短接地弹簧针,或者把探头接在输出端的地参考点上,往往会有立竿见影的效果。

6.2 一上电就自激振荡,Q值旋到一半就开始叫

自激的根源是正反馈过强或者环路相位不满足稳定条件。排查时先把反馈分压器调到最小反馈位置,确认电路能正常工作,再逐步增大反馈。如果最小反馈时也跟着振,说明问题不在Q值,而在运放的电源去耦或布局。重点查电源引脚旁的0.1μF电容是否漏焊,芯片供电是否干净,地线是否形成环路。还有一个细节:运放输出端如果直接连接长线缆,线缆电容会导致相位裕度下降,建议在输出端串联一个50Ω~100Ω电阻再出去。

还有一种隐蔽情况:运放输出接了反馈分压网络,分压节点走线过长,寄生电容把反馈信号高通移相了,高频段产生额外相移,削弱了相位裕度。解决办法是让分压网络靠近运放输出端,走线短而粗。

6.3 陷波器滤掉了50Hz,但波形里还有100Hz残留

工频干扰不一定只有50Hz。全波整流的电源电路会产生100Hz纹波,如果后级稳压效果一般,100Hz成分也会出现在信号里。遇到这种情况,可以在50Hz陷波器后面再串一级100Hz陷波器,两个陷波器级联。注意两份元件参数不同,第二级的C改成0.47μF,R调整为约3.39kΩ,仍用同一个公式计算,后面的调试方法一模一样。

当然,如果残留的100Hz幅度很小,也可以用低通滤波器配合处理。但从工程角度看,两个陷波器级联更干脆——一个频点一个陷阱,系统其它频率不受影响。我做一个多级陷波板时,把50Hz、100Hz、150Hz三个频点全滤干净了,整个噪声底下降了将近40dB,效果非常直观。

下面把高频踩坑点汇总成一张速查表,方便现场排查:

故障现象优先怀疑验证与解决办法
陷波深度不足(只有-20dB)元件对称性差或反馈不够配对阻容;调大反馈或微调支路电阻
中心频率偏移电容容差大串微调电阻,逐点校准到50Hz
Q值调高后自激正反馈过强、电源去耦不足退反馈;检查0.1μF电容和地环路
陷波两侧出现增益峰Q值临界减小反馈系数,留裕量
输出仍有直流偏置运放失调或输入耦合缺失加耦合电容;换低失调运放
温度变化后频率漂移瓷片电容温漂明显更换CBB/聚丙烯电容

6.4 关于元件选型的一个很多人不知道的细节

陷波器对电容的介质吸收效应很敏感。介质吸收是指电容放电之后,内部介质会缓慢释放残余电荷,产生类似“记忆效应”的现象。在要求极高的场合,选用聚丙烯(CBB)或者聚苯乙烯电容会比瓷片电容好很多,因为瓷片电容的介质吸收系数高,会引起微小的信号失真,拉低陷波的极限深度。这个细节仿真软件里很难体现,但实测时可以明显感觉到同一套电阻,换用不同电容材料,陷波深度能差出5~8dB。

我个人的项目习惯是,凡是用于陷波网络、积分器、采样保持这些对电容性能敏感的环节,一律上CBB电容,贵一点也值。普通滤波或者去耦电路,才用得起便宜瓷片。

7. 关于这个项目的几句实在话

双T陷波滤波器是我做过性价比最高的模拟电路之一:六个无源元件加一个运放,就把困扰好几个星期的工频噪声问题解决了。要说有什么心得体会,就是一定不要相信仿真里那个完美无缺的陷波深度,实际性能由元件对称性、接地处理和Q值裕量共同决定,这三样东西,才是设计的真正核心。

顺手再分享一个后续扩展方向:如果你需要滤除的频率会变化,可以把固定电阻换成数字电位器,甚至用光耦隔离控制反馈系数,做成一个频率可调、Q值可调的程控陷波器。我后边就打算这么改一版,配合MCU做个自动搜索干扰频率并自动对准的功能,到时候再写文章分享。调试过程中那些让人抓狂的细节——电容容差、地环路、自激临界点——现在回想起来,恰恰是把原理吃透的最好教材。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/24 12:27:54

【单片机课程设计/毕业设计】基于 STM32 的 SG90 舵机模拟投喂物联网监测系统设计 基于 STM32 的多时段定时投喂与水位自动加水系统设计(011409)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/9/24 12:25:42

MOSFET阈值电压详解:从物理本质到电路设计避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:24:49

PHP生产级Docker镜像设计:从能跑到稳跑的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:24:29

STM32下载与调试避坑指南:从BOOT0到SWD通信失败

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/24 12:24:19

dbx:20MB轻量数据库客户端的Rust+Tauri实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华