町で見つけた変な解説を集めました。こんな解説をしている本は、解説書としては失格です。
段落を表す P要素に関する誤り。
P は段落(パラグラフ)を表す要素で、<P>と</P>で挟んだ部分が段落。段落の頭に<P>、お尻に</P>です。</P>は省略可能だから書かないこともありますが、ないわけではありません。
それを、<P>は単独で段落のお尻に書くものだと説明している人がいます(これを俗に「お尻<P>」と言います)。HTML1.0 のドラフト文書を読むと、当時は段落と段落の区切りに <P> を書いていたことがうかがえますが、そんなのは縄文時代の話。いったいいつの話をしているのでしょうか!?
この説明は非常に多いですね。泣きたいほど多いけれど、泣きたいほど違う〜。なんで P が一行空きなの? そんなルールはありません。あるとすれば MOSAIC や NN や IE のローカルルールですけれども、NN や IE でも、スタイルシートを使えば一行空きにはなりません。こういうことを書く人たちは一体何を勉強しているのでしょう?
「P は段落」と説明されていればまだましなほうで、「改行 + 一行空き」などと説明している人がいらっしゃるようです。<BR> 2個分などと言っている人さえいます。まさか、P が Paragraph の頭文字だと言うことも知らないとか……? どうしてこんな発想が出てくるのかぜんぜん分かりません。
Hn や TITLE に関する誤り。
H1 〜 H6 で見出しレベル1〜6。それを、フォントサイズ変更と説明している人がいます。さらには、わざわざ「<FONT size=>の指定と逆なので注意しろ」とか言っている人。どうして逆なのか不思議に思ったりしないのかしらん?
これも<P>の一行空きと同様、たまたま IE や NNでそうなっているだけです。現に Lynx は H1 をセンタリング、H2〜H6 をそれぞれ適度に字下げして表示します。
これも上記と同様、IE や NN がそうなっているだけです。
同じ間違えるにしても、RFC1866(HTML2.0) を読んでいるならこんな説明は絶対にしないでしょう。HTML2.0 では、H3 や H5 をイタリックにするのが標準だと言っています。ついでに言えば、CSS1 のスタイルシートサンプルでもそうなっています。
どの HTML でも、タイトルは絶対に省略できないことになっています。省略されてしまっている時、仕方なしにファイル名を表示するブラウザが存在しますが、それは単なるエラー処理の結果に過ぎません。特定ブラウザのエラー処理に依存した悪質な解説です。
文書をコマ割りにする FRAME に関する誤り。
これはありがち。一番多い間違いだと思います。NOFRAME などという要素はありません。正しくは NOFRAMES。末尾の S が抜けています。
噂によると、Netscape の非公開仕様では NOFRAMES ではなく NOFRAME なのだそうで……いやはや、公開の仕様ではなく、わざわざ Netscape の非公開仕様を調査して解説本を書くとは、頭が下がります。ご苦労様です。
せっかく NOFRAMES と説明していても、それを書く位置を間違っていたりします。たとえばこんな感じ。
<HTML><HEAD><TITLE>フレーム文書</TITLE></HEAD> <FRAMESET> <FRAME src="なんちゃら"> <FRAME src="かんちゃら"> </FRAMESET> <NOFRAMES> ほげほげ </NOFRAMES> </HTML>
これは間違いです。HTML 要素直下に NOFRAMES 要素が現れることはできません。書くなら、FRAMESET の中です。
「どちらにも書けるけれど FRAMESET の外に書く方が普通」などと説明している本がありましたが、どちらに書くのか疑問に思ったならちゃんと調べて欲しいものです。しかもわざわざ間違った方を推奨するとは……。
何と、FRAMESET 要素や FRAME 要素によるフレームの定義を <HEAD></HEAD> 内で行う、などと書いている本がありました。どこからそんな発想が出てきたのでしょうか?
当然の事ながら、FRAMESET は HEAD 要素の後、BODY 要素の代わりに使います。
引用部分を表す BLOCKQUOTE要素についての誤り。
非常に多くかつ致命的な間違いです。BLOCQUOTE は引用を表す要素です。NN や IE ではたまたまインデントされるかもしれませんが、それさえもスタイルシートで変えられます。断じて「インデントのタグ」などではありません。
「テクニック」「裏技」と称して BLOCKQUOTE でインデントする方法を教えている方もいらっしゃるようです。そんな方は、音声ブラウザに「以下は引用です」と大声で言われて大恥をかけばいいのです。CSS2 でユーザースタイルシートを使えば、そういう設定も可能ですから。
ちなみに、私のブラウザは BLOCKQUOTE をインデントせずに、緑の枠で囲った上に背景をペーパーホワイトにします。時々、せっかく背景画像を指定しているのに真っ白になっているサイトがあるのですが……。
なお、仕様書 9.2 の註釈には、こんなことが書いてあります。
However, as some authors have used BLOCKQUOTE merely as a mechanism to indent text, in order to preserve the intention of the authors, user agents should not insert quotation marks in the default style.
もう涙なしには読めません。著者は断腸の思いだったでしょう(あくまで想像)。悪貨は良貨を駆逐するということわざを思い出したのは、私だけではないと思います。
「なぜ BLOCKQUOTE でインデントしてはいけないのか」も参考にしてください。
BLOCKQUOTE は文章を「ブロック化」するという解説。とことん意味不明です。ブロック化って何? 要素の名前だけ見て適当に考え出したのでしょうか?
OL, UL, DL などに関する誤り。
LI はリスト項目を表す要素です。これは必ず OL や UL などの中で使います。……が、世の中には、LI が単独で使えるなどと解説している人がいるようです。
ブラウザは文法違反のソースでも表示するべく努力しますから、LI を単独で使ってもそれなりに表示されることはありますが、それはあくまでエラー処理の結果としてです。その努力におんぶしてはいけません。
OL や UL の直下にテキストを書いてインデント!? これも文法違反で、表示されるのはブラウザのエラー処理の結果としてなのですが、それをテクニックと称して教えている方がいらっしゃるようです。
</LI>や</DT>や</DD>は存在しないと教えている本があります。どうしてこんなことが言えるのでしょうか? 根拠は?
確かに大昔の HTML1.0 では
Some elements (e.g. P, LI) are empty. They have no content. They show up as just a start tag.
などと書いてあったわけですが、縄文時代の仕様を解説しても仕方ありませんし……。あるいは、RFC1866(HTML 2.0)で
Some elements only have a start-tag without an end-tag. For example,to create a line break, use the `<BR>' tag. Additionally, the end tags of some other elements, such as Paragraph (`</P>'), List Item (`</LI>'), Definition Term (`</DT>'), and Definition Description (`</DD>') elements, may be omitted.
「<BR>には終了タグはない、加えて、</P>、</LI>、</DT>、</DD>は省略できる」などと書いてあるのを、最後の may be omitted.
をすっ飛ばして訳しちゃったうっかりさんがいるのかも(あくまで想像)。
いずれにしても、HTML2.0以降では </LI> </DT> </DD> が存在します。このことは DTD を見れば明らかなのですが、どうして存在しないなどと断言できてしまうのか、不思議でなりません。
「LI は BR を内包しています」という解説を見たことがあります。……本気で意味不明ですが、この説明をしている本が複数存在します。いやはや……。
おそらく、彼らは </LI> が存在しないと言う話をまに受けていて、LI を空要素だと思っているのでしょう。<LI>〜</LI> で一つのリスト項目なのですから、改行されることには何の不思議もないのですが。
いくつかの解説書が、「<LH>(リストヘッダ)というタグ」を説明しています。UL や OL の中に一回だけ書けるのだそうです。「IEが対応しているが、インデントがかかってしまい、うまく表示されない」のだとか。……って、うまく表示されないのなら対応しているとは言えないと思うのですが……。
実は、HTML3.0 では、この LH という要素が提案されていました(過去形)。TABLE の CAPTION と同じような使い方で、UL、OL、そして DL の中で一度だけ使うことの出来る要素でした(過去形)。しかし HTML3.0 は完成を見ないまま破棄された仕様です。つまり、LH は提案されただけで終わったのです。
LH は HTML 仕様としては存在しません。では IE の独自拡張として存在するのかというと、そうでもないようです。Microsoft社の HTML リファレンスには LH など出ていませんし、<LH> タグを入れても削除しても IE の表示はまったく変わりません。解説書が何を根拠に「IEで使える」と主張しているのかは、まったくもって不明です。
TABLE に関するのけぞり
HTML4.0 の解説書とか言いながら <TABLE BORDER> で枠線をつける、などとしている人がいます。これは <TABLE frame="border"> と解釈されて枠線がつきますから間違いではないのですが、実のところは HTML+ や HTML3.0 との互換性のために用意された記法なので、あまり望ましくない気はします。
この点に関しては仕様書にも注釈があるのですが、著者は本当に HTML4.0 を読んだのでしょうか。もしそうなら、こんな例文を平然と掲げることは出来ないと思うのですが。
これには本気でびっくりしました。こんな感じで……
<TABLE> <TD>……<TD>…… <TR> <TD>……<TD>…… <TR> </TABLE>
一瞬、「あ、最初の TR を書き忘れてる」と思いましたが、違いました。よく見ると</TABLE>の前に<TR>がある……そう、お尻<TR>なのです! これには本気でのけぞりました。いくら何でもアホすぎるので、ひょっとしたら単なる誤植なのかも知れませんが……他の場所にも出てるんだよなぁ……。
しかも恐ろしいことに、これを教えている本が複数存在しました。<TR>は<TR>……</TR>という使い方をしますが、最近では<BR>と同じような使い方をすることが増えてきていますだって。ホントかいな。
実を言うと、HTML+ という仕様では、<TR> は行を区切るものとして使われることになっていました(それでも </TABLE> 直前にはいらないんだけどな)。しかし、そんなのは弥生時代の話です。HTML+ というのは変わり種の仕様で、<HTML> タグの代わりに <HTMLPLUS> タグを使うことになっていたり、短縮タグ機構が使えなくなっていたりします。現在の HTML との互換性は皆無です。
ほかいろいろ。
HTML 4.0 の解説書で、こんな感じの例文を見かけました。
<ADDRESS> <UL> <LI>…… <LI>…… </UL> </ADDRESS>
HTML 4.0 では、ADDRESS の中身はインライン要素のみです。UL はブロックレベルですから、ADDRESSの中に入れることは出来ません。ちなみに、HTML2.0, HTML3.2, HTML4.0 Transitional ではインライン(もしくはテキスト)要素のほかに P を含むこともできます。
実は HTML4.0 の仕様書 にも、ADDRESS の中に UL ではなく P を入れている例文があったのですが、1998/4/24 版で訂正されています。これは移行用の HTML4.0 Transitional では許される構文なのですが、厳格な HTML4.0 では文法違反です。
……というわけで P を入れてしまうのなら理解できますが、UL はちょっと言い訳不可能です。一言で言えば無茶苦茶です。