[3] [[HTML]]
の
[DFN[[CODE[rt]]]]
[[要素]]は、
[[ルビ文字列]]を表します。

* 仕様書

[REFS[
- [17] 
[CITE@en-US-x-hixie[HTML Standard]], [TIME[2022-02-22T17:07:09.000Z]], [TIME[2022-02-23T06:01:50.804Z]] <https://html.spec.whatwg.org/#the-rt-element>
]REFS]

*

[4]
:[[名前空間]]:[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] (>>7)
:[[局所名]]:[CODE(HTMLe)[[[rt]]]]
:[[開始タグ]]:必須
:[[終了タグ]]:省略可能 ([[HTML]])、必須 ([[XHTML]])
:出現できる文脈:[CODE(HTMLe)[[[ruby]]]]
の子供かつ [CODE(HTMLe)[[[rb]]]] の弟として高々2個、
[CODE(HTMLe)[[[rtc]]]] の子供として1個以上
:[[内容模型]]:[CODE(SGMLe)[%[[inline]]]]、但し
[CODE(HTMLe)[[[ruby]]]] を除く

* 属性

[FIG(short list)[ [14] [CODE[rt]] [[要素]]の[[属性]]
- [[大域属性]]

[HISTORY[
- [CODE[rtspan]]
]HISTORY]
]FIG]

* 例

[8] [[WinIE]] というか [[MSXML]] は 
[[XML名前空間]][[勧告]]にまともに対応していないので、
色々と不思議なことが起こります。 [[XML]]
[[文書]]を [[WinIE]] で[[レンダリング]]させるに当たって、
単に [CODE(HTMLe)[[[ruby]]]] 要素以下の[[名前空間URI]]
を [CODE(XMLa)[[[xmlns]]]] [[属性]]で
[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]]
に指定したところで、 [[XHTML]] の[[ルビ]]としては扱われません。
しかし、
[PRE(XML example code)[
<html:ruby xmlns:html="http://www.w3.org/1999/xhtml"
><html:rb>基底文</html:rb
><html:rt>ルビ文</html:rt
></html:ruby>
]PRE]
のように[[名前空間接頭辞]]を [CODE(XML)[html]]
にすれば、 [[WinIE]] は [[XHTML]]
の[[ルビ]]と理解してくれるようです。
もちろん [CODE(XMLa)[xmlns:html]] [[属性]]があるので、
[[名前空間整形式]]になります。

