news 2026/9/6 7:53:28

硬件电路设计实战100例:从电源到信号链的完整设计指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
硬件电路设计实战100例:从电源到信号链的完整设计指南

做硬件电路设计这行,光靠理论推演远远不够,很多坑是数据手册里不会直接告诉你的。这几年我带过不少新人,也帮企业做过内训,发现大家最缺的不是某一颗芯片怎么用,而是一套能直接上手、能复现、能根据实际需求改装的实战案例库。所以我一直想做一个“硬件电路设计实战100例”性质的专栏,把电源、信号链、接口、驱动、防护这些常见模块拆成一个个真实案例,每个案例都有完整的设计思路、参数计算、测试方法和踩坑记录。这篇文章就来说说这个专栏到底怎么定位、案例怎么选、以及最核心的几类设计案例到底该怎么拆解。

这个专栏适合谁?刚入行的助理工程师、转行做硬件的软件工程师、还有在学校做项目但缺少工程经验的学生,都能从这里找到可以直接抄作业的参考设计。当然,如果你已经干了三五年硬件,也可以把它当作查漏补缺的工具书,尤其是里面关于EMC防护、信号完整性、电源稳定性这些部分,很多是实际项目中反复踩坑才总结出来的东西。

1. 专栏定位与整体设计思路

1.1 这套实战100例的出发点是什么

市面上的硬件电路设计书籍很多,但普遍存在两个问题:一是偏重理论推导,从半导体物理讲到传递函数,看完还是不知道电路怎么搭;二是案例太老,还在用十几年前的芯片和架构,拿到今天的产品里根本不适用。我见过太多新人抱着经典教材啃了很久,一进公司面对实际项目照样发懵。

这个专栏的出发点很直接:用100个真实做过的电路模块作为载体,把硬件设计最核心的知识点串起来。每个案例都是独立完整的,但案例之间有明确的递进关系。前30个案例解决“能用”的问题——按照数据手册把电路搭出来,功能正常;中间40个案例解决“好用”的问题——效率、精度、稳定性、温漂这些指标如何优化;最后30个案例解决“可靠”的问题——EMC、保护、冗余设计、批量一致性。

换句话说,这不是一个讲芯片手册的专栏,而是一个讲决策过程的专栏。每个案例里,我都会把“为什么这么选”放在“怎么接”前面。比如选LDO还是DCDC,不是简单看输入输出电压,还要看噪声要求、效率、静态电流、封装散热、物料成本、供货风险,这些因素综合起来才是完整的选型逻辑。

1.2 案例怎么选、怎么排序

100个案例不可能覆盖所有电路类型,所以在选题阶段我做了取舍。核心思路是:覆盖硬件工程师日常工作中最高频的电路模块,同时兼顾一定的深度和前瞻性。

高频模块包括:电源电路(LDO、Buck、Boost、反激)、信号调理(运放、滤波、ADC驱动)、接口电路(RS485、CAN、USB、以太网)、驱动电路(MOSFET、IGBT、电机驱动)、保护电路(过压、过流、反接、ESD)、还有MCU最小系统、时钟、复位、存储、传感器采集这些基础模块。

排序上遵循“先电源后信号、先数字后模拟、先低速后高速”的原则。电源是硬件系统的基础,电源不稳,后面所有模块都白搭。所以前20个案例全部围绕电源展开,从最简单的LDO线性稳压开始,逐步过渡到同步Buck、低纹波LDO、负压生成、以及多路电源时序控制。这样安排的好处是,读者在前几个案例里就能建立“先算后画”的习惯——先算功耗、算压差、算热阻,再决定元件选型和布局。

每个案例在专栏里都会遵循统一的格式:需求描述、方案对比、原理图设计、参数计算、PCB布局要点、测试结果、常见问题。这种格式保证了100个案例的一致性,读者熟悉格式之后,拿到任何一个新案例都能快速定位到自己需要的部分。更关键的是,这种格式本身就是一个硬件设计流程的模板,跟着走完100遍,设计思路自然就内化了。

1.3 案例难度分级与学习路径建议

100个案例如果全部平铺,容易让新手产生挫败感,也会让资深工程师觉得浪费时间。所以我把难度分成三个层级:

