456 字
2 分钟
术无的特殊的小巧思
2026-06-08

特殊格式#

非常术无的提示框#

Terminal window
:::shuwu
这里是术无
:::
  • 输出:
SHUWU

这里是术无

AI提示框#

Terminal window
:::ai
这里是ChatGPT
:::
  • 输出:
AI

这里是ChatGPT

如何配置自定义提示框#

本博客基于 Astro + Expressive Code + Fuwari,提示框系统由三部分组成:remark 插件解析语法 → rehype 组件生成 HTML → Stylus 样式渲染。

涉及的文件#

文件作用
src/plugins/rehype-component-admonition.mjs提示框 HTML 组件,定义类型和渲染结构
astro.config.mjs注册 rehype 组件映射,将 :::类型名 绑定到组件
src/styles/variables.styl定义每种类型的 CSS 颜色变量
src/styles/markdown-extend.styl定义每种类型的边框、背景、图标样式

第一步:添加类型到组件#

打开 src/plugins/rehype-component-admonition.mjs,在第 9 行的类型联合中添加新类型名:

Terminal window
/**
* @param {('tip'|'note'|'important'|'caution'|'warning'|'info'|'shuwu'|'ai')} type
*/

第二步:注册组件映射#

打开 astro.config.mjs,在 rehypeComponents 的 components 对象中添加映射:

Terminal window
shuwu: (x, y) => AdmonitionComponent(x, y, "shuwu"),
ai: (x, y) => AdmonitionComponent(x, y, "ai"),

这行代码的意思是:当 Markdown 中遇到 :::shuwu 时,调用 AdmonitionComponent 并传入类型名 "shuwu"。

第三步:定义颜色变量#

打开 src/styles/variables.styl,在 define({...}) 块中添加:

Terminal window
--admonitions-color-shuwu: oklch(0.7 0.08 220) oklch(0.8 0.08 220)
--admonitions-color-ai: oklch(0.55 0.01 0) oklch(0.65 0.01 0)

每个变量有两个值,分别是 浅色模式 和 深色模式 的 oklch 颜色。

  • oklch(亮度 饱和度 色相) — 色相 220 = 蓝色,0 = 灰色

第四步:编写样式#

打开 src/styles/markdown-extend.styl,在 blockquote.admonition 内添加:

Terminal window
&.bdm-shuwu
border-color: var(--admonitions-color-shuwu)
background: oklch(0.95 0.04 220)
.dark &
background: oklch(0.25 0.04 220)
.bdm-title
color: var(--admonitions-color-shuwu)
&:before
background: var(--admonitions-color-shuwu)
mask-image: url("data:image/svg+xml,...") /* SVG 图标 */

图标可以是 SVG 内联数据,也可以用本地图片:

Terminal window
/* 使用本地图片作为图标 */
&.bdm-shuwu
.bdm-title
&:before
background: none
background-image: url("/favicon/logo.png")
background-size: contain
background-repeat: no-repeat
mask-image: none

使用方式#

在 Markdown 中直接写:

Terminal window
:::shuwu[标题]
内容
:::
:::ai
内容
:::

加 [标题] 会自定义标题文字,不加则默认显示类型名大写。