如何强制浏览器在CSS中打印背景图像?

Dis*_*oat 95 css printing background-image

之前曾问过这个问题,但解决方案并不适用于我的情况.我想确保打印某些背景图像,因为它们是页面的组成部分.(它们不是直接在页面中的图像,因为它们中有几个被用作CSS精灵.)

关于同一个问题的另一个解决方案建议使用list-style-image,只有当每个图标都有不同的图像时才能使用,不能使用CSS精灵.

除了创建一个内联图标的单独页面,还有另一种解决方案吗?

Mar*_*olo 194

使用Chrome和Safari,您可以将CSS样式添加-webkit-print-color-adjust: exact;到元素以强制打印背景颜色和/或图像

  • 这太棒了.使phantomjs用户/ webkit的生活更轻松 (4认同)
  • @Brett84c:我不同意,因为它只是一个浏览器解决方案。 (3认同)
  • 那火狐呢? (2认同)
  • @DisgruntledGoat应该更新这个是正确的答案,因为它很快解决了我的问题(我的工作项目只关注Chrome).它显然不适用于所有浏览器,但它应该是预先知道的,无论如何. (2认同)

ckp*_*r02 71

我找到了一种用CSS打印背景图像的方法.它有点依赖于你的背景布局,但它似乎适用于我的应用程序.

基本上,您将@media print样式表添加到样式表的末尾并稍微更改正文背景.

例如,如果您当前的CSS看起来像这样:

body {
background:url(images/mybg.png) no-repeat;
}
Run Code Online (Sandbox Code Playgroud)

在样式表的末尾,添加:

@media print {
body {
   content:url(images/mybg.png);
  }
}
Run Code Online (Sandbox Code Playgroud)

这将图像作为"前景"图像添加到主体,从而使其可打印.您可能需要添加一些额外的CSS才能z-index正确使用.但同样,它取决于您的页面布局.

当我无法在打印视图中显示标题图像时,这对我有用.

  • 虽然这不是一个"正确"的答案.它远比接受的答案更有帮助. (4认同)
  • 对于我需要做的事情来说,这是一个很棒的解决方案,它为`@media print`切换了一个内联的`<img>`(对于RWD)和另一个.网络图像是在黑暗的背景上,因此打印该图像不适用于白纸,我不想强​​迫用户在标题上打印深色背景.完善! (2认同)

小智 65

默认情况下,浏览器可以选择打印背景颜色和图像.您可以在CSS中添加一些行来绕过它.只需添加:

* {
    -webkit-print-color-adjust: exact !important;   /* Chrome, Safari */
    color-adjust: exact !important;                 /*Firefox*/
}
Run Code Online (Sandbox Code Playgroud)

  • 为什么`!important`是必要的? (3认同)
  • `!important` 对我来说没有必要 (3认同)

Mar*_*c B 47

您几乎无法控制浏览器的打印方法.最多可以提出建议,但如果浏览器的打印设置"不打印背景图像",那么如果不重写页面将背景图像转换为恰好位于其他内容后面的浮动"前景"图像,则无法做到.


Tar*_*rik 13

以下代码适用于我(至少对于Chrome).

我还添加了一些边距和页面方向控件.(肖像,风景)

<style type="text/css" media="print">
@media print {
  body {-webkit-print-color-adjust: exact;}
}
@page {
    size:A4 landscape;
    margin-left: 0px;
    margin-right: 0px;
    margin-top: 0px;
    margin-bottom: 0px;
    margin: 0;
    -webkit-print-color-adjust: exact;
}
</style>
Run Code Online (Sandbox Code Playgroud)


小智 8

确保使用!important属性.这大大增加了打印时保留样式的可能性.

#example1 {
    background:url(image.png) no-repeat !important;
}

#example2 {
    background-color: #123456 !important;
}
Run Code Online (Sandbox Code Playgroud)

  • 这似乎对 Mac 上的 Chrome、Firefox 和 Safari 没有影响。 (3认同)

小智 6

就像@ ckpepper02所说,机身内容:url选项效果很好.然而,我发现如果你稍微修改它,你可以使用它来添加一个使用:before伪元素的标题图像,如下所示.

@media print {
  body:before { content: url(img/printlogo.png);}
}
Run Code Online (Sandbox Code Playgroud)

这将使图像滑到页面顶部,从我的有限测试中,它可以在Chrome和IE9中运行

-hanz


Dti*_*son 5

使用伪元素。虽然许多浏览器会忽略背景图像,但其内容设置为图像的伪元素在技术上不是背景图像。然后,您可以将背景图像大致定位在图像应该放置的位置(尽管它不像原始图像那么简单或精确)。

一个缺点是,要在 Chrome 中使用此功能,您需要在打印媒体查询之外指定此行为,然后使其在打印媒体查询块中可见。所以,像这样的事情...

.image:before{
        visibility:hidden;
        position:absolute;
        content: url("your/image/path");
    }   

@media print {
.image{
   position:relative;
    }
    .image:before{
       visibility:visible;
       top:etc...
    }       
}
Run Code Online (Sandbox Code Playgroud)

缺点是图像通常会在正常页面加载时下载,从而增加不必要的体积。您可以通过仅使用与原始可见图像相同的图像/路径来避免这种情况。