基础篇(第1-40例)主要面向入门,重点训练读数据手册、计算基本参数、搭建最小系统电路。比如LDO的Dropout电压怎么确认、Buck电感感值怎么算、MCU去耦电容怎么摆。这部分案例的电路结构相对固定,目的是让读者建立“电路设计是有章可循的”这个基本认知。

进阶篇(第41-75例)开始涉及性能优化和复杂系统。比如如何把一个运放电路的噪声做到最低、如何设计一个带恒流恒压切换的锂电池充电电路、如何通过布局改善ADC采样精度。这部分案例会引入更多设计权衡的讨论,同一个需求给出两种甚至三种方案,并对比各自的优缺点。

高级篇(第76-100例)面向产品化和可靠性设计。包括电源的EMI整改、接口电路的浪涌防护、电机驱动的大电流走线设计、批量生产的可制造性检查。这一部分的核心不是教会你某个电路怎么搭,而是让你具备“看到问题能快速定位、定位之后能给出工程上可接受的解决方案”的能力。

我给读者的学习路径建议是:不要试图一次性把所有案例看完。每个案例拿到手,先看需求描述,然后自己尝试画原理图,算参数,最后再对照专栏里的方案和计算过程。这样才算是真正做了100遍设计,而不是看了100篇文章。

2. 核心案例分类与典型设计拆解

2.1 电源与功耗管理案例

电源是硬件系统的心脏,100个案例里电源相关内容占了四分之一。这里挑三个最有代表性的案例方向说一下。

第一个典型方向是“宽压输入DCDC降压电路的设计与效率优化”。很多产品要求输入电压范围很宽,比如9V-36V,这时候选择什么拓扑、怎么选芯片、怎么算电感就变得很关键。实际案例中我会重点讲解同步Buck和异步Buck的区别:同步Buck用MOSFET代替续流二极管,效率能提高3到8个百分点,但成本略高,而且存在上下管直通的风险,需要特别注意死区时间的设置。设计一个12V转5V/3A的电路,电感感值的选择就很有讲究,太小会导致纹波电流过大,太大又会拖慢瞬态响应,一般取最大负载电流的20%到40%作为纹波电流,再根据开关频率来计算感值。

第二个典型方向是“低噪声电源设计,给ADC和传感器供电”。很多精密测量系统里,ADC的参考电压对电源噪声极其敏感,一个几十毫伏的纹波就可能导致采样值跳动好几个LSB。这种情况下LDO是首选,但并不是随便选一颗LDO就行。需要关注LDO的PSRR(电源抑制比)曲线,不同频率下PSRR差别很大。选型时还要看输出电容的ESR,有的LDO对ESR有严格要求,用错电容就会振荡,这个我在案例中会给出具体的测试波形来说明。

第三个典型方向是“多路电源时序控制设计”。现在很多FPGA、处理器要求多个电源轨按特定顺序上电和掉电,否则可能造成器件损坏。工程上常用RC延时、专用电源时序芯片、或者通过MCU的GPIO加MOSFET来控制。这个案例的难度不是电路本身,而是要理解数据手册里时序参数的具体含义——上电间隔、上升速率、掉电顺序,这些指标在芯片手册里往往用一张时序图就带过了,实际操作时却最容易出问题。

2.2 信号链与数据采集电路案例

信号链是模拟设计的核心,也是很多工程师觉得最难的部分。我自己的体会是,难就难在信号链的性能不是某一个器件决定的,而是整个链条上每个环节累加的结果。ADC的精度再高,前面运放的噪声和失调电压太大,整体性能还是上不去。所以这个部分的案例设计特别注意完整性,从传感器、调理电路、ADC到参考电压,全部放在一起分析。

以一个“热电偶冷端补偿与放大电路设计”为例。热电偶输出信号非常微弱,典型值只有几十微伏每摄氏度,而且是非线性的。直接接ADC肯定不行,需要先经过精密运放放大,同时还要做冷端补偿。这个案例里我会讲清楚几种补偿方式的区别:硬件补偿、软件查表、还有用集成温度传感器做冷端测量。硬件补偿电路简单但精度有限,软件补偿灵活但依赖算法。针对工业现场的温度范围,最后采用的是“AD8495专用放大器+软件查表”的组合方案,实际测试在-40℃到150℃范围内精度能控制在±1℃以内。

