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

news2024/11/26 22:41:53

本文将教您开始为要打印的页面编写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.coloradmin.cn/o/872153.html

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

相关文章

【CTF-web】修改请求头(XFF)

题目链接&#xff1a;https://ctf.bugku.com/challenges/detail/id/79.html 随意输入后可以看到需要本地管理员登录&#xff0c;得知这是一道需要修改XFF头的题。 XFF即X-Forwarded-For&#xff0c;该请求标头是一个事实上的用于标识通过代理服务器连接到 web 服务器的客户端的…

腾讯轻量云服务器搭建Node.js开发环境

1.购买腾讯云轻量应用服务器&#xff0c;登录 轻量应用服务器控制台&#xff0c;在 服务器 页面单击 新建。安装运行环境&#xff0c;选择为应用模板 > Web 开发场景 > Node.js 应用模板。 Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境&#xff0c;基于 Chrome V…

分布式文件存储系统-FastDFS

前言&#xff1a;FastDFS 是一个分布式文件存储系统&#xff0c;主要用于存储和管理大规模的文件数据&#xff0c;如图片、视频、文档等&#xff0c;是淘宝前架构师为了存储图片用C语言开发出来的系统。 服务端有两个组件 Tracker Server 与 Storage Server &#xff0c;对应两…

​API网关类型与区别​

什么是API网关&#xff1f; 在现代软件架构中&#xff0c;API&#xff08;应用程序编程接口&#xff09;网关起着重要的作用。它是一个中间层&#xff0c;用于管理和控制应用程序之间的通信。API网关可以提供一些关键功能&#xff0c;如流量控制&#xff0c;安全认证&#xff…

java项目打包运行报异常:Demo-1.0-SNAPSHOT.jar中没有主清单属性

检查后发现pom文件中有错误&#xff0c;需要添加build内容才能恢复正常。 添加下面文件后再次启动恢复正常。 <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactI…

Docker安装nacos v2.1.1

目录 前言安装nacos安装步骤1&#xff1a;准备1. 安装docker2. 搜索可以使用的镜像。3. 选择合适的redis镜像。3. 也可从docker hub上搜索镜像。 安装步骤2&#xff1a;拉取镜像拉取镜像查看已拉取的镜像 安装步骤3&#xff1a;创建容器创建容器方式1&#xff1a;快速创建容器创…

C语言实现扫雷游戏(附完整代码)

大家好&#xff0c;欢迎来到Mr.kanglong的CSDN博客&#xff0c;这篇博客来讨论一下如何使用C语言实现扫雷游戏&#xff0c;其实扫雷游戏和我之前写的三子棋游戏大体实现框架一样&#xff0c;只是逻辑有所不同。 目录 扫雷游戏介绍 游戏效果 实现代码 game.c game.h test.c 扫…

React学习之路 - 上传代码到GitCode

Git 全局设置 git config --global user.name "AnyaPapa" git config --global user.email "fangtaihongqq.com" 添加SSH密钥 Mac终端输入命令 cd existing_folder git init git remote add origin gitgitcode.net:Java_1710/test.git git add . git com…

msvcr120.dll丢失怎样修复?总结三个dll修复方法

当我遇到msvcr120.dll丢失的问题时&#xff0c;我感到有些困惑和焦虑。因为这个问题会导致我无法运行依赖这个文件的应用程序。msvcr120.dll是运行时库文件的一部分&#xff0c;为应用程序提供了必要的运行时支持。它的丢失会导致应用程序无法正常运行&#xff0c;这让我意识到…

【单片机毕业设计3-基于stm32c8t6的智能家居系统】

【单片机毕业设计3-基于stm32c8t6的智能家居系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇3 基于stm32的智能家居控制系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖&#xff08;有需可点击最后链接&a…

[C++] 一篇带你了解C++中动态内存管理,new让大家都有对象

目录 1、C/C内存分布 2.、C语言中动态内存管理方式&#xff1a;malloc、calloc、realloc 3、C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 malloc与new的异常处理机制 4、operator new与operator delete函数 4.1 operator new与operat…

寻找适合你的在线客服系统?这里有8款推荐(2023年8月更新)

近年来&#xff0c;随着网站交互性的提升&#xff0c;越来越多的企业开始关注并采用在线客服系统&#xff0c;以便更好地与访客互动和沟通。尤其对于外贸网站等需要频繁沟通的行业来说&#xff0c;选择一个合适的在线客服系统显得尤为重要。在这篇文章中&#xff0c;我们将为您…

小白带你学习linux的Redis3.2集群(三十三)

目录 一、Redis主从复制 1、概念 2、作用 3、缺点 4、流程 5、搭建 6、验证 二、Reids哨兵模式 1、概念 2、作用 3、缺点 4、结构 5、搭建 6、验证 三、Redis集群 1、概述 2、原理 3、架构细节 4、选举过程 四、搭建 1、第一步现在外部使用finalshell 9.9…

【Java】ThreadLocal详细解析

ThreadLocal全面解析 前置知识 具有一定的javase和javaweb基础熟悉synchronized关键字熟悉HashMap熟悉 JDBC技术 学习目标 了解ThreadLocal的介绍掌握ThreadLocal的运用场景了解ThreadLocal的内部结构了解ThreadLocal的核心方法源码了解ThreadLocalMap的源码 1. ThreadLoc…

css 实现 html 元素内文字水平垂直居中的N种方法

上一篇博文写了div 中元素居中的N种常用方法&#xff0c;那么单个html元素&#xff1a;div&#xff08;块级元素代表&#xff09;&#xff0c;span&#xff08;行内元素代表&#xff09;中的文字如何水平垂直都居中呢&#xff1f;实现方法如下&#xff1a; 本文例子使用的 html…

机器学习实战5-KMeans聚类算法

文章目录 概述KMeansKMeans参数&接口n_clusters质心inertia模型评估指标轮廓系数Calinski-Harabaz Index 重要参数init & random_state & n_init&#xff1a;初始质心怎么放好?重要参数max_iter & tol&#xff1a;让迭代停下来重要属性与重要接口 概述 聚类 …

微信公众号开发基础

开发文档 https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html 一、接入微信公众平台开发 开发者需要按照如下步骤完成&#xff1a; 1.1 填写服务器配置 1.2 验证服务器地址的有效性 开发者提交信息后&#xff0c;微信服务器将发…

【编织时空一:探究顺序表与链表的数据之旅】

本章重点 线性表 顺序表 顺序表OJ题 1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结…

Linux命令 -- vim

Linux命令 -- vim 前言一般模式光标移动复制粘贴内容查找 底线命令行模式 前言 用vim指令进入文件。 刚进入时是命令行模式&#xff0c;也叫一般模式。 按i或者insert进入编辑模式&#xff0c;此时可以编辑文件内容。 按esc可从编辑模式退回到一般模式&#xff0c;输入冒号进…

[C++ 网络协议编程] TCP/IP协议

目录 1. TCP/IP协议栈 2. TCP原理 2.1 TCP套接字中的I/O缓冲 2.2 TCP工作原理 2.2.1 三次握手&#xff08;连接&#xff09; 2.2.2 与对方主机的数据交换 2.2.3 四次握手&#xff08;断开与套接字的连接&#xff09; TCP&#xff08;Transmission Control Protocol传输控…