Я использовал границы для имитации фона, когда мне действительно нужен цвет фона. Примерно так будет работать (но я прошу прощения за то, что не проверил это):
div.must-have-background-for-print {
position: relative;
width: 400px;
}
div.must-have-background-for-print div.background {
position: absolute;
top: 0;
left: 0;
height: 100%;
border-left: 400px solid #999;
}
В ответ на комментарий @Steve Quezadas идея заключается в том, что вместо использования фона вы вставляете элемент в элемент, которому нужен фон, и накладываете на него чрезвычайно широкую границу, чтобы он заполнял внешний элемент. Скорее всего, для этого потребуется, чтобы содержимое этого элемента также находилось внутри другой оболочки, чтобы оно отображалось над новым элементом фона ...
Если вы начали с этого:
<div class="has-background">Some stuff in here</div>
Вы можете использовать это:
<div class="has-background">
<div class="background" />
<div class="content">Some stuff in here</div>
</div>
Это очень уродливо, но я использовал его в прошлом, и это решает проблему с фоновыми цветами, а не с печатью. И, прежде чем вы спросите, вам придется адаптировать CSS к вашему конкретному случаю. Я просто описываю концепцию использования границ для замены фона. Ваша реализация будет зависеть от того, как ваша страница структурирована, и это чрезвычайно сложно сделать, если у вас нет фиксированной ширины или высоты над вашими элементами.