EPUBでのtext-align:justifyと-epub-text-align-lastを知る

あまり知名度の高くないプロパティtext-align-last

EPUB3ではCSS3の一部の機能が使えます。

最も有名なのは-epub-writing-modeだと思いますが、text-align: justifyも話題になりやすいですよね。
これは日本語で「均等割り付け」や「両端揃え」に相当するもので、紙の組版やWordドキュメントなどではずっと昔から普通に使われていたと思います。

ところが、text-align:justifyに強く関連するtext-justifytext-align-lastについてはあまり知られていません。このままでは可哀想なので紹介しておきます。

参照する仕様

EPUB3の仕様としては、EPUB Content Documents 3.0を参照します。これはEPUB3のうち、OPFなどのメタデータではなくXHTMLなどのドキュメント部分について記載されているものです。

EPUB3のメインとなるCSSはCSS2.1です。

ただし、一部のプロパティについてはCSS2.0やCSS3の各モジュールから引用されています。たとえばtext-align-lastについては、-epub-text-align-lastという名前で、syntaxはCSS3Text WD 20110412を、semanticsはCSS3Textを参照するように規定されています。

本記事の執筆時点ではCSS3TextはCSS3 Text WD 20121113を参照しています。

text-align

CSS2からあるおなじみの、基本的なプロパティです。
このプロパティは、テキストをどちらに揃えるかを指定します。

start
開始方向寄せにします。通常の横書きでは左寄せになります。
end
終了方向寄せにします。通常の横書きでは右寄せになります。
left
左寄せにします。通常の縦書きでは上寄せになります。
right
右寄せにします。縦書きでは下寄せになります。
center
中央寄せにします。
justify
両端揃えにします。
start end
ブロックの最初の行やforced line break(たとえばbr)の直後の行はstartとして扱います。
それ以外の行(text-align-lastが適用される行を除く)はendとして扱います。

CSS仕様にある図ですが、縦書きの場合はたとえば以下のような向きになります。writing mode, directionなどにより変わるので、詳しくはこちらの表を参照するとわかりやすいです。

この向きはwriting modeなどによって変わります

text-justify

このプロパティはtext-align:justifyのときに、どこを調整してjustifyを実現するかを指定します。

<

dl>

auto
UA依存です
none
justifyが無効になります
inter-word
単語間でのみ字間を調整します。
inter-ideograph
主にCJK向けで、単語間および「block scripts」間で字間を調整します。block scriptsとは、いわゆる「全角文字」に近いグループです。
inter-cluster
主に東南アジアの言語向けです。
distribute
一部の例外を除き、単語内を含め字間を調整します。日本語だけの組版では、この方法がよく使われると思います。
kashida
アラビア語などのcursiveな文字を横に伸ばす形で調整します。

なお、解説の都合上この記事に書いていますが、text-justifyはEPUB 3の仕様に含まれていません

text-align-last

このプロパティは最終行の行揃えを指定します。
最終行とはblock要素の最終行、またはforced line break(たとえばbr)の直前の行のことです。

auto, start, end, left, right, center, justifyが指定できます。

start, end, left, right, center, justify

text-alignプロパティと同じ意味です。つまり、最終行だけ右寄せといった指定が可能になります。

auto

autoは初期値です。以下のような挙動をします。

text-align:justifyのとき
text-justify: distributeなら最終行もjustifyに、そうでなければstart方向寄せにする。
text-align:justify以外のとき
text-alignの指定に従う。

ここで、EPUB 3の仕様ではtext-justifyプロパティが含まれないを思い出して下さい。
つまり、EPUB 3の仕様内においては、text-align-last:autoは、「text-align:justifyのときはstart方向寄せに、それ以外のときはtext-alignに従う」という意味になります。

このプロパティを指定するときは、1行しかないときの扱いに注意しましょう。
この場合の処理は、以下のように規定されています。

If a line is also the first line of the block or the first line after a forced line break, then, unless ‘text-align’ assigns an explicit first line alignment (via ‘start end’), ‘text-align-last’ takes precedence over ‘text-align’.

text-alignで明示的に最初の行のalignを指定(text-align:start end)している場合を除き、text-align-lasttext-alignより優先して適用されるとあります。

ところがEPUB 3が参照するtext-alignは、CSS2なので、start endが存在しません。
つまり、EPUB 3においては、1行のブロックではtext-alignよりも-epub-text-align-lastが優先して適用されるということになります。

よく以下のようなCSSを使って、「カバー画像はcenter指定しているのに左に寄っている!」という問い合わせを頂きますが、これは上記の仕様によるものです。

* {
  -epub-text-align-last: left;
}
.cover {
  text-align: center;
}

ほとんどのブラウザは-epub-text-align-lastを認識しないため、制作過程で気づかないのだと思います。
この場合、.cover-epub-text-align-last:autoを指定するのが正解です。

まとめ

あまり知られず、使われ方はたいてい間違っている-epub-text-align-lastを紹介してみました。

現状のEPUB 3の仕様範囲内では、text-align-lastをauto以外にする必要がある場面は、あまりないと思います。
CSS3 WDの更新や次期EPUBでは、重要性を増してくるかもしれません。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。得意分野はWeb全般、Ruby on Rails、Androidアプリケーションなど。最近はBlinkと格闘中。軽度の資格マニアで、情報処理技術者試験(高度10区分)などを保有。

babaの書いた記事

週刊Railsウォッチ

インフラ

Rubyスタイルガイドを読む

BigBinary記事より

ActiveSupport探訪シリーズ