最稳妥方式是修改 custom.css 文件,路径为 C:\Users\用户名\.jupyter\custom\custom.css;切勿修改 codemirror.css,否则易致 kernel 崩溃或样式错乱;需用 UTF-8 无 BOM 编码,精准指定各区域选择器并加 !important,配合等宽字体栈与兜底 monospace。

直接改 custom.css 是最稳妥、可逆、不破坏升级路径的方式。别碰 codemirror.css,改完容易 kernel 崩溃或样式错乱。
找到并创建 custom.css 文件
Windows 默认路径是:C:\Users\用户名\.jupyter\custom\custom.css。如果 custom 文件夹或 custom.css 不存在,就手动建——不要去翻 site-packages 里那些深层路径。
常见错误现象:改了 notebook\static\components\codemirror\lib\codemirror.css 后,重启 notebook 看起来正常,但过几分钟 kernel 自动断连、输出区域文字重叠、中文标点错位。
- 用命令快速定位配置目录:
jupyter --config-dir - 然后拼出完整路径:
cd /d "C:\Users\用户名\.jupyter\custom"(Windows)或mkdir -p ~/.jupyter/custom(macOS/Linux) - 新建空文件
custom.css,用 UTF-8 编码保存(千万别用 BOM)
写对 CSS 选择器和 font-family 值
只靠改 .CodeMirror 不够——它只管代码编辑区;标题、Markdown 渲染、输入/输出提示、行号、甚至 <code> 标签都得单独指定,否则字体割裂。
推荐写法(适配中英文、等宽优先):
/* 全局基础字体 */
div.notebook,
div.text_cell,
div.cell,
.CodeMirror,
.output_subarea,
div.input_prompt,
div.output_prompt {
font-family: "Fira Code", "Consolas", "Microsoft YaHei Mono", "Microsoft YaHei", monospace !important;
}
<p>/<em> 输出内容区域(避免被 Markdown 渲染覆盖) </em>/
div.output_area pre,
div.output_area .highlight,
div.output_area .output_text {
font-family: "Fira Code", "Consolas", "Microsoft YaHei Mono", monospace !important;
}</p><p>/<em> 行内代码块 </em>/
code {
font-family: "Fira Code", "Consolas", monospace !important;
font-size: 0.95em;
}
关键点:
- 必须用引号包住含空格或中文的字体名,比如
"Microsoft YaHei Mono" - 末尾保留
monospace作为兜底,防止系统没装前几个字体时彻底崩形 - 加
!important是因为 Jupyter 的内联样式优先级高,不加很可能被覆盖 - 别写
font-family: "微软雅黑"单独出现——它不是等宽字体,代码会错位
改完不生效?检查这三件事
不是改了就立刻看到效果,常卡在这几个环节:
- 浏览器缓存:强制刷新(
Ctrl+Shift+R或Cmd+Shift+R),别只点刷新按钮 - 路径写错:确认
custom.css确实在.jupyter\custom\下,而不是.jupyter\custom\css\或其他子目录 - 语法错误:CSS 少了个
}或引号不匹配,整个文件会被浏览器静默忽略——打开浏览器开发者工具(F12),看 Console 是否报Failed to load resource或样式面板里custom.css没加载出来
如果用了 jupyterthemes(比如执行过 jt -t onedork),它会覆盖 custom.css 的效果,此时要么卸载它(pip uninstall jupyterthemes),要么改它的配置而非自己写 CSS。
真正麻烦的不是写几行 CSS,而是不同区域要用不同选择器精准命中;漏掉 div.output_prompt 或 code,就会出现“代码是等宽,但文档里的 print() 是宋体”这种割裂感。


















