Silvaco TCAD二极管仿真网格优化实战:参数拆解与避坑指南
做半导体器件仿真Silvaco的TCAD套件是我用得最顺手的工具之一。不管是功率二极管、MOSFET还是IGBT仿真结果的准确性很大程度上取决于一件事——网格。很多刚开始接触Silvaco的同学照着手册敲完代码跑出来一条I-V曲线张冠李戴地对不上实验数据第一反应是模型参数没设对其实十有八九问题出在网格上。网格设置不合理Newton迭代不收敛、曲线出现锯齿、泄漏电流差好几个数量级这些坑我都踩过。这篇内容就把Silvaco二极管仿真网格优化的核心参数、实操策略和排查经验一次性讲透适合正在做器件仿真、被网格问题折磨的工程师和研究生参考。1. 网格优化的核心逻辑仿真精度是从“离散化”里抠出来的1.1 网格不是越密越好而是该密的地方密Silvaco的数值求解本质是把你定义的连续器件结构离散成一个个节点然后在这些节点上解Poisson方程和载流子输运方程。节点之间的间距决定了方程组对真实物理场的逼近程度。节点太稀电场、载流子浓度的剧烈变化被“平滑”掉了仿真结果自然失真节点太密矩阵规模呈几何级数膨胀求解时间拉长还可能出现条件数恶化导致迭代发散。我在做实际仿真时习惯把网格看成相机的像素。拍夜景的时候暗部和高光区域需要更高的动态范围对应到器件里就是PN结空间电荷区、高掺杂浓度梯度区、以及电极接触界面附近。这些区域的载流子浓度和电场变化极其剧烈只有加密网格才能“拍”清楚。而在中性区、衬底深处这些物理量变化平缓的地方网格可以大胆放松节省计算资源。1.2 二极管仿真中哪些区域必须“特别照顾”以最常见的PN结二极管为例有三个区域是网格加密的“必争之地”漏掉任何一个都会出问题。第一个是冶金结界面。这是掺杂类型发生翻转的位置也是耗尽区起始点。在这里静电势从P侧的平缓变为空间电荷区内的陡峭下降载流子浓度从多子主导变为少子主导。网格若在此处过疏仿真出来的内建电势就会偏小直接影响正向导通电压的准确度。第二个是空间电荷区尤其是反向偏压下的耗尽区。反向偏压增大时耗尽区会向轻掺杂侧扩展扩展宽度与电压呈平方根关系。很多人在零偏附近把网格加密就以为完事了结果一加反向电压耗尽区边界直接冲到粗网格区电场分布失真击穿电压仿真值严重偏离实际。这一点在后面实操部分我会给出具体的估算方法。第三个是电极接触表面。特别是阳极和阴极的欧姆接触边界表面复合速率很高少数载流子在这里被大量吞噬载流子浓度梯度极大。如果接触面附近的网格不够细接触电阻和正向导通特性就会出现明显的偏差。2. mesh语句参数拆解location、spacing和渐变比例2.1 location和spacing的配合方式Silvaco网格定义的基础语句并不复杂核心就两个参数location指定网格线的放置位置spacing指定该位置附近的目标网格间距。以二维结构为例x.mesh和y.mesh分别控制水平和垂直方向的网格分布。# 基础网格定义示例 x.mesh location0.0 spacing0.5 x.mesh location5.0 spacing0.5 y.mesh location0.0 spacing0.1 y.mesh location0.9 spacing0.02 y.mesh location1.0 spacing0.005 y.mesh location1.1 spacing0.02 y.mesh location2.0 spacing0.1这段代码中y方向在0.9到1.1微米之间的网格间距被逐步压到5纳米这个区域就是我要加密的PN结附近。有一点必须注意两个相邻location之间的区域Silvaco会让网格间距从起点spacing渐变到终点spacing。这种自动渐变本身是好事但如果你把间距从0.1突然变成0.005中间又没有足够的过渡段数值上就会出现等效于突变网格的效果Jacobian矩阵的对角占优性变差求解器很容易报错。2.2 渐变网格比例容易忽略却至关重要的参数所谓渐变网格比例指的是相邻两条网格线间距之比。经验上我尽量把每一段过渡的spacing比控制在1.5以内最多不超过2。超过这个比例网格均匀性被破坏插值误差和离散误差都会显著上升。我自己常用的做法是“三级降密”。假如要从0.1微米渐变到0.005微米我不会一步到位而是先降到0.02再降到0.01最后降到0.005。每级的比例控制在2到2.5之间既保证了过渡平滑又不会产生大量多余的网格节点。# 推荐的渐变写法多级过渡 y.mesh location0.7 spacing0.1 y.mesh location0.9 spacing0.02 y.mesh location0.98 spacing0.01 y.mesh location1.00 spacing0.005 y.mesh location1.02 spacing0.01 y.mesh location1.10 spacing0.02 y.mesh location1.30 spacing0.12.3 用region锁定材料与掺杂边界网格的加密区域必须和region定义、doping profile对应起来。Silvaco的region语句用来划分不同的材料区电极位置、掺杂范围都依附在region上。如果region边界处没有放置网格线就会出现掺杂浓度在边界附近被网格“磨平”的假象。我建议在每一个region边界和电极边界处显式定义一条mesh location。比如P区与N-漂移区的界面位于y1.0那么y0.99和y1.01这条线一定得有网格节点否则掺杂浓度在界面处的突变无法被求解器准确感知。同理阳极接触的表面、阴极衬底的背面接触也必须有网格线锚定。3. 从粗网格到精密网格PN二极管仿真实操全流程3.1 先用理论计算估算耗尽区范围定加密区间在动手写网格之前先花两分钟估算一下关键结深和耗尽区宽度。以PNN纵向二极管为例P区厚度1微米掺杂浓度1e19 cm^-3N-漂移区厚度10微米掺杂浓度1e16 cm^-3N衬底厚度2微米掺杂浓度1e20 cm^-3。突变PN结的耗尽区宽度近似公式[ W \sqrt{\frac{2 \epsilon_s (V_{bi} - V)}{q N_B}} ]其中( N_B )是轻掺杂侧浓度( V_{bi} )约为0.75V。代入硅的相对介电常数11.7、( \epsilon_0 8.854 \times 10^{-14} ) F/cm零偏时[ W \approx \sqrt{\frac{2 \times 11.7 \times 8.854 \times 10^{-14} \times 0.75}{1.6 \times 10^{-19} \times 10^{16}}} \approx 0.31 , \mu m ]这个0.31微米就是在零偏条件下耗尽区在轻掺杂侧的延伸宽度。所以结附近的加密区至少要覆盖到y1.3微米附近。如果仿真目标是30V反向偏压那么[ W_{30V} \approx 0.31 \times \sqrt{31} \approx 1.73 , \mu m ]加密区得延伸到y2.7微米左右。我见过不少案例就是在反向偏压仿真时没把加密范围跟着扩展导致击穿电压偏大甚至完全不失真。这个教训值得记下来。3.2 完整网格定义与器件结构代码示例下面给出一个完整的Silvaco输入文件示例包含了器件结构定义、网格定义和初始求解。这个结构是2微米宽的纵向PN二极管。go atlas # 定义网格 mesh space.mult1.0 # x方向横向均匀网格 x.mesh location0.0 spacing0.2 x.mesh location2.0 spacing0.2 # y方向纵向渐变网格 # 阳极接触表面 y.mesh location0.0 spacing0.01 # P区主体渐变放松 y.mesh location0.4 spacing0.02 y.mesh location0.8 spacing0.05 # 接近PN结开始加密 y.mesh location0.9 spacing0.02 y.mesh location0.98 spacing0.01 y.mesh location1.00 spacing0.005 # 结下N-漂移区仍保持较密 y.mesh location1.02 spacing0.01 y.mesh location1.10 spacing0.02 # 耗尽区外逐步放松 y.mesh location1.30 spacing0.05 y.mesh location2.00 spacing0.1 y.mesh location6.00 spacing0.2 # 接近N衬底再次加密 y.mesh location10.0 spacing0.05 y.mesh location10.5 spacing0.005 y.mesh location11.0 spacing0.02 y.mesh location12.0 spacing0.1 # 定义区域 region number1 y.min0.0 y.max1.0 materialSilicon region number2 y.min1.0 y.max11.0 materialSilicon region number3 y.min11.0 y.max12.0 materialSilicon # 定义电极 electrode nameanode top electrode namecathode bottom # 定义掺杂 doping uniform concentration1e19 n.type region1 doping uniform concentration1e16 p.type region2 doping uniform concentration1e20 n.type region3 # 物理模型 models srh auger bgn connobt # 分析方法 method newton trap maxtrap10 # 零偏初始解 solve init solve vcathode0.0注意这里我用的是region配合uniform doping来快速搭建结构实际工程中你会有专门的工艺仿真或者解析掺杂分布文件但网格定义思路是一样的。3.3 网格收敛性测试怎么判断网格够不够密很多人不知道网格密度到底取多少才算“收敛”。我的做法很朴素——做网格加倍测试。把关键区域的spacing缩小一半其他设置全部不变重新仿真对比两次结果的差异。如果I-V曲线上对应电压点的电流变化在1%以内说明网格已经足够密如果变化超过5%说明当前网格还没收敛必须继续加密。我在实际测试中遇到过这样的情况零偏结区网格间距从20nm缩小到10nm时正向1V处的电流密度变化了约8%再缩小到5nm时变化降到1.5%。到了2.5nm变化只有0.4%。所以对于这个结构5nm的结区网格已经满足工程精度要求继续加密只是为了学术上好看计算代价却不划算。做一个简单的网格收敛测试记录会很有用。表格记录不同网格方案对应的节点数、求解时间和关键电流值能帮你快速找到精度和效率的平衡点。方案结区最小spacing (um)节点数正向1V电流 (A/um)求解耗时 (s)A0.0252003.21e-53B0.0186003.47e-56C0.005154003.52e-515D0.0025296003.53e-542从表格里可以清楚看到方案C和D的结果已经非常接近说明方案C就是最经济的网格配置。4. 网格相关的典型问题与排查经验4.1 不收敛先别急着改模型回头看网格Silvaco仿真中最常见的报错就是Newton迭代不收敛提示信息一般是“potential do not converge”或者“norm of update too large”。很多新手第一反应是调整method语句里的迭代参数但如果在初始网格下本身就有问题调高maxtrap只是让求解器在错误的道路上多跑几步而已。网格原因导致不收敛有两个典型模式一是局部网格过疏导致相邻节点之间物理量变化过于剧烈插值产生的初值严重偏离真实解二是网格比例突变Jacobian矩阵数值病态。第一种情况的解决方法是把变化最剧烈区域的spacing减小同时增加过渡段。第二种情况需要检查相邻location的spacing比值确保每级过渡不超过2。4.2 I-V曲线出现锯齿数值噪声的典型信号如果你扫描电压时发现电流曲线在高阻区出现小锯齿或者非物理的抖动大概率是网格没有跟上耗尽区的扩展。反偏时耗尽区边界不断向轻掺杂侧移动原本加密的区域被耗尽区“穿过”而网格密度没有相应调整载流子浓度求解出现数值振荡。这种问题的处理不是简单地全局加密而是把轻掺杂侧的渐变网格范围拉长确保耗尽区可能到达的区域内都有足够密的网格覆盖。我在设计高压二极管仿真时甚至会在漂移区整个范围内都用0.05微米以上的网格而不是只在PN结附近加密。这样虽然节点数上去了但换来的是从0V到击穿电压全范围稳定的仿真表现。4.3 网格数爆炸怎么办另一个常见问题是网格加密过度节点数几十万单次求解耗时以小时计。这种情况通常源于两个误区在二维结构中对整个区域无差别加密或者在不需要精细分辨的方向上盲目加密。解决办法是利用器件的对称性做降维。很多二极管结构沿横向是均匀的完全可以简化为一维仿真来快速验证网格方案验证完毕后再切回二维做精度确认。Silvaco的mesh分支中还可以使用ratio参数调整网格生成的密度权重如果只想让结区局部加密就严格限制加密区间的y范围不要从底部到顶部全线加密。另外对于工艺仿真导入的结构原始网格往往存在大量冗余节点。可以通过网格合并或重新网格化的方式清洗一遍但要注意清洗后保持关键边界的锚点。我在做SiC MOSFET仿真时就经常需要把工艺仿真产生的几十万网格压缩到几万网格压缩策略就是保留结区和沟道区的精细网格其他区域适当粗化。5. 进阶功率二极管与SiC MOSFET网格的特殊处理5.1 功率二极管漂移区长漂移区的网格策略600V甚至1200V以上的功率二极管N-漂移区往往非常厚几十微米到上百微米。在这么长的区域里如果全部保持细网格节点数会非常恐怖。我的做法是分段渐变在PN结附近保持最密的0.005~0.02微米网格然后每几十微米用一个中等间距比如0.5微米到了衬底附近再加密以捕捉高浓度梯度。但要注意正向导通时大注入会在漂移区产生电导调制效应整个漂移区内载流子浓度变化很大此时如果网格太粗仿真出来的正向压降和开关特性就不准。所以功率二极管的网格密度不能只看反向特性还要兼顾正向大注入情形。一个实用技巧是先跑一个粗略的正向导通仿真看看载流子浓度梯度最陡的位置在哪里再回头把那个位置周围的网格加密迭代一次得到最终网格。5.2 SiC MOSFET等宽禁带器件网格和物理模型需要联动SiC器件仿真最近大家问得很多Silvaco做SiC MOSFET的关键点和传统硅器件不太一样。SiC的禁带宽度大约是硅的三倍击穿电场强度高一个数量级这意味着耗尽区在相同掺杂浓度下更薄电场梯度更陡。相应的网格加密区的绝对尺度要更小否则电场峰值会被严重低估。同时SiC器件对碰撞电离模型、各向异性迁移率模型非常敏感这些模型的求解同样依赖局部的网格分辨率。我在SiC MOSFET仿真中通常把源漏之间的JFET区、栅氧化层下方的沟道区网格加密到2纳米量级才能稳定地重现阈值电压和击穿特性。顺带说一句有人在Silvaco和Sentaurus之间纠结选型。我的实际感受是Silvaco的语法上手快、脚本灵活做单器件物理分析效率很高Sentaurus在工艺模块和三维仿真上有优势但对日常的二极管、MOSFET特性仿真来说Silvaco完全够用重点还是要把网格和模型配置搞扎实。6. 调网格过程中的几点实践心得与避坑提醒第一永远先跑通再加密。任何正规项目我都会先用极粗的网格把整个仿真流程跑通确认不报错、物理趋势正确然后再逐步加密。这样能避免在排查网格问题时还要同时排查结构定义错误效率会高很多。第二留意log文件里的节点数和迭代信息。每次求解完成后Silvaco都会输出当前的节点数和Newton迭代步数。如果节点数只增加了20%求解时间却翻了5倍那说明网格质量出了问题多半是某个区域网格比过大。这时候回顾网格定义把突变处拆成多级过渡就好。第三接触电阻相关的仿真结果对网格极敏感。如果你想仿真的重点是二极管的串联电阻或欧姆接触特性接触界面的网格最少要有三到五层并且横向方向在电极边缘处也要加密。电极边缘的电流拥挤效应如果没有足够网格分辨率会被严重低估。第四和实验数据对标的时候不要一上来就调模型参数。先把网格收敛性验证做完。网格没收敛的情况下调任何模型参数都会得到“假拟合”换一组电压点就露馅了。网格收敛了再去调寿命、表面复合速度、接触电阻率这些物理参数结果才有意义。网格优化看起来是个体力活实际上它决定着你仿真结果的下限。参数调得再花哨网格不合理一切都是空中楼阁。希望这篇文章能帮你少走些弯路在Silvaco里调网格的时候更有方向感。

