摘要:原文鏈接簡介本文主要講解如何使用控制打印樣式。用戶代理可以調(diào)整文檔內(nèi)容的格式,使其顯示在可打印區(qū)域。不管是否雙面打印,打印總是包含左頁和右頁分別通過指定。偽類和需要雙面打印時(shí),通常需要將左頁和右頁設(shè)置不同的樣式如頁邊距頁碼位置。
原文鏈接:https://lon.im/post/css-print...
簡介本文主要講解如何使用 CSS 控制打印樣式。
基本概念使用 CSS 可以控制文檔如何正確的顯示在不同的媒介 (Media) 上。其中分頁媒介 (Paged Media) ,不同于連續(xù)媒介 (Continuous Media),它可以控制文檔內(nèi)容,將其分隔至一個(gè)或多個(gè)不相關(guān)聯(lián)的頁面 (如:書、幻燈片)。
頁面 (Page Sheet) 是物理介質(zhì) (如:紙張) 的表面,它包含可打印區(qū)域 (Printable Areas) 和不可打印區(qū)域 (Non-printable Areas)。用戶代理可以調(diào)整文檔內(nèi)容的格式,使其顯示在可打印區(qū)域。
頁面盒子 (Page Box) 是一個(gè)由長邊 (Long Edge) 和短邊 (Short Edge) 組成的矩形。長邊的方向決定了頁面朝向 (Page Orientation),長邊是垂直方向,則頁面朝向?yàn)榭v向 (Portrait Orientation),反之為橫向 (Landscape Orientation)。
CSS 打印無法指定文檔是否為雙面打印 (Duplex Printing),是否雙面打印應(yīng)該通過用戶代理指定。不管是否雙面打印,CSS 打印總是包含左頁和右頁 (分別通過 :left, :right 指定) 。(或者說 CSS 打印假定所有文檔是雙面打?。?/p> 頁面模型 (Page Model)
和 CSS 盒子模型一樣,頁面盒子模型由外邊距 (margin)、邊框 (border)、內(nèi)邊距 (padding) 和 內(nèi)容區(qū)域 (content area) 構(gòu)成。
其中內(nèi)容區(qū)域和外邊距有著特殊的功能:
內(nèi)容區(qū)域也叫頁面區(qū)域 (Page Area),第一頁的頁面區(qū)域邊界構(gòu)成了文檔的初始的包含塊 (Containing Block)
頁面外邊距區(qū)域是透明的,環(huán)繞在頁面區(qū)域周圍。在 CSS3 中,可以用于創(chuàng)建頁眉和頁腳,詳見下文 頁面外邊距盒子
頁面進(jìn)度 (Page Progression)方向 是文檔被分隔后的頁面的排列方向。比如:現(xiàn)代中文頁面進(jìn)度多是從左至右;而古代中文的頁面進(jìn)度則相反。可以通過設(shè)置根元素 (root element) 的 direction 和 writing-mode 屬性來改變頁面進(jìn)度。
頁面的“第一頁”是左頁還是右頁,可以由頁面進(jìn)度的方向決定,當(dāng)頁面進(jìn)度方向?yàn)閺淖笾劣視r(shí),第一頁是右頁;反之為左頁。(事實(shí)上也可以通過設(shè)置根元素的 break-before 屬性來強(qiáng)制改變第一頁是左頁還是右頁)
引入打印樣式的三種方式在 CSS 中使用 @media print
@media print { body { background-color: white; } img { visibility: hidden; } a::after { content: "(" attr(href) ")"; /* 所有鏈接后顯示鏈接地址 */ } }
在 CSS 中使用 @import
@import url("my-print-style.css") print;
在 HTML 中使用 標(biāo)簽
在 @media print 或 my-print-style.css 中,可以自由的修改大部分樣式。
使用 @page使用打印媒介查詢可以自定義很多樣式,當(dāng)希望改變頁面大小、邊距等,就需要用到 @page 了。頁面上下文 (Page Context) 中僅支持部分 CSS 屬性,支持的屬性有:margin、size、marks、bleed 以及頁面外邊距盒子等,不支持的屬性將會(huì)被忽略。
頁面外邊距盒子 (CSS3)
頁面的外邊距被分成了 16 個(gè)頁面外邊距盒子。每個(gè)外邊距盒子都有自己的外邊距、邊框、內(nèi)邊距和內(nèi)容區(qū)域。頁面外邊距盒子用于創(chuàng)建頁眉和頁腳,頁眉和頁腳是頁面的一部分,用于補(bǔ)充信息,如頁碼或標(biāo)題。
頁面外邊距盒子需要在 @page 下使用,使用起來和偽類類似,也包含 content 屬性。
@page { /* 頁面內(nèi)容區(qū)域底部添加一條 1px 的灰線 */ @bottom-left, @bottom-center, @bottom-right { border-top: 1px solid gray; } /* 頁腳中間顯示格式如 "第 3 頁" 的頁碼 */ @bottom-center { content: "第" counter(page) "頁"; } }
注:常見瀏覽器都不支持該屬性,推薦使用 Prince
屬性margin 系列屬性(margin-top、margin-right、margin-bottom、margin-left 和 margin)用于指定頁面外邊距大小。
在 CSS2.1 中,頁面上下文中只支持 margin 系列屬性。而且因?yàn)?CSS2.1 的頁面上下文中沒有字體的概念,margin 系列屬性的值的單位不支持 em 和 ex。
@page { size: A4 portrait; margin: 3.7cm 2.6cm 3.5cm; /* 國家標(biāo)準(zhǔn)公文頁邊距 GB/T 9704-2012 */ }
size 屬性支持 auto、landscape、portrait、
默認(rèn)值為 auto,表示頁面大小和方向由用戶代理決定
landscape 指定頁面為橫向,如果
portrait 指定頁面為縱向,如果
頁面上下文也支持使用偽類,其中支持的偽類有::left、:right、:first 和 :blank。
需要雙面打印時(shí),通常需要將左頁和右頁設(shè)置不同的樣式(如頁邊距、頁碼位置)。這時(shí)左頁和右頁可以分別用 :left 和 :right 表示。再次強(qiáng)調(diào),通過 :left 和 :right 設(shè)置左右頁面不同樣式,并不代表用戶代理會(huì)將頁面雙面打印
/* 通過分別設(shè)置左頁和右頁不同的左右頁面距,為裝訂邊留出更多的空間 */ @page :left { margin-left: 2.5cm; margin-right: 2.7cm; } @page :right { margin-left: 2.7cm; margin-right: 2.5cm; }
偽類 :first 用于匹配到文檔的第一頁。
@page :first { margin-top: 10cm; /* 首頁上頁邊距設(shè)置為 10cm */ }
偽類 :blank 用于匹配文檔的空白頁。
h1 { page-break-before: left; /* 一級(jí)標(biāo)題強(qiáng)制分配到右頁 */ } @page :blank { @top-center { content: "這是空白頁"; } }
注意,空白頁既可能是左頁,又可能是右頁,設(shè)置左頁或右頁的樣式也會(huì)顯示在空白頁上,如果不希望顯示在空白頁上,可以清除這些樣式。
h1 { break-before: left; } @page :left { @left-center { content: "這是左頁"; } } @page :right { @right-center { content: "這是右頁"; } } @page :blank { @left-center, @right-center { content: none; /* 如果是空白頁則不顯示 */ } }分頁
用于控制元素之前、之后或之中是否分頁,沒有生成盒子的塊元素不會(huì)生效。
page-break-before、page-break-after 屬性支持 auto、always、avoid、left、right、recto 和 verso。
h2 { page-break-before: always; }
auto 默認(rèn)值,表示既不強(qiáng)制分頁也不禁止分頁
always、avoid 表示在該元素之前(或之后)強(qiáng)制或禁止分頁
left、right 表示在該元素之前(或之后)強(qiáng)制分頁,使得下一頁出現(xiàn)在左頁或右頁
recto、verso 頁面進(jìn)度從左至右時(shí),分別與 right 和 left 一致;反之與 left 和 right 一致
page-break-inside 屬性僅支持 auto 和 avoid,表示在元素內(nèi)允許或禁止分頁。
thead, tfoot { display: table-row-group; } thead, tfoot, tr, th, td { page-break-inside: avoid; }
orphans 和 windows 用于指定在頁面的底部或頂部,元素中允許剩余的最少行數(shù),默認(rèn)為 2 行。
最佳實(shí)踐“白紙黑字”--避免不必要的背景顏色、加深文字顏色等
避免打印次要的內(nèi)容,比如導(dǎo)航欄、側(cè)邊欄等
鏈接后顯示鏈接地址
做好分頁,避免標(biāo)題、表格單元格等換行
示例:
@media print { @page { size: A4 portrait; margin: 3.7cm 2.6cm 3.5cm; } h1 { page-break-before: always; } h1, h2, h3, h4, h5, h6, thead, tfoot, tr, th, td, li { page-break-inside: avoid; } body { background-color: white; color: black; } nav, aside { display: none; } a::after { content: "(" attr(href) ")"; } thead, tfoot { display: table-row-group; } }
參考鏈接:
Paged media (CSS 2.1) W3C
CSS Paged Media Module Level 3 (W3C Working Draft 14 March 2013) W3C
CSS Paged Media Module Level 3 (Editor’s Draft, 22 June 2017) W3C
CSS Pages MDN
CSS Multi-column Layout Module Level 1 (Editor’s Draft, 22 June 2017) W3C
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/112236.html
摘要:在本文中,將探討如何從一個(gè)應(yīng)用程序中直接生成一個(gè)。然而,再次受到瀏覽器對(duì)和支持的限制。使用來實(shí)現(xiàn)規(guī)范嘗試使用實(shí)現(xiàn)規(guī)范實(shí)際上是創(chuàng)建了。就從應(yīng)用程序使用這些工具而言,需要在服務(wù)器上安裝它們。希望這是一個(gè)有用的工具總結(jié),可用幫你的應(yīng)用程序創(chuàng)建。 為了保證的可讀性,本文采用意譯而非直譯。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! 在一些場景下,用戶都要求一些需要的數(shù)...
摘要:今天遇到一個(gè)需求,看起來也比較簡單,就是實(shí)現(xiàn)一個(gè)打印功能。有兩種方法來實(shí)現(xiàn),一種是利用的媒體查詢,另一種則是使用。 今天遇到一個(gè)需求,看起來也比較簡單,就是實(shí)現(xiàn)一個(gè)打印功能。頁面中有一個(gè)表單,將表單里的數(shù)據(jù)對(duì)應(yīng)添加到表格中,然后點(diǎn)擊打印按鈕,實(shí)現(xiàn)預(yù)覽打印,這里我用的是iview框架,如下圖所示:showImg(https://segmentfault.com/img/bVbicZo?w...
摘要:使用打印的理由很多情況下程序中使用的打印都是用戶無感知的。所以一般打印任務(wù)發(fā)出,回調(diào)函數(shù)即會(huì)調(diào)用并返回參數(shù)。選項(xiàng)回調(diào)函數(shù)的用法基本和相同,但是由于是提供的方法,配置項(xiàng)非常少,而則擴(kuò)展了很多屬性。 1.使用electron打印的理由 很多情況下程序中使用的打印都是用戶無感知的。并且想要靈活的控制打印內(nèi)容,往往需要借助打印機(jī)給我們提供的api再進(jìn)行開發(fā),這種開發(fā)方式非常繁瑣,并且開發(fā)難度較...
摘要:背景顏色打印不出來問題解決方法樣式要加上樣式要加上然后記得瀏覽器打印設(shè)置里面要在打印背景圖形前面打勾。頁碼的問題在打印的時(shí)候,想要換行的地方。? (1)背景顏色打印不出來問題解決方法 background樣式要加上 !important; color樣式要加上 !important; -webkit-print-color-adjust: exact; 然后記得瀏覽器打印設(shè)置里面要在打印背...
摘要:此文章主要為大家介紹了個(gè)實(shí)用技巧的精選推薦,具有一定的參考價(jià)值,學(xué)習(xí)覺得挺不錯(cuò)的,分享給大家。設(shè)計(jì)的同時(shí)就可以把這個(gè)設(shè)成顯示來檢查它的效果。塊元素居中對(duì)齊如果想做個(gè)固定寬度的網(wǎng)頁并且想讓網(wǎng)頁水平居中的話,通常是這樣你會(huì)使用來圍上所有元素。 此文章主要為大家介紹了CSS14個(gè)實(shí)用技巧的精選推薦,具有一定的參考價(jià)值,學(xué)習(xí)覺得挺不錯(cuò)的,分享給大家。 創(chuàng)業(yè)項(xiàng)目 2018優(yōu)選 本頁技巧目錄: 1...
閱讀 1819·2023-04-26 00:30
閱讀 3217·2021-11-25 09:43
閱讀 2955·2021-11-22 14:56
閱讀 3273·2021-11-04 16:15
閱讀 1226·2021-09-07 09:58
閱讀 2087·2019-08-29 13:14
閱讀 3180·2019-08-29 12:55
閱讀 1063·2019-08-29 10:57