HTML5 里用 border 设实线边框,但别只写 border: 1px solid #000
直接写 border 确实能显示实线,但打印时经常变虚、变淡甚至消失——不是你显示器问题,是浏览器默认对打印媒体做了「降级处理」:禁用部分颜色、弱化细线、跳过背景和某些边框样式。
关键不是“怎么画出来”,而是“怎么让打印机也认它”。必须显式指定打印媒体样式,并加固边框参数:
-
border-width至少设为0.5pt或1pt(注意单位!pt是印刷标准,px在打印时无固定物理尺寸) -
border-color避免用#ccc这类浅灰,优先用#000或black - 必须用
@media print单独覆盖,不能只靠屏幕样式继承
加 @media print 规则后仍没效果?检查这三点
写了 @media 却没生效,大概率卡在这几个实际细节上:
- 样式表是否被
media="screen"属性限制?会直接屏蔽打印样式,删掉media属性或改成media="all" - 有没有其他 CSS 规则在打印时把
border覆盖成none?比如重置库(normalize.css)或 UI 框架(Bootstrap)自带的打印样式,用浏览器打印预览模式的开发者工具,勾选「print」模拟,逐层检查 computed 样式 -
border-style别偷懒写solid就完事——有些旧版 IE/Edge 打印引擎对缩写解析不稳定,拆开写:border-top-style: solid; border-right-style: solid;更稳妥
打印实线边框太细或断续?试试 outline 替代方案
当 border 在特定打印机(尤其激光机低 DPI 模式)下依然发虚,可临时用 outline 做补救。它不占布局空间,但打印兼容性反而更好:
立即学习“前端免费学习笔记(深入)”;