243 words
1 minute
Fuwari 给代码块添加标题栏

本教程是在 伊卡改造博客的代码块 教程基础上的改进,修复了标题栏无法显示的问题。

效果#

src/example.md
```markdown title=src/example.md
example
```
NOTE

向上面这样在语言后面加上 title=文件名,即可在代码块上方显示文件名。

教程#

  1. src/plugins/expressive-code 文件夹下创建 file-title.ts 文件
src/plugins/expressive-code/file-title.ts
import { definePlugin } from "@expressive-code/core";
export function pluginFileTitle() {
return definePlugin({
name: "File Title",
hooks: {
preprocessMetadata: ({ codeBlock }) => {
const meta = codeBlock.meta;
if (!meta) return;
const fileMatch = meta.match(/title=([^\s]+)/);
if (fileMatch) {
codeBlock.props.title = fileMatch[1];
codeBlock.meta = meta.replace(fileMatch[0], "").trim();
}
},
},
});
}
  1. src/styles/expressive-code.css 中添加样式
src/styles/expressive-code.css
/* File title styles */
.frame.has-title:not(.is-terminal) {
.header {
@apply flex items-center;
padding: 0.5rem 1rem !important;
background: var(--codeblock-topbar-bg);
border-bottom: 1px solid oklch(0.25 0.02 var(--hue)) !important;
min-height: 2.5rem;
height: 2.75rem !important;
}
.title {
@apply text-sm font-medium;
color: oklch(0.75 0.05 var(--hue)) !important;
padding-right: 1rem !important;
padding-top: 0.1rem !important;
}
[data-language]::before {
position: absolute !important;
top: 0.75rem !important;
right: 0.5rem !important;
margin: 0;
opacity: 1 !important;
z-index: 10;
pointer-events: none;
}
}
  1. astro.config.mjs 中导入插件
import { pluginFileTitle } from "./src/plugins/expressive-code/file-title.ts";
export default defineConfig({
// ...
integrations: [
// ...
expressiveCode({
plugins: [
// ...
pluginFileTitle(),
],
}),
],
});
Fuwari 给代码块添加标题栏
https://astronaut.github.io/posts/how-to-add-code-block-title/
Author
关怀他人
Published at
2025-01-15
License
CC BY-NC-SA 4.0