在基于Next.js、MDX和Gray Matter的博客中如何渲染脚注?
在基于Next.js、MDX和Gray Matter的博客中如何渲染脚注?
嘿,我刚好折腾过类似的场景!你现在用的MDXRemote默认是不支持脚注这种扩展Markdown语法的,得靠remark生态的插件来搞定,一步步来很简单:
1. 安装脚注解析插件
首先得装remark-footnotes,它专门用来解析这种[^1]格式的脚注语法,在项目根目录跑命令:
npm install remark-footnotes # 或者用yarn yarn add remark-footnotes # 或者pnpm pnpm add remark-footnotes
2. 给MDXRemote配置插件
接下来修改你渲染MDX的代码,把这个插件加到MDXRemote的配置里就行。比如原来的MDXRemote渲染部分,现在要引入插件并配置:
// 先引入插件 import remarkFootnotes from 'remark-footnotes'; // ... 其他已有的导入,比如MDXRemote、你的自定义组件 // 然后修改MDXRemote的使用 <MDXRemote source={content} // 这里是你从gray-matter解析出来的MDX内容 components={{ Carousel, CarouselTwo, Youtube, HoverImageLink, // 要是你想自定义脚注的渲染组件,也可以在这里加,比如自定义FootnoteRef或者FootnoteList }} // 关键就是加这一行,把插件传进去 remarkPlugins={[remarkFootnotes]} />
3. 给脚注加样式(可选但推荐)
默认渲染出来的脚注就是普通的HTML元素,样式会很朴素,你可以在globals.css里加一点CSS来美化,比如:
/* 脚注上标的样式 */ .footnote-ref a { font-size: 0.8em; vertical-align: super; text-decoration: none; color: #3b82f6; margin-left: 0.2em; } .footnote-ref a:hover { text-decoration: underline; } /* 脚注列表的样式 */ .footnote-list { margin-top: 3em; border-top: 1px solid #e5e7eb; padding-top: 1.5em; list-style: none; counter-reset: footnote-counter; } .footnote-list li { margin-bottom: 1em; counter-increment: footnote-counter; padding-left: 1.5em; position: relative; } .footnote-list li::before { content: counter(footnote-counter) "."; font-weight: 600; position: absolute; left: 0; color: #3b82f6; }
这样处理之后,你写的[^1]就会变成带样式的上标链接,对应的脚注内容也会在页面底部生成格式化的列表,点击上标还能直接跳转到对应的脚注位置,体验就很完整啦!
备注:内容来源于stack exchange,提问作者T.McL
相关产品推荐
相关产品推荐