相关新闻

CC3角色导入Unity HDRP:材质转换、骨骼保留与常见问题修复

CC3角色导入Unity HDRP:材质转换、骨骼保留与常见问题修复

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

2026/10/7 8:49:31 阅读更多 →
动态规划求最大连续子序列和:从状态定义到Kadane算法

动态规划求最大连续子序列和:从状态定义到Kadane算法

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

2026/10/7 8:48:31 阅读更多 →
全自动金相显微镜的电动载物台值不值?批量检测效率提升解析

全自动金相显微镜的电动载物台值不值?批量检测效率提升解析

最近好多做工业质检的朋友问我,全自动金相显微镜带的那个电动载物台,到底值不值得加,是不是为了提价搞的噱头,尤其是算上批量检测的效率差,到底能省多少成本。我这5年跑了快上百家制造车间、材料实验室,太知…

2026/10/7 8:48:31 阅读更多 →

最新新闻

Sphinx toctree 通配符实战:用 `:glob:` 与 `:reversed:` 自动生成目录树

Sphinx toctree 通配符实战:用 `:glob:` 与 `:reversed:` 自动生成目录树

文档开发工具 【免费下载链接】sphinx The Sphinx documentation generator 项目地址: https://gitcode.com/gh_mirrors/sp/sphinx 点击查看 免费下载 导读 本文以 Sphinx 文档生成器(本仓库即 Sphinx 官方源码库)中 toctree 指令的 :glob:…

