背景颜色未显示在打印预览中

时间:2013-02-20 18:39:51

标签: css google-chrome css3 printing webkit

我正在尝试打印页面。在那个页面中,我给了一张表背景颜色。 当我在chrome中查看打印预览时,它没有采用背景颜色属性...

所以我尝试了这个属性:

-webkit-print-color-adjust: exact; 

但仍然没有显示颜色。

http://jsfiddle.net/TbrtD/

.vendorListHeading {
  background-color: #1a4567;
  color: white;
  -webkit-print-color-adjust: exact; 
}


<div class="bs-docs-example" id="soTable" style="padding-top: 10px;">
  <table class="table" style="margin-bottom: 0px;">
    <thead>
      <tr class="vendorListHeading" style="">
        <th>Date</th>
        <th>PO Number</th>
        <th>Term</th>
        <th>Tax</th>
        <th>Quote Number</th>
        <th>Status</th>
        <th>Account Mgr</th>
        <th>Shipping Method</th>
        <th>Shipping Account</th>
        <th style="width: 184px;">QA</th>
        <th id="referenceSO">Reference</th>
        <th id="referenceSO" style="width: 146px;">End-User Name</th>
        <th id="referenceSO" style="width: 118px;">End-User's PO</th>
        <th id="referenceSO" style="width: 148px;">Tracking Number</th>
      </tr>
    </thead>
    <tbody>
      <tr class="">
        <td>22</td>
        <td>20130000</td>
        <td>Jim B.</td>
        <td>22</td>
        <td>510 xxx yyyy</td>
        <td>zznn@abc.co</td>
        <td>PDF</td>
        <td>12/23/2012</td>
        <td>Approved</td>
        <td>PDF</td>
        <td id="referenceSO">12/23/2012</td>
        <td id="referenceSO">Approved</td>
      </tr>
    </tbody>
  </table>
</div>

18 个答案:

答案 0 :(得分:367)

Chrome CSS属性-webkit-print-color-adjust: exact;正常运行。

但是,确保使用正确的CSS进行打印通常很棘手。可以采取一些措施来避免您遇到的困难。首先,将所有打印CSS与屏幕CSS分开。这是通过@media print@media screen完成的。

通常只是设置一些额外的@media print CSS是不够的,因为您在打印时仍然包含所有其他CSS。在这些情况下,您只需要了解CSS特性,因为打印规则不会自动赢取非打印CSS规则。

在您的情况下,-webkit-print-color-adjust: exact正在运行。但是,您的background-color和颜色定义会被具有更高特异性的其他CSS击败。

虽然我几乎在任何情况下赞同使用!important,但以下定义可以正常运行并揭露问题:

@media print {
    tr.vendorListHeading {
        background-color: #1a4567 !important;
        -webkit-print-color-adjust: exact; 
    }
}

@media print {
    .vendorListHeading th {
        color: white !important;
    }
}

以下是fiddle(和embedded,以便于打印预览。)

答案 1 :(得分:65)

CSS属性就是你所需要的它对我有用...在Chrome中预览你可以选择看它BW和颜色(颜色:选项 - 颜色或黑白)所以如果你没有这个选项,那么我建议你抓住这个Chrome扩展程序,让你的生活更轻松:

https://chrome.google.com/webstore/detail/print-background-colors/gjecpgdgnlanljjdacjdeadjkocnnamk?hl=en

