Navy Files

HTMLの常識にだまされるな!

広く語られているHyper Text Markup Language(以下HTML)の常識(?)には、間違いが結構含まれています。中には「え?」っていうのもあるかもしれませんが、それはHTMLを解説した書籍などが広めたウソである事が多いです。一番大切なのは「他人の言う事をそのままウノミにしない」という事だと思います。

したがって、このサイトの文章も疑ってみましょう。そして、本が正しいかそれともこのサイトで言っている事が正しいか自分でいろいろ調べてみましょう。そうする事によって「他力な知識」ではなく「自力な知識」になります。どちらがより深い知識なのか比べるまでもないでしょう。

この文書では簡略化のためNetscape Communications社のNetscape NavigatorをMozillaと記述し、Microsoft社のInternet ExplorerをMSIEと略記します。


用語に関するもの

HP???

HPって何ですか?会社の名前?(^^;まぁ、HomePageの略って事なんでしょうが実質「ホームページ」ってなんですか?N○Kですら「ホームページ、ホームページ」って何度も言うくらいだからかなりの数の人が誤った認識を持ってるかもしれません。HTML文書全てをホームページと呼ぶのは間違いです。ホームページといった場合大きく2つの意味に分かれるようです。

  1. 自分のサイトの中でメインになるファイル。多くの場合index.htmlなど。
  2. MozillaやMSIEなどのWebブラウザを立ち上げたときに一番最初に表示されるファイル。

でもこれってあいまいですよね。例えばMozillaなどでホームページの設定をhoge.gifとかいう画像ファイルにした場合、その画像がホームページになるのでしょうか?謎です。この謎の言葉をHPなんて略すともっと謎になります。したがって私はこのような謎の言葉を使いません。使いたくもありません。

タグ??

要素の事をタグと呼んでいるオマヌケ本もありますが、それはまったくのデタラメです。例えばP要素の場合、P要素 = 開始タグ(<P>) + 要素の内容 + 終了タグ(</P>)で構成されます。これをPタグなんて呼んだらおかしいですよね。

<BR>はエンプティタグ?

<BR>には終了タグが存在しません。それは改行する位置を示すためだけなので要素の内容を必要としないためです。こういった内容がない要素を空要素と呼びます。

問題はこの空要素の事をエンプティタグだ!などとわけのわからない事を言っている本がたまに存在します。空要素とは要素の内容が無い(エンプティエレメント)であってタグが空なのではないのですよ。エンプティタグと言えば、<>(エンプティスタートタグ)や</>(エンプティエンドタグ)の事でしょう。ちょっと考えれば分かりそうな気がしますが(^^;


記述に関するもの

DOCTYPE宣言を書け!

DOCTYPE宣言を書かずにHTMLを説明するなんてもってのほかですね。DOCTYPE宣言とは、例えばHTML4.0Strictの場合
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
このようにHTMLドキュメントの行頭に記述しなければなりません。意味は、

<!

SGMLのマーク宣言開始記号です。けしてタグ開始記号ではありません。

DOCTYPE

これがDOCTYPE宣言である事を示す予約名です。

HTML

文書の型を示します。ここではHTMLを指定した事になります。例えばここにHOGEなどとするとルートエレメントは<HOGE>〜</HOGE>なんて事になってHTML文書ならぬHOGE文書?となる(^^;でもそういう事はしないように。HTML文書を作成するのですからHTMLで固定ですね。

PUBLIC

本来SGMLでは文書の型を指定した後にDTDを記述します。しかし、巨大なDTDを記述するのは大変な事です。そこで外部認識子というものを使って外部のDTDを参照しその場にそっくりそのまま貼り付ける事が出来ます。

PUBLICは外部認識子で一般に公開されているDTDを貼り付ける事を意味します。あまり関係ないのですがDTDが公開されたものではなく特定のマシン上にだけある場合はSYSTEMを使います。

"-//W3C//DTD HTML 4.0//EN"

-//W3C」の部分は、所有者認識子で公開文書の所有者を示します。W3CはこのHTMLを策定したWorld Wide Web Consortiumを示します。

DTD」の部分に公開文クラスを指定します。この場合は、DTDを公開しているわけです。

HTML 4.0」の部分に公開文記述を指定します。公開文記述とは公開文書の目的をあらわします。この場合はHTMLのバージョン4.0のために文書を公開していることになります。

EN」の部分に公開文言語コードを指定します。HTML4.0のDTDは英語ですのでENです。もし日本語でDTDが公開されているならばJAと指定します。大文字で指定する事と公開文の言語コードであって作成するHTMLの言語コードではない事に注意。

>

マーク宣言終了記号で宣言を閉じます。

とここまでクドクドと書きましたが、要するにDOCTYPE宣言をする事によって「この文書はHTMLでバージョンは○○で参照するDTDは○○を使っています!」と宣言した事になります。これがないとどのバージョンで記述してあるのかも全く分からない「はず」なんです。

でも多くのWebブラウザは無くてもそれなりに表示してくれます。HTML本もこの事について詳しくは触れていないのが多いです。だからといって宣言しないのは駄目です。RFC1866では「DOCTYPE宣言がないHTML文書はHTML2.0準拠として扱う」となっていますが、HTML4.0ではそれを推奨していません。という事でDOCTYPE宣言は必ず書きましょう。

DOCTYPE宣言の種類
HTML 4.0 Strict(完全なHTML4.0)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
HTML 4.0 Transitional(HTML4.0への緩やかな移行)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
HTML 4.0 Frameset(フレームを使う場合)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN">
HTML 3.2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
HTML 2.x
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML i18n//EN">
HTML 2.0
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">

Hn要素は文字の大きさじゃないって!

見出しをマークアップするH1〜H6要素は、断じて文字の大きさを指定するためのものではないです。見出しの重要度(レベル)をマーク付けするためのものです。「H1要素は一番重要な見出し、H2要素はその次」という具合に使わなければなりません。見え方について「H1要素を一番大きく、H2要素はその次で」なんて事はMozillaやMSIEが勝手にそう定義しているだけで他のWebブラウザでは違って見えるかもしれません。参考までにLynxでの見えかたを載せておきます。


                                    H1要素

H2要素

  H3要素

    H4要素

      H5要素

        H6要素

見れば分かると思いますが、H1要素はセンタリングされH2要素から順に適度にインデントされていきます。Hn要素でフォントの大きさを指定するなんて事がいかにオトボケな使い方なのか一目瞭然でしょう。

<P>は改行+1行空けじゃない!

P要素は段落を示します。それ以外のなにものでもないです。改行して1行空けるとかいう見栄えの指定は全てWebブラウザ側にまかされています。あなたのWebブラウザで改行して1行空きに見えても別のWebブラウザではそうならないかもしれません。

ちなみに<P>〜</P>でマークアップします。行末に<P>は遠い昔の話です。行頭だけ<P>っていうのはP要素の終了タグ</P>を省略が自明な時にだけ省略できるからです。<P>を改行に使ってはいけません。強制改行は<BR>です。

DT、DD、LI要素にも終了タグはある!

DT、DD、LIの各要素に終了タグは存在しないなどとホラを吹いてるHTML本がありますが、HTML2.0からちゃんと存在しています。これらの要素は「省略してもよい」というだけで空要素なのではありません。例えば番号なしリストの場合UL要素の内容にはLI要素しか含められませんので次の<LI>が現れた時か</UL>が現れた時点でその前の</LI>が補われるわけです。

<UL>
 <LI>リスト1</LI>
 <LI>リスト2</LI>
 ↑次のLI要素の開始タグがあらわれた時点で最初の
   LI要素の終了タグ</LI>が補われる。
</UL>
↑UL要素の終了タグが現れた時点でその前のLI要素の
終了タグ</LI>が補われる。

もし仮にUL要素中にP要素を含められるなんて事になっていればP要素がUL要素直下なのかLI要素の子要素なのかが分からなくなるので</LI>は省略出来なくなるでしょう。実際にはUL要素の内容にはLI要素しか入れれないので省略可能となるのです。</LI>が存在しないわけではないのですよ。

OL、UL、DL要素はインデントじゃない!

オマヌケなHTMLオーサリングツールを使ってインデントを指定すると<OL>〜</OL>、<UL>〜</UL>、<DL>〜</DL>などでマーク付けしたりします。OL、UL、DLの各要素は断じてインデントのためのものではなくそれぞれのリストを形成するために用いられる要素です。これらの要素をインデントする、しないは各Webブラウザに依存されます。したがってMozillaやIEではインデントされても別のWebブラウザではインデントされないかもしれません。

インデントしたければCSSを使いましょう。「じゃぁCSS未対応のWebブラウザはどうするんだ!」という方もいるかもしれませんがそれは、それで良いのです。この文書もCSS未対応のWebブラウザやCSSの設定をOFFにしているのであれば、そのWebブラウザの標準の(もしくはユーザが設定した)スタイルで表示されているはずです。

CSSを使っている方はCSSを使わない設定にしてみてください。見え方がまるっきり違ってくると思います。CSSを切った状態では背景色、文字色、各要素の表示のされ方などはWebブラウザ標準の(もしくはユーザが設定した)見栄えになるでしょう。しかし、各文字列はきちんとマーク付けしていますから読めない事はないのです。そして印刷する時や小さな画面で見る時などCSSの設定ファイルを入れかえたりCSSを使わない設定にするだけでいかようにも見栄えを制御できます。だからこそインターネットの大きな意義であるリソースの再利用が可能になるのです。

それを文書全体のインデントとしてUL要素などを使ったらどうなるでしょう?あいさつ文も注意書きも引用文も全て番号なしリストなんて事になりますよね。そういう使い方をしているHTML文書はリソースの再利用なんか出来るわけがありません。けしてHTMLで見栄えを追及してはいけません!

BLOCKQUOTE要素はブロック化してインデントってなんだ?

<BLOCKQUOTE>〜</BLOCKQUOTE>もインデントとして使われる事が多いようです。UL要素などと違いBLOCKがついているからかもしれませんが「ブロック化してインデント」などという意味不明な説明を目にしたことがあります。しかしBLOCKQUOTE要素は引用文であってけしてインデントのための要素ではありません。あなたのWebブラウザでは「ブロック化してインデント」と見えるかもしれませんが、他のWebブラウザでは「>」などの引用符が付くかもしれません。

Webブラウザの多くは目で見るように設計されています。しかし、中には音声による読み上げ専用のWebブラウザも存在します。そういったものでは<BLOCKQUOTE>が現れると「ここから引用文です。」と読み上げるかもしれません。でもBLOCKQUOTE要素をインデントとして使っていたらどうでしょう?引用文ではないのに引用文と誤解されますよね。ですからBLOCKQUOTE要素は、このような混乱を招くかもしれない使い方はせず引用文を明示するためだけに使いましょう。

<!〜>がコメントのわけがない!

コメントは<!-- 〜 -->です。ちなみに、これはコメントタグなどというものではありません。SGMLのマーク宣言の一種です。マーク宣言は<!(マーク宣言開始記号:<!で1つの記号なので<と!の間に何も入れる事は出来ない。)の後に「DOCTYPE」などの予約名か「--」(コメント開始記号)しか記述できません。空白文字も不可です。マーク宣言開始記号の後にコメント開始記号がきた場合つまり「<!--」となった場合注釈宣言として解釈されます。注釈宣言を閉じるには、コメント終了記号+マーク宣言終了記号となります。つまり「-->」ですね。

コメント終了記号の後ろには空白文字のみ記述する事ができますから「-- >」でもOKですね。SGMLでは注釈宣言中にコメント記号「--」は何度もあらわれて良い事になっています。しかしその場合、「--」が必ずセットになってなければなりません。つまり、-- 〜 --で一つのコメントとして扱われる事になります。したがって、

01|<!-- コメント -->←正しい
02|<!-- コメント -- -- コメント -->←正しい
03|<!-------->←正しい
03|<!-- コメント --  コメント -->←間違い
04|<!--コメント>←間違い
05|<! --コメント-->←間違い
06|<!------>←間違い

となる。ただしHTML4.0ではコメント内に余分な「-」の連続を入れないようにとしています。つまり01以外は推奨しないという事です。

P要素に<HR>を含めちゃだめだよ!

HTMLオーサリングツールの中には、<P><HR></P>なんていうばかげたマークアップをするものがありますから注意してください。HR要素(水平線)はブロックレベル要素です。P要素の内容にブロックレベル要素を入れる事は出来ないので、こういったマークアップは不正です。<HR>はP要素の外に出しましょう。

メインへ戻る(Y)】 【インデックス(X)


Copyright © 1998-1999 by GinToni. All rights reserved.