我如何强制浏览器在CSS中打印背景图片?
这个问题以前曾经问过,但是解决办法不适用于我的情况。 我想确保某些背景图像被打印,因为它们是页面不可分割的一部分。 (他们不是直接在页面中的图像,因为有几个被用作CSS精灵。)
在同一个问题上的另一个解决schemebuild议使用list-style-image
,只有在每个图标都有不同的图像时才可以使用,不需要CSS sprites。
除了用内联的图标创build一个单独的页面,还有其他解决scheme吗?
您对浏览器的打印方法几乎没有控制权。 最多可以selectSUGGEST,但是如果浏览器的打印设置有“不打印背景图像”,那么在没有重写页面的情况下,就无法将背景图像变成浮动的“前景”图像。
使用Chrome和Safari,您可以添加CSS样式-webkit-print-color-adjust: exact;
元素强制打印背景颜色和/或图像
我find了一种用CSS打印背景图片的方法。 这有点依赖于你的背景布局,但似乎适用于我的应用程序。
本质上,您将@media print
添加到样式表的末尾,并略微更改主体背景。
例如,如果你现在的CSS如下所示:
body { background:url(images/mybg.png) no-repeat; }
在样式表的最后,添加:
@media print { body { content:url(images/mybg.png); } }
这将图像添加到身体作为“前景”图像,从而使其可打印。 您可能需要添加一些额外的CSS来使z-index
正确。 但是,这又取决于你的页面布局。
这对我来说,当我不能得到一个标题图像显示在打印视图。
浏览器默认情况下可以select打印背景颜色和图像。 你可以在CSS中添加一些行来绕过这个。 只需添加:
* { -webkit-print-color-adjust: exact !important; /* Chrome, Safari */ color-adjust: exact !important; /*Firefox*/ }
确保使用!important属性。 这大大增加了打印时保留样式的可能性。
#example1 { background:url(image.png) no-repeat !important; } #example2 { background-color: #123456 !important; }
下面的代码适用于我(至less对于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>
就像@ ckpepper02所说的,正文内容:url选项效果不错。 然而,我发现如果你稍微修改它,你可以使用它来添加一个头像使用:before伪元素如下。
@media print { body:before { content: url(img/printlogo.png);} }
这将在页面顶部的图像,从我有限的testing,它在Chrome和IE9的作品
-hanz
使用psuedo-elements。 虽然许多浏览器会忽略背景图像,但是将其内容设置为图像的伪元素在技术上不是背景图像。 然后,您可以将背景图像大致定位在图像应该去的地方(尽pipe它不像原始图像那么容易或精确)。
一个缺点是,要在Chrome中使用,您需要在打印介质查询之外指定此行为,然后使其在打印介质查询块中可见。 所以,这样的事情…
.image:before{ visibility:hidden; position:absolute; content: url("your/image/path"); } @media print { .image{ position:relative; } .image:before{ visibility:visible; top:etc... } }
缺点是图像通常会在正常的页面加载下载,增加了不必要的批量。 您可以通过仅使用您已经用于原始可见图像的相同图像/path来避免这种情况。
它是在谷歌浏览器,当你添加!重要的属性到背景图像确保你先添加属性,然后再试一次,你可以这样做
.inputbg { background: url('inputbg.png') !important;
}