admin 管理员组

文章数量: 887021

本文将教您开始为要打印的页面编写CSS所需要的一切提供帮助。

@media 规则

If you’ve done any responsive design, you’ll already know about the @media rule. As well as different screen sizes, @media also lets you target “print” media. Here’s an example:
如果你做过任何响应性的设计,你就已经知道 @media 规则了。除了不同的屏幕大小,@media还可以为你控制打印样式。下面是一个例子:

@media print {
	/* 这些样式仅在页面打印或保存为PDF时使用。 */
	h1 { font-size: 16pt; }
}

使用此规则,您可以将标准的css指定为普通样式,然后添加一些仅在打印时使用的自定义样式。

p { margin: 1em 0; }

@media print {
 /* 打印时隐藏相关文章链接 */
 .related-articles { display: none; }
}

如果你想将所有标准屏幕样式“归零”并从头开始,你可以用另一个 @media 规则来包装你的屏幕样式:

@media screen {  
 /* 此处为标准样式。 */  
}  
  
@media print {  
 /* 在此处打印样式。 */  
}  

分页符属性

为了确保内容在页面之间流畅地流动,您需要控制内容在页面之间分割的时间。例如,如果一个大标题出现在页面底部,这看起来很尴尬——你希望它从一个新的页面开始。类似地,如果可能,您可能希望避免一个表跨越多个页面。

You can do this using page-break-before, page-break-after, and page-break-inside. You can set the value for these properties to always or avoid.
你可以使用page-break-beforepage-break-afterpage-break-inside来实现这一点。你可以将这些属性的值设置为alwaysavoid


h1 {  
 /* h1元素始终从新页面的顶部开始。 */  
 page-break-before: always;  
}  
  
section.city-map {  
 /* 此部分始终占据其自己的一个或多个页面。 */  
 page-break-before: always;  
 page-break-after: always;  
}  
  
table {  
 /* 如果可能,表不会跨页拆分。 */  
 page-break-inside: avoid;  
}  

提示:重复表格标题

如果您的文档包含跨越多页的表格,则在打印时将很难阅读,除非表格标题在每一页的开头重复。这很容易实现,只需使用表中的 theadtbody 元素。

<table>  
 <thead>  
   <tr>  
     <th>City</th>  
     <th>Population</th>  
 </thead>  
 <tbody>  
   <tr>  
     <td>Sydney</td>  
     <td>4.627 million (2018)</td>  
   </tr>  
 </tbody>  
</table>  

打印后,您的表格将如下所示:

提示:添加或删除内容

Sometimes you might want to add content that’s only shown when printing. For example - you might want to link URLs to be printed. You can do this by using the :after pseudo-element:
有时,您可能希望添加仅在打印时显示的内容。例如,您可能希望链接要打印的URL。您可以使用::after 伪元素来完成此操作:

@media print {  
 a[href]:after {  
   content: " (" _attr_(href) ")";  
 }  
}

您可能还希望仅在打印时隐藏或显示某些元素。通过 @mediadisplay 结合起来,这可以很容易地完成。

/* 隐藏屏幕水印。 */  
.watermark {  
 display: none;  
}  
  
@media print {  
 /* 打印时隐藏导航。 */  
 nav {  
   display: hide;  
 }  
 /* 打印时显示水印 */  
 .watermark {  
   display: initial;  
 }  
}  

提示:使用模拟css媒体进行开发

为了加快开发过程中的反馈循环,可以将浏览器设置为显示打印样式。要在Mac上的Chrome中实现这一点,请打开开发者工具,然后使用Command + shift + p快捷键运行命令,然后搜索“Emulate CSS print media type”。

其他浏览器的开发工具中也会有类似的功能。
遗憾的是,要查看分页符,您每次都需要手动打印到PDF。

高级提示:孤行和寡行

orphanswidows 属性控制元素中的文本跨页面拆分的方式。有时,调整这些值可以提高打印文档的可读性。

p {  
 /* 如果在换行符之前不少于3行,则将该元素移动到新页的开头。 */  
 orphans: 3;  
}  

在下面的左侧,orphans被设置为2,因此第二段开始于分页符之前。通过将orphans设置为3,就像右边那样,该段落被强制下移到下一页的开始。
widow 属性与 orphan 属性相反——它指定了新页面开始处可以包含的最少行数。

高级提示: @page规则

使用 @page 规则,您可以定制特定页面的页边距。

@page:first {  
 /* 首页没有页边距。 */  
 margin: 0;  
}  
  
@page {  
 /* 在所有其他页面上设置页边距。 */  
 margin: 2cm;  
}  

不幸的是,浏览器对此的支持目前有点有限,您只能使用::first, :last, :left, :right:blank 伪选择器来选择页面。

总结

您现在熟悉了Chrome、Firefox和Safari等现代浏览器支持的重要打印布局属性。
遗憾的是,在现代浏览器中对更高级的打印布局功能的支持通常是有限的。例如,浏览器不提供使用CSS添加自定义页眉或页脚内容的标准方法。您可能希望查看 paged.js项目,该项目为浏览器当前缺少的许多打印布局功能提供了多个填充。‍

本文标签: 教你 样式 网页 css