Skip to content

MkDocs Admonitions 块的修改

复制本地路径 | 在线编辑

使用 extra.css 修改 Admonitions 块样式,以 abstract 块为例,它的 HTML 结构大致是:

<details class="abstract">
  <summary>answer</summary>

  <p>第一段内容</p>
  <ul>
    <li>列表内容</li>
  </ul>
</details>

最终样式

调整颜色、Border、缩进等样式。

.md-typeset details.abstract {
  overflow: hidden;
  background: #fff;
  border: .075rem solid #00b0ff;
  border-radius: 0.35rem;
  box-shadow: none;
  padding-left: 0.8rem;
  padding-right: 0.8rem;
  font-size: 0.8rem !important;
}

/* summary 区域 */
.md-typeset details.abstract > summary {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  margin: 0 -0.8rem;
  padding: 0.3rem 2.3rem;
  background: rgba(0, 174, 255, 0.153);
}

/* 前面的图标位置 */
.md-typeset details.abstract > summary::before {
  top: .5rem;
  left: .8rem;
}

/* 右面的箭头符号 */
.md-typeset details.abstract > summary::after {
  top: .5rem;
  right: .8rem;
}

/* 内容区域,第一行 */
.md-typeset details.abstract > summary + * {
  margin-top: 1.0rem;
}

/* 内容区域,最后一行 */
.md-typeset details.abstract > :last-child {
  margin-bottom: 0.7rem;
}

修改缩进的问题

目标是:内容区整体比标题缩进一点,但内容里面的 pulol 等元素仍然保持它们自己的默认缩进规则。

之前的写法类似这样:

.md-typeset details.abstract > :not(summary) {
  padding-left: 0.8rem;
  padding-right: 0.8rem;
}

这表示:details.abstract 下面除了 summary 以外的每一个直接子元素,都会被强行加上左右 padding。

比如这些元素:

<p>...</p>
<ul>...</ul>
<blockquote>...</blockquote>

都会单独获得 padding-left: 0.8rem

这样虽然看起来“内容缩进了”,但本质上是修改了每个内容元素自己的盒模型。对于列表、引用、代码块这类本身就有缩进规则的元素,就容易出现缩进异常。

现在的做法

现在改成:

.md-typeset details.abstract {
  padding-left: 0.8rem;
  padding-right: 0.8rem;
}

.md-typeset details.abstract > summary {
  margin: 0 -0.8rem;
}

含义是:details.abstract 整个容器本身加左右内边距,所以它里面的内容天然会整体往里缩进。

但是 summary 是标题栏,我们不希望标题栏也被缩进去,所以给它:

margin: 0 -0.8rem;

也就是左右各向外拉回 0.8rem,抵消父容器的 padding。

最终效果

视觉结构相当于:

┌──────────────────────────────┐
│ answer 标题栏,仍然撑满整块   │
│                              │
│   内容从这里开始,有整体缩进   │
│   - 列表保持自己的缩进规则     │
│   > 引用保持自己的缩进规则     │
└──────────────────────────────┘

关键点是:缩进由外层容器负责,内部元素不再被逐个强行加 padding。这样既有 answer 块的整体层级感,又不会破坏内容元素原本的排版规则。

Comments