打印纸张大小的 CSS 媒体查询

Posted

技术标签:

【中文标题】打印纸张大小的 CSS 媒体查询【英文标题】:CSS media queries for print paper size 【发布时间】:2019-01-19 15:47:50 【问题描述】:

纸在世界各地的形状都不一样。我有一份文档,当它在 A4 和 US Letter 上打印时,我想以不同的方式打印。一些元素应该被隐藏或显示。显而易见的建议是使用这样的媒体查询:

@media print and (max-height: 280mm) 
    .a4-only 
        display: none;
    

不过,这似乎不起作用,可能是因为它使用的是总文档高度或一些不相关的窗口高度而不是页面高度。

有没有办法准确地处理页面大小?

【问题讨论】:

【参考方案1】:

浏览器对打印特定媒体查询的支持多种多样,似乎没有任何好的资源。跨浏览器确实不可能,在某些浏览器中根本不支持。例如,Safari 似乎使用浏览器的大小而不是页面来进行媒体查询。

您可以让它在 Chrome 和 Firefox 中运行。我使用大小比敲了一个非常粗略的演示,以展示通过一些工作可以实现什么。目前在 macOS 上测试并使用当前版本的 Chrome 和 Firefox。您应该在页面的开头收到一条带有打印页面大小的消息(仅在打印时)。

http://gsgd.co.uk/sandbox/print-test.html

主要技巧是使用 vw 单位来检查高度,因此使用纵横比可以针对特定的纸张尺寸:

@media print and (min-height:160vw) and (max-height: 170vw)  /* legal-size styling */ .standard.container::before  content: "LEGAL";  
@media print and (min-height:135vw) and (max-height: 145vw)  /* A4 styling */ .standard.container::before  content: "A4";  
@media print and (min-height:125vw) and (max-height: 135vw)   /* letter-size styling */ .standard.container::before  content: "LETTER";  

不幸的是,Chrome 的打印页面大小似乎与输出页面大小不匹配,所以我猜测某些样式与 Chrome 匹配。

@media print and (min-height:120vw) and (max-height: 150vw)  /* legal-size styling */ .chrome.container::before  content: "LEGAL";  
@media print and (min-height:100vw) and (max-height: 120vw)  /* A4 styling */ .chrome.container::before  content: "A4";  
@media print and (min-height:80vw) and (max-height: 100vw)   /* letter-size styling */ .chrome.container::before  content: "LETTER";  

使用极其简陋的浏览器检测器脚本

if(navigator.userAgent.match(/chrome/i)) 
    document.querySelector('.container').className = 'chrome container'

让 Safari 工作的想法是手动调整窗口大小,但这可能需要大量工作,并且需要用户预先选择打印尺寸。

所有这一切都表明您可能会获得更好的里程来修复您的布局以更好地响应不同的宽度。

【讨论】:

我可以使用这些设置,以及将@media print and (max-width: 8.5in) 用于字母格式,但是如果我添加`和(方向:纵向)`,它会破坏我的打印预览页面。关于如何将纵向/横向添加到此打印查询中是否有任何建议?

以上是关于打印纸张大小的 CSS 媒体查询的主要内容,如果未能解决你的问题,请参考以下文章

CSS打印媒体查询删除空格

使用媒体查询更改变量

AngularJS:使用 css 媒体查询来调整屏幕大小

打印时,浏览器不知道纸张的宽度

CSS 媒体查询似乎无法正常工作

如何使用 CSS 媒体查询检测 Android 设备的默认字体大小?