Re: EPUB 日本語組版拡張仕様の試案を公開しました

村上です。

ATSUSHI TAKAYAMA <taka.atsushi@googlemail.com> wrote on 2010/06/05 8:23:21
> 高山です。
> 
> www-style のほうもちょっと追ってみましたが、多すぎてとてもじゃないですが全部は無理でした。勘違いやどこかで書かれたことがあるかもしれませんが、ご容赦ください。
> 
> 1. before/after/start/end などのプロパティを導入して、それが top/bottom/right/left
> の替わりに使われたとすると、現行の UA では解釈できないので、結局 top と before
> を並記することになることが予想されますが、どうお考えでしょうか。
> すなわち、(a) top/bottom/right/left のみサポート、(b) before/after/start/end
> はサポートする (エイリアスになる) が writing-mode: rl-tb はサポートしない、(c) 全部サポート、の3パターンの
> UA が存在することになると思います。現在の仕様では a と b/c の両方をサポートしようとすると、結局
> before/after/start/end は必要ということです。
> 例えば IE9 があと5年ほど使われると考えたとき、5年は並記が必要ということになります。並記しなくても progressive
> enhancement できるような仕組みが必要ではありませんか?


Web で before/after/start/end が普通に使えるようになるまでは、
長い時間がかかるであろうことは認識してます。
しかし、Web標準(HTMLやCSS)は、この先、それよりずっと長い期間
に渡って使われるものです。
(ホーコン・リー氏が講演で語っていた予想では500年、グーテンベルクの
発明から500年間印刷技術が使われてきたのに匹敵ということ)

その長い期間の中でのごく初期の段階である今のうちに、縦書きをCSSで
使いやすいものにするためのしくみを作っておくことはとても重要だと
思います。(それをしないと縦書きの絶滅は加速するでしょう)

Webでは長い時間がかかるにしても、EPUBの標準(今の予定では今年中に仕様を
固めて来春に完成させるEPUB2.1仕様)に入れることで、EPUB2.1対応電子書籍
ビューワーでは必ず before/after/start/end が使えるということになります。
そうすれば、EPUB2.1対応コンテンツでは、before/after/start/endでの
スタイル指定だけでよくなります。

現在の EPUB2.0 対応のEPUBビューワーで、縦書きが実装されているものは、
margin-left が縦書きでは上マージンとして扱われ、日本語EPUBコンテンツ
(たとえば青空文庫のXHTMLをもとにしたもの)では、ブロックのインデントに
margin-left が指定されています。
これらを EPUB2.1 対応に直すのには、margin-left を margin-start に置換
すればよいということになります。

EPUBで先行して使えるようになるとしても、Webでは長い移行期間の間、
top/bottom/right/left のみをサポートする UA を考慮する必要が
あります。

縦書きも before/after/start/end もフルにサポートする UA で
最適なレイアウトになるように、それ以外の UA でも、読むのに
支障がないレイアウトで表示されるようなスタイルシートとするには、
次のようにするとよいと考えています。

・margin/border/padding は before/after/start/end を使う。
・ショートハンドプロパティ margin, border, padding との混在を避けること

例えば、h2 見出しを前後に 2em ずつアキ、行頭側にborderとpaddingを
指定したいとします。また段落 p や blockquote の前後のアキはゼロ
(日本語ではそれが普通なので)にしたいとします:

  h2 {
    margin-before: 2em;
    margin-after: 2em;
    border-start: double thick;
    padding-start: 3pt;
  }

  p {
    text-indent: 1em;
    margin-before: 0;
    margin-after: 0;
  }

  blockquote {
    margin-before: 0;
    margin-after: 0;
    margin-start: 2em;
  }

この指定で、before/after/start/end がサポートされている UA で
(縦書きサポートの有無に関わらず)意図どおりのレイアウトになります。
before/after/start/end 非サポートの UA では、その指定は無視されます。
この結果、HTML のデフォルトのスタイルでレイアウトされます。
つまり、h2 見出しや p 段落や blockquote の前後にはデフォルトのアキがつき、
border や padding は無視されます。
それでも、コンテンツを読むのに大きな支障はないと思います。
これは、progressive enhancement と言えると思います。

なお、もしも blockquote のスタイルで次のように margin ショートハンド
プロパティを使ったとすると:

    blockquote { margin: 0; margin-start: 2em }

before/after/start/end をサポートする UA ならよいですが、それ以外では
margin: 0 だけ有効で、すべてのマージンが消えてしまうことになるので
いけません。
・ショートハンドプロパティ margin, border, padding との混在を避けること
としたのはこのためです。

> 
> 2. :ttb のような疑似クラスの導入に消極的な理由は何ですか?
> 例えば、縦書きをサポートしない UA ではコンテンツの横幅を800pxにして、縦書きをサポートする UA
> では高さを600pxにしたいとき、JavaScript を使わずに記述することはできますか? :ttb
> などがあると、縦書きのときの相違点だけを記述することができます。
> また、もし before/after/start/end が導入されたとして、writing-mode
> スイッチのみで切り替える場合は、例えば *-start に必ず2つの意味 (ttb をサポートする UA 用の left とサポートしない
> UA 用の top) を持たせないといけなくなりますよね。そうするとどうしても表現の幅が狭くなると思います。:ttb
> があればそういうのは上書きできます。これは元々の writing-mode の設計の問題も大きいと思いますが。
> 
> 以上、お答えください。

