VitePress 代码块优化
书接上回 VitePress 代码块显示行号
现在的代码块是不能设置标题的。可以使用 vitepress-plugin-group-icons 插件来为代码块添加标题,VitePress 的官方文档中也使用了这个插件
可参考 note.weizwz.com
安装插件
选择你使用的包管理器即可
shell
$ npm add vitepress-plugin-group-iconsshell
$ pnpm add vitepress-plugin-group-iconsshell
$ yarn add vitepress-plugin-group-icons配置插件
添加如下代码
ts
import { groupIconMdPlugin, groupIconVitePlugin } from 'vitepress-plugin-group-icons'
export default defineConfig({
markdown: {
config: (md) => {
md.use(groupIconMdPlugin)
},
},
vite: {
plugins: [
groupIconVitePlugin()
],
}
})ts
import 'virtual:group-icons.css'修复小圆点与阴影
配置完成后,代码块的标题与图标均生效,但上一篇中配置的小圆点与阴影再次错乱了。仿照针对代码块的修复,可对带有标题的代码块进行类似的修复
添加如下样式
css
/* Code block titles fixes */
/* 代码块标题栏 - 增加留空边距 重置 VitePress 内置外边距 */
/* 为了让外边距统一在外层 .vp-code-group 中设置,便于添加阴影 */
.vp-doc div.vp-code-block-title-bar {
padding-top: 20px;
margin-left: 0;
margin-right: 0;
}
/* 代码块标题栏 - 添加 macOS 风格的小圆点 */
.vp-doc div.vp-code-block-title-bar::before {
content: "";
display: block;
position: absolute;
top: 12px;
left: 12px;
width: 12px;
height: 12px;
background-color: #ff5f56 !important;
border-radius: 50%;
box-shadow: 20px 0 0 #ffbd2e, 40px 0 0 #27c93f;
z-index: 1;
}
/* 代码块标题栏内代码块 - 重置样式 */
.vp-doc div.vp-code-block-title div[class*="language-"] {
box-shadow: none !important;
padding-top: 0 !important;
margin: 0 !important;
}
/* 代码块标题栏内代码块 - 去除小圆点 */
.vp-doc div.vp-code-block-title div[class*="language-"]::before {
content: "";
background-color: inherit !important;
box-shadow: none !important;
}
/* 代码块标题栏内代码块 - 下移行号 重置右侧竖线 */
.vp-doc div.vp-code-block-title .line-numbers-wrapper {
padding-top: 20px !important;
border-right: 1px solid var(--vp-code-block-divider-color) !important;
}
/* 代码块标题栏内代码块 - 删除重建竖线 */
.vp-doc div.vp-code-block-title .line-numbers-wrapper::after {
content: "";
border-right: none;
}
/* 代码块标题栏 - 添加阴影 重建移动设备外边距 */
.vp-doc div.vp-code-block-title {
box-shadow: 0 1px 6px 0 rgb(0 0 0 / 40%);
margin: 16px -24px;
}
/* 代码块标题栏 - 重置圆角 设置外边距 */
@media (min-width: 640px) {
.vp-doc div.vp-code-block-title {
margin: 16px 0;
border-radius: 8px;
}
}