2026/10/7 9:22:16 阅读更多 →
为新的数据库编写 Quartz.NET Driver Delegate:方言驱动委托完整指南

为新的数据库编写 Quartz.NET Driver Delegate:方言驱动委托完整指南

任务调度后端 【免费下载链接】quartznet Quartz Enterprise Scheduler .NET 项目地址: https://gitcode.com/gh_mirrors/qu/quartznet 点击查看 免费下载 本文以 Quartz.NET 官方 4.x 文档《A Driver Delegate for a New Database》为骨架,完整讲解如何…

2026/10/7 9:22:15 阅读更多 →
Czkawka 磁盘清理完整指南:14 项本地任务如何挑出重复文件与相似图片

Czkawka 磁盘清理完整指南:14 项本地任务如何挑出重复文件与相似图片

Czkawka 磁盘清理完整指南:14 项本地任务如何挑出重复文件与相似图片 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 磁盘容量红线逼近…

2026/10/7 9:22:15 阅读更多 →
防抖装饰器(Debounce Decorator):在 JavaScript 中合并高频函数调用的实现与原理

防抖装饰器(Debounce Decorator):在 JavaScript 中合并高频函数调用的实现与原理

文档教程前端 【免费下载链接】zh.javascript.info 现代 JavaScript 教程(The Modern JavaScript Tutorial),以最新的 ECMAScript 规范为基准,通过简单但足够详细的内容,为你讲解从基础到高阶的 JavaScript 相关知识。…

