CSS print 樣式

CSS print 樣式

標(biāo)簽(空格分隔): CSS


顯示器(screen)和打印機(jī)(printer)是兩種差別很大的設(shè)備,所以從瀏覽器里看到的頁面,打印出來也許和你看到的樣子有很大的差距。screen一般使用邏輯單位比如px,而打印機(jī)則應(yīng)該使用物理單位比如cm或in拿诸。我們常見的A4紙張大小在不同DPI的顯示器上顯示的大小是不同的甘改。因此如果要精確的控制打印效果就應(yīng)該使用print css,這是跨平臺(tái)兼容的標(biāo)準(zhǔn)谣光。不推薦使用瀏覽器插件方式實(shí)現(xiàn)打印。

web打印還有一種解決方式是生成pdf格式文件,客戶端下載來打印,這也是不錯(cuò)的一種打印方式,因?yàn)閜df本身就是一種打印標(biāo)準(zhǔn),可以做到精確控制芬为√呀穑可以使用jsPDF在客戶端動(dòng)態(tài)生成pdf,也可以在服務(wù)器端使用一些組件生成pdf后傳送給客戶端。當(dāng)然首選還是使用print css來實(shí)現(xiàn)打印媚朦。

引入print css

  • 使用link標(biāo)簽就像通常在html頁面中引入樣式表一樣,不過附加一個(gè)額外的media屬性,如下面這樣:
html 代碼:
<link rel="stylesheet" href="print.css" media="print" />

表明print.css樣式表是用于打印的

  • 使用@media規(guī)則可以在通用的樣式表中,使用@media規(guī)則指定樣式用于打印,比如這樣:
css 代碼:
@media print selector {...}

或者

css 代碼:
@media print {  selector{  ...  }}
  • 使用@import規(guī)則使用@import規(guī)則在通用的樣式表中導(dǎo)入打印樣式表,有兩種形式,其本質(zhì)是一樣的氧敢。

css文件中:

css 代碼:@import url(print-style.css) print;

html文件中:

html 代碼:
<style type="text/css">@import url(print-style.css) print;</style>

使用link標(biāo)簽要比使用@import規(guī)則性能更好。

度量單位

顯示時(shí)一般使用px,em或pt等邏輯單位,但在打印時(shí)要使用物理單位,比如cm或in(英寸)询张。對(duì)于常見的DPI(Dot Per Inch)為96的screen,px與cm的換算關(guān)系如下:

1 inch = 2.54 cm

1cm = 96/2.54 ≈ 37.80 px

1px = 2.54/96 ≈ 0.0265 cm

100px = 2.65 cm

A4紙的標(biāo)準(zhǔn)尺寸為:

21.0cm * 29.7 cm

在96DPI分辨率下,其對(duì)應(yīng)的像素尺寸大約為:

794px * 1123px

因?yàn)椴煌腄PI下,其對(duì)應(yīng)的像素尺寸是不同的,所以才要使用print css,使用物理單位來描述要打印的頁面,這樣打印效果就會(huì)一致了福稳。

@page規(guī)則(at-rule)

@page 規(guī)則用于指定打印頁面的一些屬性,包括紙張尺寸,方向,頁邊距,分頁等特性。其語法如下:

css 代碼:@
page :pseudo-class {  size: A4 landscape;  margin:2cm;}

其中偽類可以指定:

  • page-break-before用于設(shè)置元素前面的分頁行為,可取值:
  • auto默認(rèn)值瑞侮。如果必要?jiǎng)t在元素前插入分頁符的圆。
  • always在元素前插入分頁符。
  • avoid避免在元素前插入分頁符半火。
  • left在元素之前足夠的分頁符越妈,一直到一張空白的左頁為止。
  • right在元素之前足夠的分頁符钮糖,一直到一張空白的右頁為止梅掠。
  • inherit規(guī)定應(yīng)該從父元素繼承 page-break-before 屬性的設(shè)置。
  • page-break-after設(shè)置元素后的分頁行為店归。取值與page-break-before一樣阎抒。
  • page-break-inside設(shè)置元素內(nèi)部的分頁行為。取值如下:
  • auto默認(rèn)消痛。如果必要?jiǎng)t在元素內(nèi)部插入分頁符且叁。
  • avoid避免在元素內(nèi)部插入分頁符。
  • inherit規(guī)定應(yīng)該從父元素繼承 page-break-inside 屬性的設(shè)置秩伞。