信号链案例中,滤波器设计是另一个重头戏。很多新手喜欢追求高阶滤波,好像阶数越高越专业。实际工程里,二阶有源滤波往往就够用了,而且更稳定、更容易调试。关键不是滤波器的阶数,而是你知不知道自己要滤掉什么频率的噪声。如果在50Hz工频干扰严重的环境里采集微弱信号,你需要的可能不是低通滤波器,而是一个50Hz的陷波器,或者用双积分ADC来抑制工频干扰。这个案例的价值是提醒大家:先定位噪声,再设计滤波器,不要拿着滤波器凭空设计。

2.3 驱动与控制电路案例

驱动电路的案例主要解决“用低电压、小电流的控制信号去驱动高电压、大电流的负载”这个问题。最常见的就是MOSFET和IGBT驱动、直流电机驱动、步进电机驱动。

MOSFET驱动这个案例很典型。很多人直接拿单片机的IO口去推MOSFET的栅极,结果开关速度慢、发热严重,甚至导致MOSFET工作在放大区而烧毁。核心原因是没理解栅极驱动其实是一个给电容充放电的过程。MOSFET的栅极有结电容,IO口驱动能力不够,充放电时间就会拉长。解决办法是加一级专门的栅极驱动芯片,比如UCC27524或者IR2110,同时还要在栅极串联一个几欧姆到几十欧姆的电阻来控制开关速度,兼顾EMI和开关损耗。这个案例里,我会把栅极充放电的波形用示波器拍下来,配合仿真波形,让读者直观看到驱动电阻对开关沿的影响。

电机驱动方面,H桥电路是最经典的结构。4个MOSFET组成的H桥,配合PWM控制,就能实现直流电机的正反转和调速。工程上要注意的问题很多:死区时间不够会导致上下管直通短路;电流采样电阻的选择会影响采样精度和功耗;续流二极管的反向恢复时间会影响效率。这些细节我会拆开来讲,因为任何一个环节出了问题,电机都可能抖动、发热甚至烧毁。

2.4 接口与通信电路案例

接口电路是硬件系统和外界通信的桥梁,但也是故障率最高的地方。RS485、CAN、USB、以太网,这些接口在工业和消费电子产品里大量使用,问题集中在防护设计、终端匹配、共模干扰这几个方面。

以RS485为例,虽然只是“一个收发芯片+两个终端电阻”的电路,但设备在工业现场烧芯片的情况屡见不鲜。原因往往是没有做充分的防护。正确的设计应该是:芯片的A、B端先接TVS管做浪涌吸收,再串联PTC做限流保护,然后对地接共模电感滤除共模干扰,最后才是接终端电阻。层级分明,防护才有意义。很多人直接把TVS并在芯片引脚上,作用非常有限,因为浪涌能量太大时TVS根本来不及响应。

CAN总线设计也是同理。120欧姆终端电阻必须加在总线两端,而且要用1%精度的电阻,否则会造成信号反射,导致通信误码率升高。布线时CANH和CANL要尽量等长、紧耦合,形成双绞线效果,减少共模干扰。这些内容看起来简单,但每一个都是实际项目中反复验证过的经验。

3. 实操流程与案例复现方法

3.1 拿到一个案例后先做什么

很多读者拿到一个电路案例,第一反应是打开EDA工具开始画原理图。我的建议是:先别急着画,先用半小时把下面几件事想清楚。

第一步,把需求写成一条一条的量化指标。比如“输入电压范围9V-36V,输出5V/3A,纹波小于50mV,效率大于90%,工作温度-40℃到85℃”。量化指标越具体,后面选型和设计的约束越明确。如果需求本身不清晰,后面所有工作都可能白做。第二步,翻数据手册。重点不是看引脚定义,而是看绝对最大额定值、推荐工作条件、典型应用电路、以及Layout指南。尤其是Layout指南,很多人忽略这一块,结果PCB打样回来性能不稳定,其实芯片厂商早就告诉你该怎么布局了。第三步,算关键参数。拿Buck电路来说,至少要算电感感值、输出电容容值、输入电容容值、反馈电阻分压。这些计算是电路设计的骨架,骨架对了,后面的细节才有意义。

