@pageでの長さ単位はem,ex以外にしよう
とあるWebサイトをPDF化するにあたり、偶数ページと奇数ページでマージンを変更する必要があったのですが(いわゆるノド余白)、OS標準の機能やAcrobatでもなかなかうまくいかず、以下の助言が。
@suzukima @page:left {margin: 〜;} @page:right {margin: 〜;} って効かないですかね
— ろす@ぱらむしる (@lost_and_found) 2014, 1月 14
そうかPaged Mediaって聞いたことがあったわ。Paged Mediaは印刷など、ページの概念が存在するメディアに関する仕様です。@page
は、印刷時のCSSを指定するものと考えるといいでしょう。そして@page:left
で左側ページ、@page:right
で右側ページのCSSを指定することができます。早速以下のCSSを適用してみました。
@page { margin: 1em; } @page: left { margin-right: 3em; } @page: right { margin-left: 3em; }
しかし効かない。ちょろっと調べてみると、:left - CSS | MDNではFirefox未実装、Chromeは?なのでまだ実装されてないのかな、とその場はさっくり諦めました。
しかし、その後帰路にて「もしかしたらベンダプレフィックスが必要だったのかも」と気になってきたので、まずは仕様から読んでみることにしました。
仕様はこちら。CSS2.1のお話です。
で、@pageについて書いてある13.2.1 Page marginsのところを見てみると、こんな文が。
The page context has no notion of fonts, so 'em' and 'ex' units are not allowed.
emとexは使えないとな!これか!ということで以下を試してみたところ、
@page { margin: 1cm; } @page: left { margin-right: 5cm; } @page: right { margin-left: 5cm; }
できた!
言われてみればたしかにpage contextにはフォントの概念はないよな…
これでやりたかったことが1つ解決しました。@lost_and_found さん、ありがとうございます!
ちなみにPaged Mediaの次の仕様はCSS Paged Media Module Level 3として標準化中、現在Workind Draftです。ヘッダやフッタを挿入したり、ページ数を入れたりとかできるらしいです。楽しみですね。