[405] object
hack は、 HTML における段落内ブロック要素の扱いに関する問題の
ad hoc かつ controversial な解決方法 (hack) の1つです。
[417] HTML4 のバグを突いた解法でしたが、WinIE での表示の問題からそもそも実用的ではなく、 HTML5 で穴がふさがれたため仕様上も使えなくなりました。
[406] 段落はしばしばリストをはじめとした「ブロック的なもの」を含みます。例えば、
そのような例には (1) 敢えてそうマーク付けしなくてもさほど問題はないが、要素構造が意味的に不自然になるもの (2) そうマーク付けしなくては意味的あるいは見た目的に意図通りとならないもの などがあります。
といった文章は1つの「段落」の内部にリストという「ブロック的なもの」が含まれます。
[407] HTML4 では段落を表す p
要素の内側にリストを表す
ul
要素をはじめとするブロック水準要素を含めることができないと規定されていました。
しかし、現実には先に挙げた例のように段落内にブロック的なものが含まれることがあるため、
これをどうマーク付けするかが問題とされました。
[408] この問題には p
要素を用いない、ブロック水準要素を用いない、
マーク付け可能な形に文章を変更する、 p
要素の仕様を変更する、などいくつかの解法が提案されてきました。
[409] object
hack は、 object
要素の
(おそらくはバグである) 仕様を利用して p
要素もブロック水準要素も利用し、
文章を変更せず、かつ HTML4 に適合する形で前記の問題を解決するものです。
[410] >>406 に示した例は object
hack を用いた場合
<p>そのような例には <object> <ol> <li>敢えてそうマーク付けしなくてもさほど問題はないが、要素構造が意味的に不自然になるもの <li>そうマーク付けしなくては意味的あるいは見た目的に意図通りとならないもの </ol> </object> などがあります。</p>
のようにマーク付けします。
[411] object
hack は歴史的に何度も独立に考案されてきました。
[1] <http://groups.google.com/groups?selm=6244mo%24l56%40sunglow.eds.ecip.nagoya-u.ac.jp>
1997年10月
[4] Re: It's a paragraph, but it's not? <http://groups.google.com/groups?selm=Pine.LNX.4.30.0101121238460.6054-100000%40lxplus003.cern.ch>
2001年1月
[5] bubble hour - 2001/12 #1 <http://web.archive.org/web/20030212191217/http://www1.odn.ne.jp/bungaku-shitsu/appendix/diary/d0112-1.html>
2001年12月
一連の議論の中で satoshii 氏が発見
[6] 2004-02-11 18:39:43 +00:00 satoshii: >>5 まぁ、なんつーか…お察し下さい。
[9] Re: Validation errors and white blocks. <http://groups.google.com/groups?selm=y94gb.92146%24lh.19451395%40amsnews02.chello.com>
2003年10月
[8] Re: different bullet points for nested lists <http://groups.google.com/groups?selm=pan.2003.11.27.22.36.15.819571%40goddamn.co.uk>
2003年11月
[3] Object? <http://www.xs4all.nl/~vangeijt/test/object-hack.html>
2004年1月付け
[7] XHTML 1.0 strict en lists <http://groups.google.com/groups?selm=c6b354%2415e%241%40reader08.wxs.nl>
2004年4月
[2] [whatwg] <p> elements containing other block-level elements <http://listserver.dreamhost.com/pipermail/whatwg-whatwg.org/2005-April/003470.html>
2005年4月
Ian 氏の一案
[13] >>2 は 404
だけど多分これ:
[whatwg] <p> elements containing other block-level elements ( 版) <http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2005-April/003470.html>
[10] p要素の中にobject要素を介してブロック要素を含めることに関する議論 - 徒委記 <http://www.akatsukinishisu.net/wiki.cgi?p%CD%D7%C1%C7%A4%CE%C3%E6%A4%CBobject%CD%D7%C1%C7%A4%F2%B2%F0%A4%B7%A4%C6%A5%D6%A5%ED%A5%C3%A5%AF%CD%D7%C1%C7%A4%F2%B4%DE%A4%E1%A4%EB%A4%B3%A4%C8%A4%CB%B4%D8%A4%B9%A4%EB%B5%C4%CF%C0>
2006年1月
[12] P element's content model restrictions (Leif Halvard Silli <lhs@...> 著, 版) <http://permalink.gmane.org/gmane.org.w3c.whatwg.discuss/10840> (名無しさん 2007-06-04 11:50:37 +00:00)
[418] 元々 object hack は HTML4 の object
要素の内容モデルの定義のバグを突いた
hack でしたが、 HTML5 では object
要素は透過内容を持つと定義されており、
phrasing content の中ではやはり phrasing content しか認められないこととなり、
object hack は使えなくなりました。
[412] object
hack は表面的には問題を解決しましたが、あまり美しい解法ではなく、
“hack” と呼ばれるに留まった上、普及もしませんでした。
[413] 普及を最も阻害する原因となったのは WinIE が object
要素の内容を正しくレンダリングできないことでした。 WinIE
では object
要素は事実上 ActiveX control
専用であり、 ActiveX control 以外の object
要素は壊れているかのように扱い、
内容は無視していました。普及率の最も高い (考案当時は9割以上を占めた) WinIE で正しくレンダリングできないのでは、
所詮机上の空論の域を出ませんでした。
object
要素の乱用である[414] 構文的に HTML4 に適合するとはいえ、 HTML4 で定義された object
要素の意味を object
hack は逸脱していました。
[415] そもそも HTML4 の定義上行内要素であったはずの object
要素の内容としてブロック水準要素が利用可能であること自体がバグであるとも考えられ、
構文的な適合性のためにそれを流用することは相応しくないとも思われました。
[416] (X)HTML5 Tracking ( 版) <http://html5.org/tools/web-apps-tracker?from=2597&to=2598>
[419] IRC logs: freenode / #whatwg / 20101004 ( ( 版)) <http://krijnhoetmer.nl/irc-logs/whatwg/20101004>