这套“先指标、再手册、再计算、最后画原理图”的流程,是100个案例里反复强调的。我希望通过重复100次,让它变成读者的肌肉记忆。

3.2 原理图设计的关键顺序

原理图设计不是把芯片和外围器件连起来那么简单,里面有一个隐含的顺序逻辑。我画原理图一般是按功能模块分块,每个模块先画主芯片,再画电源和去耦,再画外围配置,最后画保护。这样做的好处是,评审和调试的时候一目了然,别人接手你的原理图时也能快速读懂。

以MCU最小系统为例。第一步先把MCU放下来,标注好电源和地的引脚。第二步接电源,电源引脚旁边必须有去耦电容,通常0.1uF和10uF搭配,而且0.1uF的电容要尽量靠近电源引脚。第三步是时钟电路,晶振的负载电容要按数据手册计算,布局时晶振尽量靠近MCU,走线要短。第四步是复位电路,很多MCU内部已经有上电复位,但外部还是建议留一个手动复位按键,方便调试。第五步是下载调试接口,SWD接口只引四根线出来就能调试,给现场维护留下很大的便利。

画原理图的同时就要给每个网络命名,命名要规范。VCC_5V、VCC_3V3、I2C_SCL、UART_TX,这些名字要让别人一看就知道这个网络是什么功能、什么电平。原理图不是给自己看的,是给团队看的,也是给三个月后的自己看的。不规范的命名往往是硬件调试时最耽误时间的隐性成本。

3.3 PCB布局布线的落地技巧

原理图完成之后,PCB布局布线是决定电路能不能稳定工作的关键。这个环节最考验工程经验。很多功能性故障,比如ADC采样值跳动、射频干扰、电源纹波异常,归根到底都是布局布线的问题,而不是电路原理的问题。

布线的核心原则是:电流路径要短、回路面积要小、地平面要完整。对于一个Buck电路,功率回路是最需要关注的。输入电容、MOSFET、电感、输出电容这几个器件之间应该形成一个紧凑的功率环路,环路面积越小,EMI辐射越低。我在电源案例里通常会在PCB顶层画一个power loop标注出来,提醒读者这个区域不要被其他走线分割。

地线的处理也有很多细节。模拟地和数字地是要分开还是统一,很多新手纠结。我的经验是:对于大部分低速混合信号电路,统一地平面是最好的选择,通过合理的器件摆放来避免数字噪声耦合到模拟区域,而不是简单粗暴把地割裂开。只要ADC采样频率不是特别高,统一地平面通常效果更好。

3.4 从仿真到打样再到调试的完整闭环

仿真的价值在于验证计算和预判问题,但仿真不能替代实测。我习惯用LTspice做电源和模拟电路的仿真,免费的,元件模型丰富,速度也快。比如设计一个二阶低通滤波器,可以先在LTspice里搭好电路,观察幅频特性曲线和阶跃响应,确认截止频率和Q值是否满足要求,再画到原理图里。这样能减少返工次数。

打样之后进入调试阶段,这是整个流程里最考验耐心和系统思维的环节。我的调试方法是从电源开始。先测空载电压是否正常,再带载看电压跌落和纹波,确认电源没问题之后再测时钟有没有波形,复位电平是否正确,然后看MCU能不能跑起来,之后才轮到外设接口和功能模块。这个顺序千万不能乱,电源不稳的时候去查通信问题,只会浪费大把时间。

调试时示波器是最重要的工具。探头的档位要选对,尤其是测电源纹波的时候,需要把探头打到10x档,并去掉接地夹的引线,用弹簧地针直接点在地平面上。否则测出来的纹波里面会混入大量噪声,让人误判滤波电路有问题。这些细节操作,在专栏的每个案例里我都会强调一遍,因为它们是搭建设计信心的基础。

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

4.1 电源上电就冒烟或者短路,先查哪里

实际项目中最让人头皮发麻的问题就是上电短路。碰到这种情况,我的习惯是先不急着换板子,先拿万用表的蜂鸣档测电源输入端的阻抗,看是否接近0欧姆。如果确实是短路,再逐级排查。先把电源芯片拆下来,如果短路消失,问题大概率在电源芯片本身,可能是焊接方向错了,或者芯片本来就是坏的。如果拆了芯片还短路,就沿着电源网络查滤波电容,电容击穿短路的情况不少见。

