$level = (int) substr($h->tagName, 1);
printf('<li class=toc-l%d>', $level);
.toc-l3 { padding-left: 28px; }
.toc-l2 { padding-left: 14px; }

生成的目录里 h2 和 h3 顶格排在一起,三级标题和一级标题左边距都是零,长文里十几条目录看着像同一层,找不到重点。这类现象通常不是突然出现的,往前翻半天日志能看到苗头。

追下去是这么回事:生成目录时只取了标题文本,没有把 tagName 的层级带出来,所有条目共用同一个 class。样式里也没有按级别写缩进。

「目录层级缩进」确认了原因之后,改动尽量只碰那一处,顺手改的东西后面最容易出问题。权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

处理上按这个顺序:生成时读标题的 tagName,把级别写进 data-level 或对应 class;缩进用 padding-left 按级别递增,别用全角空格硬凑;二级以下字号可以略小,但不要小到看不清,层级靠缩进和字重区分。

确认没问题再收工,目录里 h3 明显缩在 h2 右边,同级的条目左边缘对齐,一眼能看出层级。

作者 9823189