CSSで印刷時の見た目を調整する
@media printや@page、break-inside、break-before、break-after、print-color-adjustなどを利用して印刷時の見た目を調整する方法を紹介する。
Webページを印刷しようとすると、ユーザーが設定した印刷設定に従ってページの大きさや余白が調整されたり、背景色や背景画像が表示されない、用途の途中で平然と改ページすることにより意図しない表示になったWebページを出力してしまうことがある。
そこで印刷用に用意されたCSSの機能を利用すると、Webページを印刷する際の見た目を調整することができる。
印刷用のスタイルを指定する @media print
@media print
を利用すると、印刷時にのみ適用されるスタイルを指定することができる。
@media print {
@page {
size: A4;
margin: 0px;
}
.no-print {
display: none;
}
section,
pre {
break-inside: avoid;
}
pre {
-webkit-print-color-adjust: exact;
}
}
印刷時の大きさや余白を指定する @page
@page
を利用すると、印刷時のページの大きさや余白を指定することができる。
@page {
size: A4 landscape;
margin: 0px;
}
このアットルールは非常に特殊であり、印刷の寸法や向きを指定できるsize
プロパティが利用できるが、sizeやmarginなど限られたプロパティ以外は無視される。
sizeプロパティ
A4
やletter
などキーワードまたはwidth height
の形式で寸法を、portrait
またはlandscape
で向きを指定することができる。
https://developer.mozilla.org/ja/docs/Web/CSS/@page/size
@page {
size: 4in 6in portrait; /* 4インチ x 6インチの縦向き */
size: A4 landscape; /* A4用紙の横向き */
}
width height
の形式の場合、任意のCSS単位を利用することが出来るが、基本的にmm
やcm
、in
など単位を利用することが推奨されている。
また、vwやvhなどビューポートに関する単位は扱いが決まっておらず利用しないように注意がされている。
要素の途中で改行させない break-inside
break-inside
プロパティを利用すると、要素の途中で改行させないようにすることができる。
以前はpage-break-inside
プロパティという名前であった。現在page-break-inside
はbreak-inside
のエイリアスになっている。
https://developer.mozilla.org/ja/docs/Web/CSS/break-inside
section {
break-inside: avoid;
}
段区切りや、改ページどちらかのみを避けたい場合は、avoid-column
やavoid-page
を利用することができる。
要素の前後で改ページさせる break-before, break-after
before-break
を利用すると、要素の前後で改ページさせたり、改ページを避けたりすることができる。
https://developer.mozilla.org/ja/docs/Web/CSS/break-before
/* h2要素の前で改ページする */
h2 {
break-before: page;
}
/* footer要素の後で改ページする */
footer {
break-after: page;
}
改ページを避ける場合は、avoid
やavoid-page
を利用することができる。
印刷時に背景色や背景画像を表示する print-color-adjust
特に何も指定しない場合、印刷時には背景色や背景画像、文字色などをブラウザが調整する。
print-color-adjust
プロパティを利用すると、背景色や背景画像を表示することができる。
ただし、ほとんどの環境で-webkit-
プレフィックスが必要である。
https://developer.mozilla.org/ja/docs/Web/CSS/print-color-adjust
pre {
-webkit-print-color-adjust: exact;
}