教你10分钟内学习如何CSS 设置网页打印时的样式

本文将教您开始为要打印的页面编写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>  

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

Table with repeated headings

提示:添加或删除内容

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”。

Emulate CSS media

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

高级提示:孤行和寡行

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

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

Orphans example

在下面的左侧,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项目,该项目为浏览器当前缺少的许多打印布局功能提供了多个填充。‍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

竞赛项目 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

【Java】一只小菜坤的编程题之旅【3】

文章目录 1丶判定是否互为字符重排2、杨辉三角3丶某公司的1个面试题&#xff08;字符串包含问题&#xff09; 1丶判定是否互为字符重排 这个题我们用一个非常简单的思想就能实现&#xff0c;我们先将字符串转换为字符数组&#xff0c;然后对字符数组进行排序&#xff0c;然后再…

【Apollo】自动驾驶的平台背景,平台介绍

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

spring boot 集成 jetcache【基础篇:@Cached、@CreateCache、@CacheRefresh】

手打不易&#xff0c;如果转摘&#xff0c;请注明出处&#xff01; 注明原文&#xff1a;https://zhangxiaofan.blog.csdn.net/article/details/129832925 目录 前言 版本 配置通用说明 项目结构 代码 启动类 实体类 基础使用——增删改查&#xff08;Cached、CacheInv…

opencv实战项目 手势识别-手势控制键盘

手势识别是一种人机交互技术&#xff0c;通过识别人的手势动作&#xff0c;从而实现对计算机、智能手机、智能电视等设备的操作和控制。 1. opencv实现手部追踪&#xff08;定位手部关键点&#xff09; 2.opencv实战项目 实现手势跟踪并返回位置信息&#xff08;封装调用&am…

(原创)Flutter与Native页面互相跳转

前言 实际开发混合项目时&#xff0c;常常会有页面跳转的需求 如果是原生界面和flutter界面需要互相跳转 这种情况应该怎么处理呢&#xff1f; 今天这篇博客主要就来介绍下这个情况 其实想一下&#xff0c;这个问题可以拆成四个小的问题来分析&#xff1a; 1&#xff1a;原生界…

什么是全局代理,手机怎么设置全局代理

目录 什么是全局代理 全局代理的优缺点 优点 缺点 手机怎么设置全局代理 注意事项 总结 在计算机网络和信息安全中&#xff0c;全局代理是一种常用的技术手段&#xff0c;用于将网络流量通过代理服务器进行转发和处理。本文将介绍什么是全局代理&#xff0c;探讨全局代理…

pyspark笔记 pyspark.sql.functions

col qqpyspark 笔记 pyspark.sql.function col VS select_UQI-LIUWJ的博客-CSDN博客 取某一列 lit 创建一个包含指定值的列 date_trunc 将日期截取成由第一个参数指定的字符串值 year, yyyy, yy——截取到年month,mon,mm——截取到月day,dd ——截取到天microsecondmillis…

Highcharts引入

Highcharts是和jQuery一起使用的&#xff0c;所以需要下载好jQuery jQuery下载方式&#xff1a;访问&#xff1a;http://cdn.staticfile.org/jquery/2.1.4/jquery.min.js&#xff0c;然后全选复制到自己新建的txt文档中&#xff0c;最后把扩展名改为js。 Highcharts下载方式&…

pytest运行时参数说明,pytest详解,pytest.ini详解

一、Pytest简介 1.pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有一下几个特点&#xff1a; 简单灵活&#xff0c;容易上手&#xff0c;支持参数化 2.能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium、appium等自动化测试&#xf…

使用sqlplus连接oracle,提示ORA-01034和ORA-27101

具体内容如下 PL/SQL Developer 处 登录时 终端处 登录时 ERROR: ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist Process ID: 0 Session ID: 0 Serial number: 0 解决方法是执行以下命令 sqlplus /nolog conn / as sysdba startup …

【Hilog】鸿蒙系统日志源码分析

【Hilog】鸿蒙系统日志源码分析 Hilog采用C/S结构&#xff0c;Hilogd作为服务端提供日志功能。Client端通过API调用&#xff08;最终通过socket通讯&#xff09;与HiLogd打交道。简易Block图如下。 这里主要分析一下。Hilog的读、写、压缩落盘&#xff0c;以及higlog与android…

学术论文GPT源码解读:从chatpaper、chatwithpaper到gpt_academic

前言 之前7月中旬&#xff0c;我曾在微博上说准备做“20个LLM大型项目的源码解读” 针对这个事&#xff0c;目前的最新情况是 已经做了的&#xff1a;LLaMA、Alpaca、ChatGLM-6B、deepspeedchat、transformer、langchain、langchain-chatglm知识库准备做的&#xff1a;chatpa…

chapter 1 formation of crystal, basic concepts

chapter 1 晶体的形成 1.1 Quantum Mechanics and atomic structure 1.1.1 Old Quantum Theory problems of planetary model: atom would be unstableradiate EM wave of continuous frequency to solve the prablom of planetary model: Bohr: Quantum atomic structureP…

yolov5、YOLOv7、YOLOv8改进:注意力机制CA

论文题目&#xff1a;《Coordinate Attention for Efficient Mobile NetWork Design》论文地址&#xff1a; https://arxiv.org/pdf/2103.02907.pdf 本文中&#xff0c;作者通过将位置信息嵌入到通道注意力中提出了一种新颖的移动网络注意力机制&#xff0c;将其称为“Coordin…

拓扑布局和建立小型网络

练习 2.6.1&#xff1a;拓扑布局和建立小型网络 地址表 本实验不包括地址表。 拓扑图 学习目标 正确识别网络中使用的电缆物理连接点对点交换网络验证每个网络的基本连通性 简介&#xff1a; 许多网络问题都可以在网络的物理层解决。因此&#xff0c;必须清楚了解网络连接…

Python数据分析实战-列表字符串、字符串列表、字符串的转化(附源码和实现效果)

实现功能 str([None,master,hh]) ---> [None,"master","hh"] ---> "None,master,hh" 实现代码 import re import astx1 str([None,master,hh]) print(x1)x2 ast.literal_eval(x1) print(x2)x3 ",".join(str(item) for item…

阿里云服务器是什么?阿里云服务器有什么优缺点?

阿里云服务器是什么&#xff1f;云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务&#xff0c;云服务器可以降低IT成本提升运维效率&#xff0c;免去企业或个人前期采购IT硬件的成本&#xff0c;阿里云服务器让用户像使用水、电、天然气等公共资源一样便捷、高效地使用服务器…

Controller是线程安全吗?如何实现线程安全

测试是否是线程安全 RequestMapping("/test") RestController public class TestController {//1、定义num&#xff0c;判断不同线程访问的时候&#xff0c;num的返回结果是否一致private Integer num0;/*** 2、定义两个方法*/GetMapping("/count1")publi…

【UE4 RTS】08-Setting up Game Clock

前言 本篇实现的效果是在游戏运行后能够记录当前的游戏时间&#xff08;年月日时分秒&#xff09;&#xff0c;并且可以通过修改变量从而改变游戏时间进行的快慢。 效果 步骤 1. 在Blueprints文件夹中新建如下两个文件夹&#xff0c;分别命名为“GameSettings”、“Player”…