疑似クラスのメリットについては、私もこれまで書いています:

http://lists.w3.org/Archives/Public/public-html-ig-jp/2010Apr/0002.html
| :writing-mode() 擬似クラス
| ==========================
| 
| writing-mode相対のプロパティと値は、違うwriting-modeが混在する
| 文書のスタイルシートを単純にするのに役立つでしょう。しかし、
| writing-modeごとに別のスタイルを指定したいこともあるので、
| これだけではまだ不十分です。
| 
| writing-modeを表す擬似クラスが必要です。

http://lists.w3.org/Archives/Public/public-html-ig-jp/2010May/0001.html
| > 3.2. 擬似クラス
| > 
| > あると便利かな、というところなのですが、利用シーンはどんなもの内容のドキュメントがあるのでしょうか。
| > 自分自身が、テキストの出力方向が混在するような対応に迫られて事がないので、少々イメージがしにくいです。> 分かりやすい事例があれば、教えていただければ幸いです。
| > 
| 
| margin, border, padding については、margin-before/after/start/end など
| 論理的プロパティが使えるようになれば、縦書き・横書きの両方に対応する
| スタイルの指定が一応はできるようになりますが、もっと複雑なプロパティ
| (例えば box-shadow で影を付けるとき、縦書き・横書きで影の向きを変え
| たいとか)や背景画像と組み合わせる場合や、縦書き・横書きのそれぞれに
| より適切な指定をしたい場合などに、あると便利という提案でした。
| 
| これがなくても、classセレクタで縦書きの部分と横書きの部分が分けられれば、
| それぞれに適切なスタイルの指定ができます。しかし、電子書籍ビューワー
| などでは、本文テキストの書字方向をユーザーの好みで変更できるのが
| 望ましく、そのような場合にも、ひとつのスタイルシートで両方のモード
| に対応できるためには、書字方向を表す擬似クラスが必要と考えました。

しかし、writing-mode プロパティの値がセレクタに反映するような擬似クラス
が標準になる可能性はとても低いです。セレクタの処理はプロパティの値とは
独立していることというのが、CSS 仕様の重要なところだからです。
そのことは、Elika Etemad (fantasai) が指摘しています:
http://lists.w3.org/Archives/Public/www-style/2010Jun/0155.html

彼女は、CSS WG 内で、もっとも縦書きやBIDIなど世界のテキストレイアウト
に詳しくそれらを標準に入れることに積極的です。CSS3 Text Layout などの
編者です(今は私と共同)。CSSでの縦書きに関して次の文書を書いています:

Unicode Technical Note #22
Robust Vertical Text Layout
http://unicode.org/notes/tn22/
http://unicode.org/notes/tn22/RobustVerticalLayout.pdf

また、*-before/after/start/end を提唱してきた人の一人です:
http://lists.w3.org/Archives/Public/www-style/2006Jun/0084.html
↑
この提案は、*-before/after/start/end と *-top/bottom/before/after
をエイリアスではなくてそれぞれ独立したプロパティとして定義して
優先順位を与えようというものです。
この方式は、エイリアスではないので本物のプロパティが増える、
既存の margin/border/padding プロパティの定義も変える必要がある
(初期値が 0 ではなくて defer という値になる)などという
問題がありますが、相互に依存して writing-mode により依存関係が
変わるような機能は受け入れられないという抵抗をかわすために
提案されたものです。

この提案の仕様では、
    blockquote { margin: 0; margin-start: 2em }

と書いたとき、margin-start は 0 になります。なぜならデフォルトでは
論理プロパティよりも物理プロパティのほうが優先であり、
ショートハンドプロパティの margin はデフォルトでは物理プロパティ
だからです(そのデフォルトを変えるプロパティも提案されています)。
(しかし、この方式でなくてもショートハンドとの混在が問題なのは
さっき書いたとおり)

これの提案を書いた彼女も、今の CSS3 Text Layout に書いた方式
(論理プロパティよりも物理プロパティは同じ優先順位)
でいけるのならばそれが最善だと私とのメールのやりとりで言っています。

細かい仕様(優先順位を与える方式か書字方向依存別名プロパティ
として定義するか)は、別にして、*-before/after/start/end を
標準に入れることが、CSS での縦書きを使えるものにするためには
欠かせないと私は思います。

基本的な縦書き・横書きに共通のスタイルは *-before/after/start/endで、
それ以上のより最適な縦書き用・横書き用のスタイルにしたいなら
代替スタイルシートでというのが正しい方針だと思います。

-- 
村上 真雄 (MURAKAMI Shinyu)
http://twitter.com/MurakamiShinyu
Antenna House Formatter:
http://www.antenna.co.jp/AHF/
http://www.antennahouse.com

Received on Saturday, 5 June 2010 04:46:22 UTC