HTML 5に於けるルビテスト。

現行のユーザエージェントであれば、CSSの書き方を工夫するだけでルビ表現が可能になります。

一方、HTML 5にも<ruby>要素が導入される事となりましたが、その内容はXHTML 1.1以降でのそれと若干異なっているようです。

勿論、最終的な仕様はどうなるか分かりませんが、現在の仕様の範囲でHTML 5に於けるルビを実現してみましょう。

HTML 5に於けるルビ。

HTML 5を用いた文書に於いて、ルビをどのようにすべきかを考えて見たいと思います。

その前に…。

その前に、スタイルシートをどのようにするかを決めておきます。

現在、CSSでルビを実現するには、

の三つが考えられます。

HTML 5の仕様を考慮すると、ポジショニングを用いるかインラインブロックを用いると無駄なマークアップが不要となり簡単ですので、今回はポジショニングを採用したいと思います。

  • ただし、ポジショニングに依る方法はルビやルビ対象テキストが長くなり過ぎると読み難くなる事やオペラではバグのため表示位置がずれる場合がある事と言った欠点があります。
  • 尚、インラインブロックはファイヤーフォックス 2までではサポートがないため、今回は見送りたいと思います。

HTMLでのマークアップ。

HTML 5に於ける<ruby>要素は以下のようになります。

<ruby>要素

以下の組が一組以上

  1. ルビ対象となるフレーズ内容
  2. ルビテキストである<rt>要素

または

  1. ルビ対象となるフレーズ内容
  2. ルビ非対応環境向けの区切り符号である<rp>要素
  3. ルビテキストである<rt>要素
  4. ルビ非対応環境向けの区切り符号である<rp>要素

ここで、フレーズ内容と言う耳慣れない言葉が出てきましたが、これはHTML 4.01及びXHTMLに於けるインライン要素に近いものと思えば良いでしょう。いわゆるCDATAなどと違い、フレーズ内容と見なされる従来のインライン要素としてマークアップする事が許されていると考えられます。

現在のところ、HTML 5に於いては<ruby>要素にはルビ対象となる<rb>要素は定義されておりませんが、その代わりルビ対象テキストとしてフレーズ内容を入れる事が出来ます。

つまり、以下のようにします。

  • <ruby>堀北真希<rp>(</rp><rt>ほりきた まき</rt><rp>)</rp></ruby>は清瀬市出身のアイドル女優である。
  • 埼玉県比企郡<ruby>滑川町<rp>(</rp><rt>なめがわまち</rt><rp>)</rp></ruby>は「なめりかわ」とは読まない。

CSSでのスタイル定義。

一方、スタイルシートについては、以下のルビ専用スタイルシートcss_1_ruby.cssに於いて、定義しておき、それをメインのスタイルシートの冒頭から @import "css_1_ruby.css" screen, projection; でインポートしておきます。

  • 何故わざわざメインのスタイルシートからインポートするのかと言うと、インターネットエクスプローラでのルビ処理に於いて悪影響が予想されるからです。インターネットエクスプローラではメディア型を複数持つ@import規則を正常に取扱えないので、インポートされずに済むと言う訳です。
ruby {
    display: inline;
    position: relative;
    top: 0;
    bottom: 0;
    padding: 0;
    line-height: 1em;
    }

rp {
    display: none;
    }

rt {
    display: inline;
    position: absolute;
    top: -1em;
    left: 0;
    font-size: 50%;
    line-height: 1em;
    white-space: nowrap;
    text-indent: 0;
    }

a:link rt,
a:visited rt {
    text-decoration: none;
    }
  • CSS記述例はここまで

実際に表示させてみると。

  • 実際に表示させると、以下のようになります。

    • ウィンドウズ版インターネットエクスプローラ 5.5以降, ファイヤーフォックス, オペラ 8.0以降及びサファリ以外ではルビ表示されない場合があります。
    • 堀北真希(ほりきた まき)は清瀬市出身のアイドル女優である。
    • 埼玉県比企郡滑川町(なめがわまち)は「なめりかわ」とは読まない。

まとめ。

今回は、HTML 5に<rb>要素が存在しない事から、<rb>要素を必要としないポジショニングを用いた方法で実現しましたが、この方法は余り綺麗な表示にならない事と、オペラなどでずれる場合があると言う問題があります。

勿論、ルビ対象テキストがフレーズ内容、つまり<span>要素などでマークアップ可能となっているので、無理矢理<rb>要素の代用として利用すれば、インラインテーブルを用いた方法でルビを実現する事も可能なのですが、無理なマークアップはしたくないものです。

或いは、HTML 5の仕様にこのような現状から<rb>要素のサポートも求めるべきなのかも知れませんが…。