你在小提琴上添加的网站需要你的媒体印刷css(你只需要添加它...

媒体打印身体中的CSS:

@media print {
body {-webkit-print-color-adjust: exact;}
}

<强>更新 好的,所以你的问题是bootstrap.css ...它有一个媒体打印css以及你做....你删除它,这应该给你的颜色....你需要做自己的或坚持bootstraps print css。

当我点击打印时,我看到了颜色.... http://jsfiddle.net/rajkumart08/TbrtD/1/embedded/result/

答案 2 :(得分:26)

我只需要将!important属性添加到background-color标签上,以便显示它,不需要webkit部分:

background-color: #f5f5f5 !important;

答案 3 :(得分:26)

如果关闭背景图形设置,Chrome在打印时将无法呈现背景色或其他几种样式。

这与css,@ media或特异性无关。您可能会破解它的方式,但获取chrome以显示背景颜色和其他图形的最简单方法是在“更多设置”下正确选中此复选框。

enter image description here

答案 4 :(得分:10)

如果您使用的是bootstrap或任何其他第三方CSS,请确保仅在其上指定媒体屏幕,以便您可以在自己的CSS文件中控制打印媒体类型:

<link rel="stylesheet" media="screen" href="">

答案 5 :(得分:7)

你的CSS必须是这样的:

@media print {
   body {
      -webkit-print-color-adjust: exact;
   }
}

.vendorListHeading th {
   background-color: #1a4567 !important;
   color: white !important;   
}

答案 6 :(得分:6)

@media print样式表中使用以下内容。

h1 {
    background-color:#404040;
    background-image:url("img/404040.png");
    background-repeat:repeat;
    box-shadow: inset 0 0 0 1000px #404040;
    border:30px solid #404040;
    height:0;
    width:100%;
    color:#FFFFFF !important;
    margin:0 -20px;
    line-height:0px;
}

以下是需要注意的几点:

  • 背景颜色是绝对的后备,主要用于后代。
  • background-image使用#404040的1px x 1px像素制作成PNG。如果用户启用了图像,则可以使用,如果不是......
  • 设置框阴影,如果不起作用......
  • 边框= 1/2所需的高度和/或盒子的宽度,实心,颜色。在上面的示例中,我想要一个60像素高的盒子。
  • 根据您在border属性中控制的内容,将高度/宽度归零。
  • 除非您使用!important
  • ,否则字体颜色将默认为黑色
  • 将line-height设置为0以修复没有物理尺寸的框。
  • 制作并托管您自己的PNG: - )
  • 如果块中的文本需要换行,则将其放在div中并使用position:relative定位div;并删除行高。

请参阅我的fiddle以获取更详细的演示。

答案 7 :(得分:6)

要解决使用BOOTSTRAP.CSS的问题,这就是解决方法!

我尝试了所有解决方案,但是这些解决方案都无法正常工作……直到我发现bootstrap.css的超级烦人的@media print会重置您所有的颜色,背景色,阴影等。

@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}

因此,请从bootstrap.css(或bootstrap.min.css)中删除此部分

或在您要在自己的@media print中打印的页面的CSS中覆盖这些值

@media print {
  body { 
    -webkit-print-color-adjust: exact; 
  }
  .customClass{
     //customCss + !important;
  }
  //more of your custom css
}

答案 8 :(得分:5)

您确定这是一个CSS问题吗?谷歌在这个问题上有一些帖子: http://productforums.google.com/forum/#!category-topic/chrome/discuss-chrome/eMlLBcKqd2s

可能与打印过程有关。在safari上,也是webkit,还有一个复选框,用于在打印机对话框中打印背景图像和颜色。

答案 9 :(得分:2)

我使用了purgatory101's answer,但无法保留所有颜色(图标,背景,文字颜色等等),尤其是CSS样式表无法与动态更改DOM元素颜色的库一起使用。因此,这是一个脚本,可以在打印之前更改元素的样式(background-colourcolour),并在打印完成后清除样式。避免在@media print样式表中编写大量CSS是很有用的,因为它适用于任何页面结构。

脚本的一部分专门用于保持FontAwesome图标的颜色(或任何使用:before选择器插入彩色内容的元素。)

<强> JSFiddle showing the script in action

兼容性适用于Chrome,我没有测试其他浏览器。

function setColors(selector) {
  var elements = $(selector);
  for (var i = 0; i < elements.length; i++) {
    var eltBackground = $(elements[i]).css('background-color');
    var eltColor = $(elements[i]).css('color');

    var elementStyle = elements[i].style;
    if (eltBackground) {
      elementStyle.oldBackgroundColor = {
        value: elementStyle.backgroundColor,
        importance: elementStyle.getPropertyPriority('background-color'),
      };
      elementStyle.setProperty('background-color', eltBackground, 'important');
    }
    if (eltColor) {
      elementStyle.oldColor = {
        value: elementStyle.color,
        importance: elementStyle.getPropertyPriority('color'),
      };
      elementStyle.setProperty('color', eltColor, 'important');
    }
  }
}

