印刷時の改ページ備忘録
とりあえず、以下のような前提だったとします。
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を駆使したレイアウトの方が良いのかも。
その場合、フッターをどうするかを日頃からちゃんと考えておく必要がありそう。
印刷用レイアウトを別物にした方が楽な気がしてきた。
参考文献
- Swapskills Print Css
- CSSによる印刷全般のまとめ