有时候电源没有短路,但上电瞬间电流飙到好几安培,这种属于过载。排查方法是把电源负载断开,比如把MCU的供电跳线帽拔掉,单独给电源模块上电。如果电流正常了,说明负载端有问题,可能是某个芯片焊接短路,或者IO口配置错误导致两个输出引脚冲突。如果是电源模块本身电流大,就要检查电感是否选小了、开关频率是否设置异常、还有反馈电阻是否焊错。

电源调试还有一个容易被忽视的坑:示波器探头测量顺序。先空载、再轻载、最后重载,这种逐步增加负载的方式,能把问题控制在最小范围内。一次直接满载测试,一旦有问题,可能就是烧一片。

4.2 信号干扰导致数据跳动,是接地还是滤波的问题

信号干扰的问题比电源问题更隐蔽,因为它不是完全失效,而是“性能指标不合格”。比如ADC采集的电压值在某个范围内跳来跳去,滤波电容也加了,软件滤波也做了,还是不稳定。

排查这类问题,我的经验是先用示波器看两个地方:一是ADC的输入波形,二是参考电压的波形。很多时候干扰不在输入信号线上,而是参考电压本身不干净。参考电压引脚上的噪声会直接转化成采样误差,这时候需要在参考电压引脚旁边加高质量的旁路电容,甚至用专门的参考电压芯片来供电。

还有一个常见原因是采样信号的回路面积太大。ADC输入信号从传感器到MCU引脚,如果走线绕了很远,而且没有紧挨着地平面,就形成了一个大环路天线,很容易拾取空间电磁干扰。解决方法是调整布线,让信号走线和回流地线尽量靠近,形成小回路。实在改不了布线,就在软件上做多次采样取平均,但这只是补救,不是根治。

4.3 通信接口偶发通信失败,大概率是时序和匹配问题

RS485和CAN这类总线通信,最常见的问题是“偶尔通信失败”,让人非常头疼。因为不是一上来就完全不通,而是有时候成功有时候失败,很难复现。

这类问题的排查思路,首先是看通信波形。把示波器挂在A、B差分线上,观察总线的差分电平。如果幅值不够,说明总线负载太重,终端电阻匹配有问题;如果波形边沿有过冲,说明终端电阻不匹配或者走线阻抗不对。另一个检查点是收发器芯片的DE和RE引脚控制时序。很多工程师用MCU的GPIO直接控制收发方向,如果切换方向的时间点没处理好,发送完最后一个字节立刻把方向切换为接收,最后一个字节就可能发不出去。

总线通信还有一个隐蔽的坑是共模电压太高。当通信双方距离较远、或者两地之间的地电位不一样时,收发器的共模输入范围可能会被超出,导致通信异常。解决办法是在总线上加共模电感,或者使用带隔离的收发器。这些措施应该在设计初期就考虑进去,而不是等现场出了问题才补。

4.4 常见故障排查速查表

下面这个表是100个案例里高频故障的汇总。遇到的很多问题都可以从这里快速定位方向。

故障现象可能原因快速排查方法
上电短路烧保险电容击穿、芯片焊反、PCB杂质短路万用表蜂鸣档测量输入阻抗,逐级断开排查
电源输出纹波过大输出电容ESR偏大、电感饱和、Layout回流路径长示波器测纹波,检查电感的电流波形
LDO输出振荡输出电容ESR不匹配、相位裕量不足核对数据手册的电容推荐值,更换电容测试
ADC采样值跳动参考电压噪声、输入回路面积大、地弹示波器看参考电压波形,检查地线连接
通信偶发失败终端电阻不匹配、方向切换时序不对抓差分波形,逻辑分析仪看方向引脚时序
晶振不起振负载电容错误、晶振引脚虚焊、起振电阻缺失示波器测晶振引脚波形(X10档),检查电容值
板卡工作一段时间宕机热稳定性差、电源老化、焊点冷焊用热成像仪查看发热点,更换可疑器件测试

这张表只是入门指引,实际问题往往有多种原因叠加。排查时一定要一次只改一个变量,改完就测试,不要同时调整多个参数,否则问题真正的原因根本没法定位。

