付録A 明日話したくなるHTML雑学50
ただ並べても面白くないので、テーマごとにまとめました。気になった番号から、本編のどの章につながるかを探してみてください。どれも「へぇ」と言われる側になれるネタです。
ブラウザの中で起きていること
書いたものと、ブラウザが実際に扱うものは違う、という話。
tbodyは書かなくても DOM に現れる。htmlheadbodyは省略しても補完される。pは文脈しだいで勝手に閉じる。<table>の直下に書いたテキストは、表の中ではなく表の前へ飛ばされる(foster parenting)。- View Source と DevTools は、同じページの違う段階を見ている。
- だから
table > trという CSS は、たいてい空振りする。 - HTML 仕様書のかなりの部分は、人間向けの説明ではなくパーサーの規則。
HTML という言語の正体
そもそも HTML は何をする言語なのか。
- HTML はプログラミング言語ではない(
ifもforもない)。 - それでも Web の基盤になれたのは、読み手が多かったから。
- HTML は URL・HTTP と分業して、はじめて Web になる。
- HTML が重視したのは、完成した紙面より「接続された文書」。
- ブラウザは壊れた入力でも止まらず、回復して読み進める。
- それは甘さではなく、閲覧を止めないための設計。
省略と空要素のからくり
短く書けるのには、ちゃんと理由と条件がある。
imgは最初から子を持たない「空要素」。閉じ忘れではない。brもhrも空要素。<img />の/は HTML では無視される。でも SVG / MathML では本当に効く。- ブール属性(
disabledなど)は値を書かなくても成立する。 - しかし
disabled="false"と書いても、無効化は解除されない。 - 引用符の省略には、かなり狭い条件がある。
- 属性やタグの省略可能性は、HTML の祖先 SGML の名残。
- コメントの中にも、書いてはいけない並びがある。
歴史のひとこま
いまの HTML は、たくさんの偶然と現場の都合でできている。
- 世界初の Web サイト
info.cern.chは、今も見られる。 - 1989 年の Web 提案書に、上司は「Vague but exciting」と書き込んだ。
- 最初の Web サーバーになった NeXT には「電源を切るな」の貼り紙があった。
imgタグは 1993 年にマーク・アンドリーセンが提案した。- Netscape の
<blink>は一晩で実装され、のちに削除された。 - 文字を流す
<marquee>は Internet Explorer の独自タグだった。 - かつてはコメント
<!--[if IE]>が、IE 専用の分岐に使われていた。 spacer.gif(1×1 の透明画像)でレイアウトを整えた時代があった。fontやcenterは obsolete だが、当時の需要は本物だった。- obsolete は「なかったこと」ではなく、歴史の層として残る。
標準化のドラマ
HTML は、誰かが一度決めて終わり、ではない。
- XHTML は厳格さを目指したが、Web の現実と衝突した。
- XML の「壊れたら止める」は、公開 Web には重すぎた。
- XHTML 2.0 は打ち切られ、現実路線の HTML5 が後継になった。
<!DOCTYPE html>の唯一の仕事は、Quirks Mode を切ること。- Quirks Mode は、古いページを壊さないために今も残っている。
- WHATWG の HTML は、版で止まらない Living Standard。
- W3C と WHATWG は 2019 年に HTML 標準を一本化した。
- ブラウザ戦争の混乱が、標準化の必要性を強くした。
HTML を読むのは誰か
HTML は、人間の目だけのためにあるのではない。
- HTML の読者は、ブラウザだけではない。
- 検索エンジンも HTML の構造を読む。
- スクリーンリーダーも HTML の意味づけに依存する。
altは飾りではなく、目で見ない読み手にとっての画像の本体。<details>と<summary>だけで、JavaScript なしに開閉する UI が作れる。<script>の中に</script>と書くと、文字列の途中でも壊れる。&をそのまま書くと、&の始まりと誤解されることがある。- フレームワークが変わっても、最終的に HTML へ落ちることは多い。
- HTML は「古い」のではなく「古くても読める」技術。
- HTML は完成しない仕様。これからも調整され続ける。
- HTML の奇妙さの多くには、ちゃんと歴史的な理由がある。