[[#comment]]

** 不思議解釈

[1]
間違って [CODE(HTMLe)[[[rt]]]] の中に [CODE(HTMLe)[[[rp]]]] を入れてしまった文書が世間には存在しているようです。
([[名無しさん]] [WEAK[2005-02-23 06:32:14 +00:00]])

[[#comment]]

** 関連

[7] '''名前空間URI''':
[[ルビ]]モジュールは [[XHTML]] で使われることを主に想定していますが、
特に [[XHTML]] に限定されているわけではありません。
[[XHTML 1.1]] で使う時には[[名前空間URI]] は
[CODE(URI)[[[http://www.w3.org/1999/xhtml]]]] になりますが、
これは[[ルビ]]モジュールの規定ではなく、 [[XHTML 1.1]]
の規定に基づきます。他の[[ホスト言語]]、例えば
[[XHTML 2.0]] では[[名前空間URI]] は
[CODE(URI)[[[http://www.w3.org/2002/06/xhtml2/]]]]
になっています。

* 改行

[15] 
稀に[[ルビ文字列]]に[[改行]]が入ることがあります。
[SEE[ [[ルビ]] ]]

[18] 
[CODE[rt]]
[[要素]]の[[内容モデル]]は[[語句付内容]]なので、
[CODE[br]]
[[要素]]を使うことができます。
[SRC[>>17]]

[19] 
また[[改行]]をそのまま書いて、
[[CSS]]
[CODE[white-space:pre]]
等でそれを表示に反映させることもできます。


[16] 
[[Chrome]]
では、
[CODE[br]]
でも
[CODE[white-space:pre]]
でも[[改行]]が通常通りに反映されて表示されます。
[TIME[2022-02-23T06:03:58.600Z]]

[20] 
[[Firefox]]
は
[CODE[br]]
[[要素]]の[[改行]]も、
[CODE[white-space:pre]]
の[[改行]]も、
[[改行]]として表示してくれません。
[TIME[2022-02-23T06:06:07.800Z]]

[22] 
ほとんど[[バグ]]と言って良いであろうこの不可思議な挙動は、
驚くべきことに 
[[CSS]]
の[[仕様書]]にそうしろと書かれています。
[SRC[>>21]]

[23] 
[[HTML]] の構文上まったく正当な [CODE[br]] [[要素]]の存在を無視したり、
[CODE[white-space:pre]]
の挙動を他のほとんどの場合と違う特別扱いを要求したり、
この[[仕様書]]の規定は常軌を逸していると言わざるを得ません。
[[Chrome]] がそれを完全無視しているのも頷けます。

;; [24] 
[[Firefox]] と [[CSS]] の[[仕様書]]の[[奇癖]]は、
[CODE[rt]]
だけでなく、
[[基底文字列]]内でも発症します。
[[改行]]の他に、
[CODE[display:block]]
なども機能しなくなります。
[[Chrome]] はそれらの規定も無視しています。
ただし
[[Chrome]]
は[[基底文字列]]と[[ルビ文字列]]の距離が固定されていて、
[[改行]]や
[CODE[display:block]]
によって[[基底文字列]]と[[ルビ文字列]]が重なって表示される(ことがある)という別の[[バグ]]があります。

[REFS[
- [21] [CITE@en[CSS Ruby Annotation Layout Module Level 1]], [TIME[2022-02-23T05:18:57.000Z]], [TIME[2022-02-23T06:06:01.697Z]] <https://drafts.csswg.org/css-ruby/#anon-gen-unbreak>
]REFS]




* 実装

[13] 
[[Firefox]] は[[ルビ]]を含む文字列を[[コピー]]しても、
[CODE[rt]] の内容をコピーしません。
その実装の関係なのか、 [CODE[rt]] の中身だけを選んで[[コピー]]すると、
何も[[コピー]]されないことがあります。
微妙な選択範囲の違いが何かあるのか、
[CODE[rt]] の中身全体を選択したつもりでも、
[[コピー]]されるときとされないときがあって困りものです。
[TIME[2021-03-20T08:58:56.200Z]]


[25] 
[CITE[Live DOM Viewer]], [TIME[2023-08-03T08:29:35.000Z]] <http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cp%3EABC%3Crt%3EXYZ>

[26] >>25 このように[[ルビ]]外に [CODE[rt]] だけがあるとき、
[[Chrome]] は普通に何もないように表示しますが、
[[Firefox]] は空白の上に小字で [CODE[rt]] を表示します。
[[Inspector]] で見るとどちらのブラウザーも 
[CODE[display]]
等特別な[[指定][UASS]]はありません。
[[Firefox]] の挙動は [[CSS]] 関係なしのハードコードのスタイル制御でしょうか。
[TIME[2023-08-03T08:31:46.00Z]]

- [27] [CITE[Live DOM Viewer]], [TIME[2023-08-03T08:33:11.000Z]] <http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cruby%3EA%3Cspan%3EBC%3Crt%3EXYZ>

[28] >>27 [CODE[ruby]] と [CODE[rt]] の間に無関係の[[要素]]が挟まっている場合 (歴代
[[HTML]] 仕様のいずれにも違反)。

- [[IE]] : [CODE[rt]] は[[ルビ文字列]]としてその前の文字列の上に小字で表示
- [[Firefox]] : [CODE[rt]] はその前の文字列に続く空白の上に小字で表示
- [[Chrome]] : [CODE[rt]] はその前の文字列に続けて同じサイズで表示

[29] >>27 のような表示を某ウェブサービスの検索結果表示で見ました。
いつからあるサービスなのかは不明。
[CODE[ruby]] の内外に気を配らずに [CODE[span]] を挿入するためにこういう現象が起きているようで。
[TIME[2023-08-03T08:36:29.600Z]]

[30] >>27 昔は [[Microsoft Excel]] に [[HTML]] を出力させたときもこういう要素構造になっていました。


[37] 
最近の [[Chrome]] はなんか変な変更でもしたのかなあ?
無指定でも [CODE[text-align: center]] でも、
変に偏って表示されて (規則性がよくわからない) 中央に来ないんだけど。
1文字なのに左端に表示されたりとか。



* 歴史

[5] この[[要素型]]は [[WinIE 5]] で最初に実装されました。

[6] [[Gecko]] 系[[レンダリング・エンジン]]で[[ルビ]]を解釈するための
[[XHTMLルビサポート]]という拡張ソフトウェアがあり、
[CODE(HTMLe)[[[rt]]]] 要素型も実装しています。



[2] 仕様書:
- [CITE[Ruby]] <http://www.w3.org/TR/1999/WD-ruby-19990322/#a2-3>
-- [[HTML]], [[単純ルビ]]
-- [[W3C]] [[作業原案]] ([[規定]])
- [CITE[Ruby]] <http://www.w3.org/TR/1999/WD-ruby-19990924/#ruby-sgml>
-- [[HTML]], [[複雑ルビ]]
-- [[W3C]] [[作業原案]] ([[参考]])
- [CITE[Ruby Annotation]] <http://www.w3.org/TR/2001/REC-ruby-20010531/#rt>
-- [[XHTML]], [[複雑ルビ]]
-- [[W3C]] [[勧告]]
- [CITE[Ruby Annotation]] <http://www.w3.org/TR/ruby#rt>
-- 最新版



[9] [CITE@en-US[Internationalization Tag Set (ITS) Version 1.0]]
( ([TIME[2007-04-03 09:11:18 +09:00]] 版))
<http://www.w3.org/TR/its/#selection-local>

[10] [CITE@en[Web Applications 1.0 r7611 Update rt/rp sections to match newer ruby section.]]
( ([TIME[2012-12-30 13:21:00 +09:00]] 版))
<http://html5.org/tools/web-apps-tracker?from=7610&to=7611>


[11] [CITE@en[Support rb and rtc elements in the parser (ruby) · whatwg/html@8d1c8af]]
([TIME[2015-11-11 20:57:50 +09:00]] 版)
<https://github.com/whatwg/html/commit/8d1c8affec71058de29f8051cb2fa7f7bbad1fe6>

[12] [CITE@en[innerText: include parentheses around <rt> if there's no <rp> · Issue #1801 · whatwg/html]]
([TIME[2016-12-04 11:34:49 +09:00]])
<https://github.com/whatwg/html/issues/1801>


[31] [CITE@ja[水卜麻美×安住紳一郎×大下容子×松丸友紀×伊藤利尋×高瀬耕造がクロストーク! テレビ70年特番「アナテレビ」 |NHK_PR|NHKオンライン]], [[日本放送協会]], [TIME[2023-08-29T03:08:24.000Z]] <https://www6.nhk.or.jp/nhkpr/post/original.html?i=38257>

>
[PRE(HTML code)[
<h2>ありのままの映像を<br class="br-sp">言葉にする…「<ruby>絵解<rt style="position: relative; top: 0.4ex;">えと</rt></ruby>き」</h2>
]PRE]

[32] 
>>31
[[Chrome]] だと [CODE[position]], [CODE[top]] は[[レンダリング]]に影響しないようです。
[[開発者ツール]]で見ると
[CODE[top]] に [CODE[position: static]] では効果がないと案内が出ているので、
[[Chrome]] では [CODE[rt]] に暗黙の [CODE[position: static]] が強制されていると思われます。

[33] 
>>31
[[Firefox]] だと [CODE[top]] によってほんのわずかに[[親文字列]]寄りに[[レンダリング]]されます。
個人的には誤差レベルであってもなくても気づくかどうか、敢えて指定するまでもないものに思われます。
[[NHK]] は別サービスで [[Firefox]] への対応を打ち切るような企業なので ([SEE[ [[NHK]] ]])、
ここで [[Firefox]] のために調整したのかは疑問が残ります。

[34] だとするとこれはどの[[Webブラウザー]]のための指定なのでしょうね?


[35] [CITE@ja[「関東大震災」から100年…カラーでよみがえる光景とは NHKスペシャル「映像記録 関東大震災 帝都壊滅の三日間」(前・後編) |NHK_PR|NHKオンライン]], [[日本放送協会]], [TIME[2023-08-29T03:15:13.000Z]] <https://www6.nhk.or.jp/nhkpr/post/original.html?i=39752>

>
[PRE(HTML code)[
<p>震災当時、両国駅に勤務していた外山 <ruby>恂<rt style="position: relative; top: 0.4ex;">まこと</rt></ruby>さんが記した一編の手記。被害が広がる街や火災旋風の中で逃げる人々の様子、外山さんが離散した家族を見つけ出す過程が記された手記を朗読します。(読み手:小室 等)</p>
]PRE]


[36] 
>>31 隣の [CODE[[[class]]="br-sp"]] と違って [CODE[class=""]] でなく
[CODE[style=""]] を使っているので [[ad hoc]] なものとも思いましたが、
他でも [CODE[rt]] で >>35 のようにまったく同じ指定があるので、
[[振り仮名]]はすべてこの形になっていると推測されます。
どうして [CODE[class=""]] にしないのかは謎ですが、
システム開発の段階や分担の違いか何かの現れでしょうかね。
なお >>31 は[[見出し]]中ですが、 >>35 だと関連番組リストの説明文中なので、
出現位置にも関係していないと思われます。






