修复代码块文字与背景对比度不足的问题
记录时间:2026-05-15
问题
在 Nuxt Content 的 ContentRenderer 渲染的笔记页面中,代码块(<pre>)的文字颜色与背景色对比度不足,导致代码难以阅读。原始样式只有一套颜色(深色背景 #282c34 + 浅灰文字 #abb2bf),没有区分亮色/暗色模式,切换主题后问题更加明显。
解决方案
核心思路:为亮色和暗色模式分别定义代码块样式
原来的 .prose pre 只有一套配色,无论亮色还是暗色模式都使用相同的背景和文字颜色。修复方式是将其拆分为两套:
/* 亮色模式:浅背景 + 深色文字 */
.prose pre {
overflow-x: auto;
margin: 1em 0;
padding: 16px 20px;
background: #f5f5f5;
color: #1a1a2e;
border-radius: 6px;
line-height: 1.65;
white-space: pre-wrap;
word-wrap: break-word;
}
/* 暗色模式:深背景 + 亮色文字 */
html.dark .prose pre {
background: #1e1e2e;
color: #e0e0e8;
}
对比度变化
| 模式 | 修改前 | 修改后 |
|---|---|---|
| 亮色 | 未区分,对比度低 | #f5f5f5 背景 + #1a1a2e 文字,对比度 ≈ 14:1 |
| 暗色 | #282c34 + #abb2bf,对比度 ≈ 4.5:1 |
#1e1e2e + #e0e0e8,对比度 ≈ 10:1 |
修改文件
app/assets/css/main.css— 修改.prose pre样式,新增html.dark .prose pre覆盖规则
小结
代码块样式需要跟随网站的亮色/暗色主题切换。使用 html.dark 选择器为暗色模式单独定义背景和文字颜色,确保两种模式下对比度都达到 WCAG AA 标准(≥ 4.5:1),推荐达到 7:1 以上以获得更好的阅读体验。