直接修改 .jupyter/custom/custom.css 是最稳定方案,需同时设置 .cm-s-ipython .codemirror(编辑态)和 .cell.code_cell .input .highlight(渲染态)背景色,推荐用带 alpha 的十六进制如 #1e1e1e99 并加 !important,改后须 ctrl+f5 硬刷新。

直接改 custom.css 是最稳的方案
Jupyter Notebook 没有“选中一段代码 → 设置背景色”这种 GUI 操作,所有代码块背景色都由 CSS 控制。想全局生效、长期稳定,就得改 .jupyter/custom/custom.css 文件。这个文件优先级高于主题自带样式,且重启 Notebook 后仍保留。
- 路径:Windows 是
C:\Users\{用户名}\.jupyter\custom\custom.css,macOS/Linux 是~/.jupyter/custom/custom.css - 如果目录或文件不存在,手动创建(注意是
custom文件夹,不是custom_css或其他变体) - 只改代码编辑区(CodeMirror)背景,不影响 Markdown 单元格或输出区域 —— 这是常见误操作点:有人往
blockquote或.rendered_html里加背景,结果发现代码块没变 - 关键选择器是
.cm-s-ipython .CodeMirror(编辑态)和.cell.code_cell .input .highlight(渲染态),两者都要设才完整
.cm-s-ipython .CodeMirror 背景色怎么写才不糊字
直接设 background: #2d2d2d 很容易让语法高亮文字(比如绿色字符串、蓝色关键字)被吞掉,尤其当颜色对比度不足时。真正起效的写法得兼顾可读性:
- 用 HSL 或带 Alpha 的十六进制,例如
background: #1e1e1e99(深灰+半透),既压暗背景又保留底层高亮色层次 - 别碰
color(文字色),那是 Pygments 控制的;只动background,否则可能和%colors冲突 - 如果用了
jupyterthemes,它的主题 CSS 会注入大量规则,你加的custom.css必须带!important才能覆盖,比如:.cm-s-ipython .CodeMirror { background: #1e1e1e !important; } - 改完必须硬刷新浏览器(Ctrl+F5),普通 F5 不行 —— 因为 Jupyter 会缓存 CSS
为什么 %colors 不能改背景色
%colors 只切换 Pygments 词法高亮的主题(比如 Linux、LightBG),它控制的是关键字/字符串/注释等元素的 color 和 background-color,但**不控制整个编辑框的底色**。执行 %colors Linux 后,你看到的是绿底白字,那其实是 Pygments 把 <span></span> 标签的背景全刷成了绿色,而 CodeMirror 容器本身仍是默认白色/浅灰。
- 想验证:打开浏览器开发者工具(F12),定位到
<div class="CodeMirror">,看它的 <code>background值 ——%colors不动它 - 所以如果你要的是“整块代码区域统一深色背景”,
%colors达不到;它只适合调代码内各元素的配色 - 顺带一提:
%colors NoColor会关掉所有高亮,但 CodeMirror 背景依然不变,这时候才真正暴露底层背景色 - 先运行
jt -t onedork应用主题,再查当前主题的 CodeMirror 背景色(F12 查.cm-s-ipython .CodeMirror的 computed styles) - 比如
onedork默认是#282c34,你想改成更暖的#2a2a2a,就写:.cm-s-ipython .CodeMirror { background: #2a2a2a !important; } - 别试图改
jupyterthemes/styles/onedork.less再重编译 —— 编译工具链已弃用,且新版jt不再提供编译命令 - 如果发现改了没反应,八成是浏览器缓存或 CSS 选择器权重不够,加
!important+ Ctrl+F5 是最快排查法
用 jupyterthemes 主题时怎么微调背景
装了 jupyterthemes 后,主题 CSS 会覆盖默认样式,但它的 compiled/*.css 文件是只读的,直接改会被下次 jt -t 覆盖。安全做法是:在 custom.css 里针对性覆盖。
.output_subarea)、Markdown 渲染区(.rendered_html)的背景是三套独立样式,改一个不会联动另外两个。需要统一风格,得分别写规则。