function resetColors(selector) {
  var elements = $(selector);
  for (var i = 0; i < elements.length; i++) {
    var elementStyle = elements[i].style;

    if (elementStyle.oldBackgroundColor) {
      elementStyle.setProperty('background-color', elementStyle.oldBackgroundColor.value, elementStyle.oldBackgroundColor.importance);
      delete elementStyle.oldBackgroundColor;
    } else {
      elementStyle.setProperty('background-color', '', '');
    }
    if (elementStyle.oldColor) {
      elementStyle.setProperty('color', elementStyle.oldColor.value, elementStyle.oldColor.importance);
      delete elementStyle.oldColor;
    } else {
      elementStyle.setProperty('color', '', '');
    }
  }
}

function setIconColors(icons) {
  var css = '';
  $(icons).each(function (k, elt) {
    var selector = $(elt)
      .parents()
      .map(function () { return this.tagName; })
      .get()
      .reverse()
      .concat([this.nodeName])
      .join('>');

    var id = $(elt).attr('id');
    if (id) {
      selector += '#' + id;
    }

    var classNames = $(elt).attr('class');
    if (classNames) {
      selector += '.' + $.trim(classNames).replace(/\s/gi, '.');
    }

    css += selector + ':before { color: ' + $(elt).css('color') + ' !important; }';
  });
  $('head').append('<style id="print-icons-style">' + css + '</style>');
}

function resetIconColors() {
  $('#print-icons-style').remove();
}

然后修改window.print功能,使其在打印前设置样式并在之后重置它们。

window._originalPrint = window.print;
window.print = function() {
  setColors('body *');
  setIconColors('body .fa');
  window._originalPrint();
  setTimeout(function () {
    resetColors('body *');
    resetIconColors();
  }, 100);
}

找到用于创建CSS的图标路径的部分:在元素之前是this SO answer

的副本

答案 10 :(得分:1)

在@media print {*,:after,:before ....}下的bootstrap css文件中有一种样式,其颜色和背景样式标记为!important,它删除任何元素上的任何背景颜色。杀掉那两块css就可以了。

Bootstrap正在做出执行决定,你应该从不在打印中有任何背景颜色,因此你必须编辑他们的css或者拥有更高优先级的另一种重要风格。干得好的工作......

答案 11 :(得分:1)

您还可以使用box-shadow属性。

答案 12 :(得分:0)

您可以通过 !important 使用内联 css 样式。 例如。

<p style="background:red!important">ABCD</p>

答案 13 :(得分:0)

  

对于IE

如果使用的是IE,则转到打印预览(在文档上单击鼠标右键->打印预览),转到设置,然后选择“打印背景色和图像”,选择该选项并尝试。

enter image description here

答案 14 :(得分:0)

这是最好的解决方案,如果您使用的是引导程序,则只需删除其中的所有代码即可 @media print {} 。并在进行打印预览时通过更多设置启用背景图形。

答案 15 :(得分:0)

如果您正在使用 Bootstrap 。只需在自定义css文件中使用此代码。 Bootstrap会在打印预览中删除所有颜色。

@media print{
  .box-text {

    font-size: 27px !important; 
    color: blue !important;
    -webkit-print-color-adjust: exact !important;
  }
}

答案 16 :(得分:-1)

我加载外部css源文件并更改media =&#34; screen&#34;媒体=&#34;打印&#34;并且显示了我桌子的所有边框

试试这个:

<link rel="stylesheet" media="print" href="bootstrap.css" />

<link rel="stylesheet" media="screen" href="bootstrap.css" />

答案 17 :(得分:-1)

如果您在没有&#34;打印媒体样式的情况下下载Bootstrap&#34;选项,你不会有这个问题,也不必删除&#34; @media print&#34;在bootstrap.css文件中手动编写代码。