印刷時の改ページ備忘録

とりあえず、以下のような前提だったとします。

  • 見た目と印刷時のレイアウトを同じにする(WYSIWYG
    • レイアウト用のCSSと印刷用のCSSを分ける。
  • 拡大・縮小はブラウザの機能で
  • Fx3とie8で確認

Fxで、overflow: hiddenの前で改ページが発生

position:absoluteを使ったレイアウトに変更したら、overflow:hiddenが効いているのか、ブロックの中身が長くて改ページが必要な部分で改ページされずに切れていたため断念。

overflowを潰して回るのが手間だったので、全部デフォルトで上書きしたら解決した。

@media print {
  * {
    overflow: visible !important;
  }
}

IEで、iframeの直前で改ページが発生

原因不明。iframeの弟ブロック内で改ページが発生する場合、iframeごと改ページされるみたい。

何故かこれで直ったけど理由がさっぱり。ブロックとfloat配置が何か関係している?

@media print {
  iframe {
    display: block;
  }
}

IEで改ページが発生するブロックに対してpage-break-before:avoidを付けると、その兄コンテナ内の最後の要素の直前で改ページが発生

これも理由不明。多分上と同じルール?

例えばコンテナA, Bが上下に並んでいて、Aの中にはA1, A2というブロックがあったとする。
Bの中身が長いとB全体が改ページされるんですが、その際に、.B {page-break-before:avoid}を付けてBの改ページを防ごうとすると、A2の直前から改ページされる。

A, Bの親コンテナをposition: absolute付けると直るみたいですが、floatを使った複数ペインのレイアウトの場合、フッターが明後日の方に飛んでいったりして大変。

まとめ

印刷まで考えると、position: absoluteを使わざるを得ないようなので、position: relativeとposition: absoluteを駆使したレイアウトの方が良いのかも。
その場合、フッターをどうするかを日頃からちゃんと考えておく必要がありそう。

印刷用レイアウトを別物にした方が楽な気がしてきた。

参考文献

  1. Swapskills Print Css
    • CSSによる印刷全般のまとめ