比如:

css 代碼:
@media print {  section {page-break-before: always;}  h1 {page-break-after: always;}  p {page-break-inside: avoid;}}
  • orphans設(shè)置當(dāng)元素內(nèi)部發(fā)生分頁時(shí)必須在頁面底部保留的最少行數(shù)逞带。
  • widows設(shè)置當(dāng)元素內(nèi)部發(fā)生分頁時(shí)必須在頁面頂部保留的最少行數(shù)欺矫。比如:
css 代碼:
@media print {  p {orphans:3; widows:2;}}

其他

  1. 對(duì)于頁面上有顯示而不想打印的內(nèi)容,可以將其display設(shè)置為none來避免打印。
  2. 需要打印的內(nèi)容盡量避免float,有些瀏覽器不會(huì)正確的打印浮動(dòng)的內(nèi)容展氓。
  3. 可以調(diào)用window.print()函數(shù)來打印當(dāng)前頁面穆趴。
  4. 分頁打印或換頁打印:page- break-before和page-break-after CSS屬性并不會(huì)修改網(wǎng)頁在屏幕上的顯示遇汞,這兩個(gè)屬性是用來控制文件的打印方式未妹。每個(gè)打印屬性都可以設(shè)定4種設(shè)定值:auto、always空入、left和 right络它。其中Auto是默認(rèn)值,只有在有需要時(shí)执庐,才需設(shè)定分頁符號(hào) (Page breaks)。page-break-before若設(shè)定成always导梆,則是在遇到特定的組件時(shí)轨淌,打印機(jī)會(huì)重新開始一個(gè)新的打印頁。page- break-before若設(shè)定成left看尼,則會(huì)插入分頁符號(hào)递鹉,直到指定的組件出現(xiàn)在一個(gè)左邊的空白頁上。page-break-before若設(shè)定成 right藏斩,則會(huì)插入分頁符號(hào)躏结,直到指定的組件出現(xiàn)在一個(gè)右邊的空白頁上。page-break-after屬性會(huì)將分頁符號(hào)加在指定組件后狰域,而非之前媳拴。在下列程序中您將可以看到這些屬性的設(shè)定。

References:

[1]CSS for print tutorial

[2]@page

[3]CSS 打印屬性(Print)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末兆览,一起剝皮案震驚了整個(gè)濱河市屈溉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抬探,老刑警劉巖子巾,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異小压,居然都是意外死亡线梗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門怠益,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仪搔,“玉大人,你說我怎么就攤上這事蜻牢∑г欤” “怎么了憋他?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長髓削。 經(jīng)常有香客問我竹挡,道長,這世上最難降的妖魔是什么立膛? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任揪罕,我火速辦了婚禮,結(jié)果婚禮上宝泵,老公的妹妹穿的比我還像新娘好啰。我一直安慰自己,他們只是感情好儿奶,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布框往。 她就那樣靜靜地躺著,像睡著了一般闯捎。 火紅的嫁衣襯著肌膚如雪椰弊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天瓤鼻,我揣著相機(jī)與錄音秉版,去河邊找鬼。 笑死茬祷,一個(gè)胖子當(dāng)著我的面吹牛清焕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祭犯,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼秸妥,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了沃粗?” 一聲冷哼從身側(cè)響起筛峭,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陪每,沒想到半個(gè)月后影晓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檩禾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年挂签,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盼产。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡饵婆,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出戏售,到底是詐尸還是另有隱情侨核,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布搓译,位于F島的核電站悲柱,受9級(jí)特大地震影響些己,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜段标,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望逼庞。 院中可真熱鬧蛇更,春花似錦赛糟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穆咐。三九已至,卻和暖如春字旭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遗淳。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工拍柒, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人屈暗。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓拆讯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親养叛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子种呐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容