Chrome 打印预览与 DEVTools 中的不同

Posted

技术标签:

【中文标题】Chrome 打印预览与 DEVTools 中的不同【英文标题】:Chrome print preview different than in DEVTools 【发布时间】:2014-11-18 14:43:23 【问题描述】:

我已经设置了一个打印样式表,在 Firefox 中看起来不错。

在 Chrome 中,整个页面在 打印预览 (CTRL+P) 中被破坏,但如果我打开 Chrome DEVTools (F12) 并使用 emulate CSS media 功能,页面看起来是正确的 - 比如在火狐中。

奇怪的是,如果我再次打开打印预览,在我激活一次模拟选项后,页面在打印预览中看起来正确!即使我只是激活然后停用模拟选项,这样做之后打印预览总是正确的!

我的 print.css 以

开头

@media print ...

并包含在页面<head> 中,如下所示:

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

我已尝试删除 media="print",但没有任何变化。

【问题讨论】:

【参考方案1】:

在您的打印样式表中,您需要添加以下内容:

* 
    transition: none !important;

Chrome 似乎没有禁用打印媒体的转换属性。

Here 是我找到答案的地方。

【讨论】:

仅用于媒体打印,我已添加此样式。如果我们共同应用这个 css,这个工作。如果我们只申请媒体打印,那么这是行不通的。周围有工作吗? :-( @JeevaJsb - 我遇到了同样的问题。请参阅我的答案以了解可能的解决方法。【参考方案2】:

要添加到 Ustice 的答案和 Jeeva Jsb 的评论:您可能需要在应用 transition: none !important 规则后允许 DOM 重新呈现。在以编程方式打印页面之前,我通过在正文中添加 print CSS 类来实现这一点:

CSS:

body.print * 
  transition: none !important;  

JS(使用 jQuery):

$('body').addClass('print');
setTimeout(function() 
  window.print();
, 0);

不要忘记在您的用户完成页面打印后删除print 类。 (见how to detect window.print() finish。)

【讨论】:

【参考方案3】:

我遇到了完全相同的头部断裂问题,我已经能够解决它。

在我的情况下,问题是由于我没有在“屏幕”CSS 中使用的“打印”CSS 使用自定义@font-face 引起的。

似乎浏览器在第一次预览时没有从打印样式表中加载自定义 @font-face 并且使页面或多或少地呈现为空。它会在第二次打印预览时完美呈现。

我的解决方案是在屏幕 css 中也从 pint css 加载相同的 @font-face 规则。这样,在查看打印预览时浏览器已经加载了字体,这一切都像一个魅力。

【讨论】:

【参考方案4】:

如果您在给定的答案中没有找到解决方案,那么我有话要说:

在 Chrome DEVTools 中 emulation css media 中的 print 选项仅用于将打印 css 规则应用于页面,出于测试目的,它不考虑与打印相关的所有其他内容,它显示打印预览但有时它不会将打印页面显示为实际的打印预览。

如果您使用的是引导程序,那么如果您仅使用 col-md-*col-sm-* 它将不起作用,但如果您使用 col-xs-* 那么它将起作用,因为问题是页面本身很小像素,所以 bootstrap 认为它需要应用 xs 样式。

不同的浏览器在打印页面时表现不同。唯一的测试打印的最佳方法是实际打印,或打印到 pdf。

【讨论】:

感谢您对col-xs- 的评论,这解决了我的问题! 我很高兴@DLeh。

以上是关于Chrome 打印预览与 DEVTools 中的不同的主要内容,如果未能解决你的问题,请参考以下文章

Chrome 无头打印到 PDF 中的其他选项

Chrome 和 Mozilla Firefox 中的不同打印预览

打印预览冻结Chrome中的Javascript

Chrome 打印预览改变了网页的样式

前端快讯Chrome 66 DevTools 新特性

在 chrome 中打印预览后管理图像的 css 样式