color-adjust: exact 必须写在@media print内才对打印生效;rgba()需改为rgb()或十六进制;background-color需对具体元素同时声明-webkit-print-color-adjust和color-adjust;background-image和css变量不可靠,应改用border、伪元素或内联svg。

color-adjust: exact 没写在 @media print 里
浏览器打印引擎完全独立于屏幕渲染,@media print 是唯一被识别的打印样式入口。哪怕你在全局 CSS 里写了 color-adjust: exact,只要没包在 @media print 块内,它就对打印无效。常见错误是把这条声明写在普通样式表顶部,或者只加在 body 上,结果打印时颜色照旧消失。
用了 rgba() 或透明色值
打印机不处理 alpha 通道,rgba(0,0,0,0.9) 会被降级为灰度甚至透明,一律得改用 #000 或 rgb(0,0,0)。检查预处理器(如 Sass 的 fade-out())是否悄悄生成了 rgba(),这类函数在编译后极易漏检。
background-color 被浏览器默认禁用
background-color 默认被忽略,哪怕加了 !important 也没用。必须对具体元素(如 .invoice-header)在 @media print 中同时声明:-webkit-print-color-adjust: exact 和 color-adjust: exact。这两个属性不继承,不能只写在 body 或通配符上;* { color-adjust: exact } 在 Firefox 中支持不稳定。
依赖背景图或 CSS 变量传递关键信息
background-image 在打印时几乎总是被忽略——这是 CSS 打印规范允许的“可选忽略”项,加 color-adjust 也无效。同样,color: var(--text-primary) 若变量未在 @media print 中静态解析,可能 fallback 到初始值。真正可靠的是 border、伪元素 ::before 插入 Unicode 符号,或内联 <svg></svg>。
实际打印效果受用户端设置强干预:Chrome 打印对话框里“背景图形”开关一旦关闭,所有 background-color 和 background-image 都会失效,这个行为无法用 CSS 绕过。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











