続・EPUBでのtext-align:justifyと-epub-text-align-lastを知る|TechRacho(テックラッチョ)〜エンジニアの「?」を「!」に〜|BPS株式会社エンジニアの「?」を「!」に。Draftの更新などがありましたので、続きです。Draftのステータスです。Groupとしては概ね仕様案が固まり、外部からのフィードバックを受け付けるステータスと思って良いでしょう。以前参照した20121113版では、text-align-lastについて、以下のようになっていました。endの場合を除き、text-alignよりtext-align-lastが優先される以上のルールにより、以下のようなHTML([CODE-1])では、pのサイズをよほど小さくしない限り、左寄せになる仕様でした。整合性より、直感的でない、実用上使いづらいという点が問題だったのでしょう。そもそもtext-align-lastは、「両端揃えしたいが、最終行の余った部分まで均等割り付けするのはおかしい。最終行は先頭揃えにすべきだ」という常識的なルールを設定するために用意されたはずです。初期値はautoで、この挙動としては「justify時も最終行はstart寄せ」になっています。この視点で見ると、1行の時にtext-align-lastがtext-alignより優先する理由もわかります。短い行を不自然な均等割り付けさせないためのプロパティなのだから、短い1行にも適用されなくてはいけないわけです。[CODE-1]のような記述でセンタリングしないのは、あまり直感的ではありません。プロパティ名から受けるイメージとしては、「1行しかないのだし関係ないだろう」「pタグの中に画像が1つあるだけなのだから、関係ないだろう」と感じるのが普通だと思います。だいたい、text-align-lastをjustify以外で使うケースがあるのか?いったい誰がうれしいのか?混乱を招くだけではないのか?当然そのような意見もあり、この仕様は何回か更新されています。Draftは随時アップデートがされていますが、text-align-lastに関しては、20131010版にて、以下の変更が加えられました。justify’.具体的には以下の下線部分が追加されています。‘text-align’.これにより、text-align-lastプロパティは、text-align:justifyの時のみ作用するように変更されました。よって、[CODE-1]の場合、センタリングすることになります。部分が残っていて「?」となりますが、おそらく消し忘れでしょう。これによって、かなり直感的な挙動になりました。デフォルトでは、text-alignは1行でも複数行でもそのまま効く。justifyのみ、短い行はstart寄せになる。text-align-lastを指定すると、justifyの場合の挙動のみ変更できる。設定しても、text-align:centerの場合などは作用しない。欠点としては、機能・自由度が減っている(justify以外の場合に最終行の位置を変更したいケースは、本当に絶対無いのか?)点が挙げられるでしょう。仕様を制作事情に寄せすぎで、プロパティレベルではもう少しプリミティブな方が望ましい気もします。Draftでは、以下の変更がされています。20131010の変更はキャンセルtext-alignはtext-align-allとtext-align-lastを一度に指定するshorthandプロパティとなるtext-align-allは従来のtext-alignに概ね相当するtext-alignにjustify-all以外を指定すると、text-align-lastはautoにリセットされる非常におもしろい変更です。これにより、20131010版と同様の直感的な使い勝手を実現しつつ、明示的に指定することでjustify以外の場合の最終行位置を変更することも可能になります。仕様のシンプルさと利用頻度を考えれば、justify-allが必要かどうかはやや疑問です。「text-align-default」のようなshorthandプロパティを新設するのではなく既存のtext-alignを置き換えている理由は、単純に互換性のためです。text-alignプロパティはCSSが登場したころからあるプロパティです。既存コンテンツの互換性はもちろんですが、急に「これからはtext-alignではなくtext-align-defaultを使ってね」と言ったら、世界中にいる大量のHTML/CSSコーダーが発狂してしまいます。懸念点としては、プロパティが増えている点が挙げられるでしょう。text-alignがshorthandに変更されているため、JavaScriptから値を取得するようなケースでどのような副作用が生じるか、慎重な検討が必要と思われます。EPUBの場合ここで、例によってEPUBの場合の特例が生じます。EPUB3では、「基本的にCSS2.1を参照する」「text-align-lastなど一部のプロパティのみCSS3の各モジュールを参照する」ことになっています(ちなみにsyntaxはEPUB3制定時点のものを、semanticsは最新のものを参照しています)。Draftを参照するため、text-align:justifyに依存することはないtext-alignはCSS2.1のものを参照するため、shorthandではなく、text-align-lastを初期化することもないということで、20131110より前の挙動に戻ることになります。これはEPUBがCSS3過渡期に制定された都合上、中途半端に参照していることで生じた矛盾と言えるでしょう。手っ取り早い解決方法としては、EPUBの仕様をアップデートしてCSS3Textのtext-alignとtext-align-allを参照させてしまうのが良さそうですが、影響範囲に注意が必要なうえあまりエレガントではありませんね。IDPF側の議論はあまりウォッチできていないのですが、何か良い案はあるのでしょうか。まとめこのように、justifyとtext-align-lastに関しては、まだCSSWGでも明確な答えが出ていない状況です。コンテンツ制作者側からのフィードバックも募集しているようですので、気づいた点があればwww-styleなどに送ってみると良いかもしれません。シェアツイートブックマークLINEこの記事を書いた人babaゆとりプログラマー。BPS設立初期に在学中から参加している最古参メンバーの一人。Rails、PHP、Androidアプリ、Windows/Macアプリ、超縦書の開発などを気まぐれにやる。Gold、AWSソリューションアーキテクト(アソシエイト)、日商簿記2級、漢検準1級などを保有。Storageを使ってはいけない(翻訳)#Tags#会社紹介#自社サービス#勉強会#Rails#PHP#デザイン#実績#週刊RailsウオッチCONTACTお気軽にご相談ください。(翻訳)CONTACTTechRachoでは、パートナーシップをご検討いただける方からのご連絡をお待ちしております。お気軽にご意見・ご相談ください。