惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Apple Machine Learning Research
Apple Machine Learning Research
大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
Last Week in AI
Last Week in AI
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
The Cloudflare Blog
博客园 - 【当耐特】
博客园 - 叶小钗
量子位
博客园 - 聂微东
S
SegmentFault 最新的问题
美团技术团队
Hugging Face - Blog
Hugging Face - Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
月光博客
月光博客
宝玉的分享
宝玉的分享
小众软件
小众软件
罗磊的独立博客
有赞技术团队
有赞技术团队
Stack Overflow Blog
Stack Overflow Blog

唯知笔记

唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站 唯知笔记 | 一个高效的知识分享网站
唯知笔记 | 一个高效的知识分享网站
weizwz@foxma · 2025-12-31 · via 唯知笔记

VitePress 优化代码块样式 ​

主要目标:1. 代码块支持显示所属文件,并显示文件类型图标 ;2. 将默认代码块样式修改为 mac风格

实现 ​

1. 安装插件 vitepress-plugin-group-icons

VitePress 官方也在用的代码块插件,直接实现我们的第1个小目标

sh

pnpm add vitepress-plugin-group-icons

配置 config,并导入主题配置中

.vitepress/config/index.ts.vitepress/theme/index.ts

ts

import { defineConfig } from 'vitepress'
import { groupIconMdPlugin, groupIconVitePlugin } from 'vitepress-plugin-group-icons'

export default defineConfig({
  markdown: {
    config(md) {
      md.use(groupIconMdPlugin)
    }
  },
  vite: {
    plugins: [groupIconVitePlugin()]
  }
})

ts

import Theme from 'vitepress/theme'
import 'virtual:group-icons.css'

export default Theme

2. 修改样式 ​

新建 code.css 文件并导入主题配置中。 部分使用的变量参见 我的 Tailwind 变量配置

.vitepress/theme/style/code.css.vitepress/theme/index.ts

css

/* mac 窗口小圆点颜色 */
.vp-doc {
  div[class*='language-'],
  .vp-code-group,
  .vp-code-block-title {
    --code-red: var(--mac-window-red);
    --code-yellow: var(--mac-window-yellow);
    --code-green: var(--mac-window-green);
  }
}

/* 代码code:修改背景色 */
.vp-doc :not(pre) > code {
  @apply bg-main/10;
}

/* 代码块 */
.vp-doc *:not(.vp-code-block-title):not(.blocks) > div[class*='language-'],
.vp-doc .vp-code-block-title .vp-code-block-title-bar {
  @apply pt-5;
  /* 代码块:添加macOS风格的圆点 */
  &::before {
    @apply absolute top-3 left-3 z-1 block h-3 w-3 rounded-full;
    content: '';
    background-color: var(--code-red);
    box-shadow:
      20px 0 0 var(--code-yellow),
      40px 0 0 var(--code-green);
  }
  /* 代码块:下移行号 隐藏右侧竖线 */
  .line-numbers-wrapper {
    @apply border-r-0 pt-10;
    /* 代码块:重建行号右侧竖线 */
    &::after {
      @apply absolute top-10 right-0 h-[calc(100%-60px)] border-r border-(--vp-code-block-divider-color);
      content: '';
    }
  }
}

/* 适配多文件代码块 */
.vp-doc {
  .vp-code-group {
    .tabs {
      @apply pt-5;
      &::before {
        @apply absolute top-3 left-3 h-3 w-3 rounded-full;
        content: '';
        background: var(--code-red);
        box-shadow:
          20px 0 var(--code-yellow),
          40px 0 var(--code-green);
      }
    }
    div[class*='language-'] {
      @apply pt-0 shadow-none;
      &::before {
        @apply hidden;
      }
      .line-numbers-wrapper {
        @apply pt-5;
        &::after {
          @apply top-5 h-[calc(100%-40px)];
        }
      }
    }
  }
}

ts

import './style/code.css'