5. 案例之外的工程素养与扩展建议

5.1 从“会接电路”到“会设计电路”的关键一步

100个案例学完之后,最应该发生的变化,是遇到一个新需求时不再焦虑,而是知道该从哪里下手。很多新手工程师总希望有一份“万能电路图”,抄过来就能用。但实际产品设计中的需求千变万化,没有哪个电路图是万能的。真正重要的是建立一套自己的设计方法论。

这套方法论包括:输入输出指标怎么定、器件选型怎么比较、原理图怎么分模块、PCB布局怎么规划、测试用例怎么设计、问题怎么定位和归零。每个案例都是一个训练这些能力的最小单元。当你能独立完成10个案例的设计并真正调通,就已经具备基本的硬件设计能力;当你完成50个案例,你会在面对大部分常见电路时形成条件反射式的判断;当你完成100个案例,你手里积累的不是100张图纸,而是100个可复用的设计套路和一套成熟的debug思维。

5.2 工程记录习惯和版本管理

许多工程师很擅长画电路和调板子,却不太重视设计文档和版本管理。我之前也吃过这种亏,改了一版电路后,没有及时记录改了什么、为什么改,结果过两周又遇到同样的问题,只能重新分析,浪费不少时间。

现在我的习惯是,每个案例都有对应的设计笔记。笔记里包含需求变更记录、关键参数计算过程、测试数据、以及问题修改记录。原理图和PCB的版本号必须和笔记对应起来,不允许出现“只能看电路看不出是哪版”的情况。这样即使过了半年再翻出来,也能快速理解当时的设计意图和踩过的坑。这个习惯也是我希望读者通过100个案例养成的,它带来的长期价值甚至超过具体的电路设计能力。

5.3 后续还能往哪些方向扩展

100个案例只是一个开始。硬件设计领域日新月异,新的芯片、新的架构、新的测试工具不断出现。学完基础案例之后,可以往一些更专精的方向深入。

比如射频电路设计、高速数字电路设计(DDR、PCIe)、电源完整性(PI)和信号完整性(SI)仿真、EMC设计整改、或者结合软件做软硬件联调。这些方向都建立在扎实的基础电路设计能力之上。专栏里选的是最通用的案例,相当于给你打了一层牢固的地基,地基上面盖什么楼,可以根据自己的职业方向和兴趣来决定。我个人后续还会持续补充一些结合仿真工具、自动化测试的进阶案例,让这套实战体系不断生长,而不是停留在100个固定题目上。硬件设计这条路没有终点,每一个新项目、每一颗新芯片,都是一次新的实战例子。

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

远程登录SSH(数据加密),有用户模式。

拓扑图1.在AR1里,进入接口配置IP地址,进入虚拟终端链路接口。[AR1]inter g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.4.1 24 [AR1-GigabitEthernet0/0/0]q[AR1]user-interface vty 0 12.指定vty用户所支持的协议[AR1-ui-vty0-4]protocol inbound …

作者头像 李华
网站建设 2026/9/6 7:52:19

Tomcat 整体架构与启动流程:从 Server 到 Servlet 加载

刚接触 Java Web 时,我一直把 Tomcat 简单理解成“运行 Java 项目的服务器”。后来接触 Nginx、Apache HTTP Server,又看到 Tomcat 自己也能监听 8080 端口,几个概念很容易混在一起。 其实只要分清“谁负责接收请求”和“谁负责执行 Servlet…

作者头像 李华
网站建设 2026/9/6 7:51:54

RocketMq主题Topic与队列机制:售货柜多设备消息隔离设计

主题Topic与队列机制:售货柜多设备消息隔离设计作者:黒漂技术佬 系列专栏:RocketMQ核心原理与无人售货柜项目实战一、Topic:消息的一级分类 1.1 Topic是什么 Topic(主题)是RocketMQ中最顶层的消息分类单位。…

作者头像 李华
网站建设 2026/9/6 7:51:25

62-Skill技术栈实战:从学习路径到项目部署全流程指南

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

作者头像 李华
网站建设 2026/9/6 7:47:37

Android输入子系统全解析:从触摸到MotionEvent的原理与调试实践

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

作者头像 李华