2026/10/7 9:22:15 阅读更多 →
Superpowers:开发者认知增强工作流的原理与落地实践

Superpowers:开发者认知增强工作流的原理与落地实践

1. 项目概述:Superpowers 不是超能力,而是开发者工作流的“认知增强套件” 你最近在技术社区、GitHub Trending 或 Discord 开发者频道里,大概率已经反复刷到 superpowers 这个词——它不是漫威电影里的变种人设定,也不是某款新…

2026/10/7 9:22:15 阅读更多 →
补码符号位为何能参与运算?从模运算到负权重位讲透

补码符号位为何能参与运算?从模运算到负权重位讲透

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

2026/10/7 9:21:14 阅读更多 →

日新闻

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

ROS2机械臂仿真与运动控制:从URDF建模到Gazebo实战全解析

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

2026/10/7 1:01:58 阅读更多 →
用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

用浏览器直接改ESP32的WiFi密码:NVS键值配置工具设计与实现

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

2026/10/7 1:02:00 阅读更多 →
芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

芯片封装缺陷检测:扫描声学显微镜(SAT)原理与实操指南

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

2026/10/7 1:02:00 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/6 7:15:40 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/6 5:29:09 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/6 6:26:51 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/6 8:21:32 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/6 4:21:51 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/6 1:18:13 阅读更多 →