(X)HTML の仕様にイライラ(軽い気持ちで見よう)

シェアする

(X)HTML の仕様に関する疑問

何度も書いているように、このブログの記事は、HTML を直接ガシガシ書いています。

そうやって、日常的に HTML を書いていると、だんだんと

「HTML が 第 2 の母国語」

みたいな、錯覚を覚え始めたり。──同じような事を、Web デザイナやプログラマも思うのだろうな、と想像します。

で、そこまで慣れ親しんでくると、ちょっとした細かい点が気になってきます。(X)HTML の仕様の中で、「何で こうなっているの?」と。

──と言っても、そんなに深い話ではなくて……。

日本語で言うところの、「はははははじょうぶだ」や「にわにはにわにわとりがいます」、「ぼくははてなならなんでもすきだ」などの、重複に感じるイライラさ、みたいな感じ。

今回は、XHTML1.0 Strict に話を限定して、「何で こう書くの?」とか「コレは何故ダメなの?」と言った話題を書いてみます。

例によって、仕様書も ろくに見ずに、テキトーに書いているので、間違っていたら済みません!(指摘よろ)

script と img

「それを言うのはお前で100万人目だ!」(by. 絶望先生: 『100万回言われた猫』)──なネタですが……。

こっちは正しいのに:

<img src="hoge.jpg" alt="alt の内容" />
<script type="text/javascript" src="fuga.js"></script>

これはダメ:

<img src="hoge.jpg">alt の内容</img>
<script type="text/javascript" src="fuga.js" />

──というのがイライラ。

まぁ、「空要素タグ」か どうか、ということを把握しておけば間違いはないのですが、なんとなく直感に反する感じ。

dl dt dd

こっちは、自分の認識があっているか、自信がないですが……。

たとえば、こういった定義リストが あったとして:

<dl>
<dt>定義 1 のタイトル</dt>
<dd>定義 1 の中身</dd>
<dt>定義 2 のタイトル</dt>
<dd>定義 2 の中身</dd>
</dl>

「タイトル」と「中身」は一対一で対応している、と思いますよね。つまり、こんな感じだと:

[dl]
|
+--[dt]--[dd]
+--[dt]--[dd]

──しかし、実際は上のようなツリー構造には なっていません。こうですね:

[dl]
|
+--[dt]
+--[dd]
+--[dt]
+--[dd]

要するに、dtdd は「dl 要素の直下にある」というだけの関係です。

なので、こう書いても問題ありません:

<dl>
<dt>定義 1 のタイトル</dt>
<dt>定義 2 のタイトル</dt>
<dd>定義 1 の中身</dd>
<dd>定義 2 の中身</dd>
</dl>

そのあたりが気持ち悪い自分は、こうやって定義したりします:

<div class="define">
<dl>
<dt>定義 1 のタイトル</dt>
<dd>定義 1 の中身</dd>
</dl>
<dl>
<dt>定義 2 のタイトル</dt>
<dd>定義 2 の中身</dd>
</dl>
</div>

または、ulli で書いています:

<ul class="define">
<li>定義 1 のタイトル
<ul>
<li>定義 1 の中身</li>
</ul>
</li>
<li>定義 2 のタイトル
<ul>
<li>定義 2 の中身</li>
</ul>
</li>
</ul>

うーん、このあたり、ベストプラクティスは あるのでしょうか……。

MT タグ

これも「100 万回」シリーズですが……。こんなコードもイライラ:

<a href="<$MTEntryPermalink$ encode_url="1">">
<$MTEntryTitle encode_html="1"$>
</a>

──え、どこが? と言う人も多いと思いますが……。

<>"" が、ネストネストしているのが気分悪い。

そもそも、MT タグなんて独自タグなんだから、(X)HTML を真似る必要は無かったと思いますね。

たとえば、こんな書き方もサポートしたらいいのに(それ Plu):

<a href="{MT:EntryPermalink encode_url="1"}">
{$MT:EntryTitle encode_html="1"$}
</a>

まとめ

──え、もう終わり? という感じですが、書いている内に長くなったので、これくらいに します。

全然、情報を追いかけていないですが、HTML5 や XHTML2.0 では、どうなるんでしょうね? もっと、正しい (X)HTML を誰でも書けるようになると、良いですね。