第11章 属性値はなぜ省略できるのか
この章では、HTML の属性値省略が「雑でも通るから」ではなく、属性の種類と文脈に応じて条件つきで許された設計だと見ます。ゴールは、disabled や checked のような書き方を見たときに、「短く書ける便利な癖」と受け取るのではなく、「何が省略され、何が省略されていないのか」を区別して説明できるようになることです。
前章では、コメントのような地味な構文にも境界規則があることを見ました。この章では逆に、HTML がどこを意図的に省略可能にしているかを扱います。次章では、こうした細かな規則を含む HTML 仕様書が誰のために書かれているのかへ進みます。
11.1 省略できる属性と、できない属性は同じではない
HTML の属性を見ると、すべてが name="value" の形で厳密に並んでいるように見えます。しかし実際には、属性にはいくつか種類があります。その違いが、省略の可否にそのまま現れます。
もっとも分かりやすいのはブール属性です。
<input disabled>
<input disabled="disabled">
<input checked>
disabled や checked では、問われているのは「どんな値か」よりも「その状態があるかどうか」です。ブール属性では、属性が存在すること自体が true を表します。だから属性名だけで意味が成立します。ここで省略されているのは属性そのものではなく、値を書き下す形です。
ここに有名な落とし穴があります。disabled="false" と書いても、要素は無効化されたままです。 ブール属性では「存在するかどうか」だけが意味を持つので、false という値を入れても「属性が存在する」事実は変わらないからです。無効化をやめたいなら、属性ごと取り除くしかありません。値で真偽を切り替える、という直感がここでは通用しないわけです。
一方で、src や href のように、何を指すかが値そのものに依存する属性はそうはいきません。<img src> だけでは、どの画像を参照するのか決まりません。つまり、HTML は何でも短くしてよいのではなく、意味が保てる場面だけを選んで省略可能にしています。
11.2 引用符の省略にもかなり狭い条件がある
省略という話で、もう 1 つよく挙がるのが引用符です。HTML では、属性値のまわりの " や ' を省略できる場面があります。
<input type=text>
<a href=/about>
ただし、ここでも「いつでも省ける」わけではありません。空白や特定の記号を含むと、値の境界が分からなくなります。つまり引用符の省略は、HTML が雑に許している近道ではなく、「この文字列なら境界を見失わない」という条件つきの短縮記法です。
たとえば、次のような値では同じ感覚では書けません。
<a title=会社概要ページ>
この場合、空白を含む時点で値の切れ目が曖昧になります。人間には 1 つの題名に見えても、パーサーにとってはそうではありません。だから引用符が必要になります。
この条件を外してしまうと、第10章で見たコメントの境界規則と同じ問題が起きます。パーサーが「どこまでが値なのか」を安定して判断できなければ、後ろに続く属性や要素の解釈まで崩れます。ここでも HTML が守っているのは、見た目の簡便さより先に、境界を読み取れることです。
11.3 書きやすさを残しながら、境界は壊さない
では、なぜ HTML はこうした省略を残したのでしょうか。背景には、HTML が長く手書きの文書として使われてきた事情があります。毎回すべてを冗長に書かなくても済むようにして、著者の負担を減らしたい。その意図はたしかにあります。
その出自も関係しています。HTML はもともと SGML(1986 年に ISO 規格になった、文書をマークアップするための言語)をベースに作られました。タグや引用符を省略できる仕組みの多くは、この SGML から受け継いだものです。つまり HTML の省略可能性は、その場の思いつきではなく、文書記述言語の系譜を引いた性質でした。
しかし同時に、HTML は好き勝手な省略を許してはいません。ブール属性にはブール属性の、省引用には省引用の条件があります。つまり HTML がしているのは、「短く書けるようにすること」そのものではなく、「意味と境界を壊さない範囲で短く書けるようにすること」です。
この見方を持つと、第9章と第10章とのつながりも見えます。空要素では、要素が持てる内容を分類していました。コメントでは、終端と衝突しないよう境界を守っていました。属性値の省略でも同じで、先にあるのは文法上の条件です。省略可能性は、その条件の内側でだけ成立しています。
11.4 実務では「省略可能」と「省略すべき」を分ける
実務で重要なのは、仕様上省略できることと、普段のコードで省略したほうがよいことを分けることです。たとえば formatter やチーム規約が常に引用符を付けるなら、それは仕様に反しているのではなく、読みやすさと保守性を優先しているだけです。
同じことはブール属性にも言えます。disabled とだけ書いてもよいし、テンプレートや生成規則の都合で別の書き方が出てくることもあります。そこで大事なのは、表記ゆれそのものより、「なぜこの属性では値を省略できるのか」「なぜこの属性ではできないのか」を説明できることです。
この章で言いたいのは、「引用符はいつでも省ける」「HTML は適当でも通る」といった雑な印象の逆です。HTML は著者の負担を減らすための近道を用意しつつ、その近道が文法の条件の内側に収まるよう設計しています。次章では、こうした規則を細かく書き連ねている HTML 仕様書が、そもそも誰のための文書なのかを見ます。