省略してるのは属性名という真実?
これまた知らなくても特に問題にならない些細なことです。って言いながらこうやって書いてるということは!・・ということは!??・・そういうことです??
ていう感じのどーでもいいと感じる人には本当にどうでもいいことなんですよ。
HTMLの属性
属性とは何ぞや?な人はどうかスルーしてください。ご存知の人は改めて・・
素の要素の状態では成しえない能力をプラスできる優れもの。そう、要素の開始タグに設定できる強力な機能増幅記述です。要素っていうキャラクターが手にすることができる武器的な感じ。
もひとつこちらも。
Webデザイナーなあなたなら、既にいやというほど属性を使いこなしてるはず。
真偽属性
めちゃくちゃ沢山あり過ぎて訳がわからなくなって、エディターのコードヒントに頼りっきりやったり、その都度調べて制作している人も多いはず。
そんな多くの属性の中には、真偽属性っていう種類の属性もあったします。
具体的には、
フォームのパーツでよく使う checked selected required や、
video要素に設定する loop、autoplay、controls、muted
などなど。
あ、それは使いますなぁ!っていう感じだと思いますが、真偽って一体何が?っていうのは、調べてもらえればすぐに回答がいっぱい出てくるので少し割愛させていただきます。
別名があって、真偽値属性とか論理属性、論理型属性、ブール属性、ブール値属性、ブーリアン属性とかと言うこともあります。
まぁ、難しい話は置いといて。
要は属性の書式として[属性名="属性値"]っていう書き方をしなくてもいいやつです。そう、例の省略した記述でO.K.な属性のことです。
XHTMLという厳しい仕様
HTML5が勧告されて各ブラウザーがその仕様に沿ってアップデートされていく以前、確か2000年頃に勧告になってから永らくWebスタンダードとして君臨したXHTMLというHTMLのバージョンがあります。このXHTMLってかなり厳格な仕様で、元々HTML 4.01までバージョンの推移を経てきたものにXMLっていう別の言語の仕様を組み込んだ内容になってて、まぁ、あれですね・・いろいろできた方がいいやん!的な感じでW3Cが発展させていこうとしたんじゃないかと。
この辺りは一度HTMLの歴史とやらを調べていただくとよく解るはずです。HTML5が勧告になる2014年頃まで本当に多くのWebサイトがXHTMLで作られて公開されることになりました。今でもそのままのページで公開されてるホームページは多くて、ブラウザーでソースコードを覗いて宣言文を見ればすぐに判ります。
で、その厳格なXHTMLでは「タグ名や属性名はすべて小文字で記述する」っていう手厳しい仕様があったり、真偽属性の書式も省略せずにちゃんと[属性名="属性値"]って書かないとダメ!なんて言われてました。
つまり、属性名と同じ文字列の値しか設定できないのに省略しないでっていうことで、[checked="checked"]や[selected="selected"]って書いてたんですよ!
あと空要素の meta、img、input、br、hr なんかは <meta />、<img />、<input />、<br />、<hr />、なんていうワケのわからない記述をしてたり、宣言文もやたら長々と書かないといけなかったり、ほかにもいっぱいありますが、この上なく面倒くさかったんですよ。懐かしい~~・・
HTML5、HTML Living Standard がスタンダードになった今、本当に楽ちんになりました。今Webデザインの勉強をしている人はすごくラッキーです!なのにコーディングをしない、なんてあり得ませんよ!もったいなさ過ぎて。コーダーじゃなくてもWebに関わるからにはコードのことは理解しておいてね。
省略できる属性の記述
HTML4、HTML 4.01の後継となったHTML5、5.1、5.2、そして Living Standard ではXHTMLのようなややこしくて煩わしい記述仕様ではなくなりました。
そう、HTML4の時のように真偽属性は省略して書いても大丈夫という簡易型の書式でO.K!となりました。
もうこれは言わずもがなですね。みなさんご存知の書き方で、
<input type="radio" name="yes-no" checked> はい
<input type="radio" name="yes-no"> いいえな感じですね。
省略してるのは属性値じゃなくて属性名?
これまでずーーっと引っ掛かってたことをようやく体系的に調べてまとめておこうという気になりました。ここにきてなんでいきなり?・・ではないんですよ。授業でもたまに気が向いたら、
「この属性は属性名だけ書いて設定できます。でも本当は省略してるのは属性値じゃなくて属性名の方なんですけどね・・これは覚えなくても大丈夫ですが・・」とお伝えすることがあります。
本題
最初にリンクで紹介したGoogleが提供してくれている開発者向けの学習・情報サイト~web.dev の「属性」のページにも書いてありましたが気がつきましたか?
ブール値は省略するか、空の文字列に設定するか、属性の名前にすることができます。
おや?“属性の名前にすることができる”とな?これは一体・・
残念ながら、MDNの方には省略できる記述に関してそこまで言及してませんでした。
HTML Living Standard の仕様でも詳細がはっきりしません・・
HTML5の方も同じ内容です。
確かに「論理属性 省略」や「真偽属性 省略」で検索すると web.dev の解説と同じく「属性値を省略してもO.K.」とか「値は省略するか、属性名と同じ名前を記述」といった解説をしているガイダンスページは山のように出てきます。
じゃあ、もうそういうことでいいんじゃないの?!って、私自身もそうなってた時が確かにありました。ありました、が・・かなり以前、この仕様を調べてる時にふと出会ったこんな内容のことが頭に残ってたからかな?
恐らくHTML5 以降の内容に基づいて書かれたいろんな人の多くの間違った説明(のように感じられる文言)にいちいちすんごく引っ掛かるようになりました。
管理者さん、今も閲覧できる状態で残しておいてくださってて感謝です!
Googleの優秀なデベロッパーたちが説明することさえも、本当に合ってるのかなと。書籍を紐解いてみても、たとえばHTML5の検定試験用のガイドブックにさえ「属性値を省略」という怪しい記述を目にするようになって、ますます真実を確かめたいという衝動に駆られるようになりました。
HTML 4.01 の時の仕様をまとめてくださっている下記ページでは「論理型の属性は、属性名を省略し属性値だけを記述することができます。」となっています。
確かに下記のW3C仕様の翻訳版でも論理型属性の説明で「HTMLでは、論理型属性は 最小化書式で現れてよい。すなわち、属性の 値 が要素の開始タグに単独で現れてよい。」とあります。
元々、昔々IBMが開発したGML(Generalized Markup Language)をベースにその後継として開発されたSGML(Standard Generalized Markup Language)という言語が今のHTMLの原型で、Living Standard がスタンダードになった今もその多くのリソースが活かされていることを知ると!いよいよ本当のところが見えてきた気がしませんか?
明らかにその仕様はHTML 4.01までは引き継がれていたようですが、XHTMLの厳格仕様を経て、HTML5へと進化を遂げていく時にどうやら独自の言い回しで誰かが理解しやすい捉え方に変えてしまったような気がします。
補足
HTML5の仕様では、空属性構文というのがあって、alt="" のような値が空の場合は alt とだけ(属性名だけ)を記述すれば空の値を指定したことになるという仕様もあります。どうやらこの仕様が真偽属性にも適用された形になっているみたいだということも判明しました。
Living Standard の方もこれを継承しているようです。
属性は開始タグの内部に置かれ、"="文字で区切られた名前と値で構成される。属性値がASCII空白文字または任意の" ' ` = < >を含まない場合、属性値は引用符で囲まないままにできる。そうでなければ、単一引用符または二重引用符のいずれかを使用して、引用符で囲む必要がある。値が空文字列の場合、"="文字とともに値を完全に省略できる。
これは例えば、上記のHTML5やLiving Standardの仕様を見ていただければ明記されているとおり、checked="checked"の場合、checked=""と同等とあり、すなわち checked だけで良いという解釈だと思います。
まとめ
というこで、属性の省略に関して自分なりに深堀りしてみた内容でしたが、いかがでしたか?
最新の HTML Living Standard の仕様に記されているように、真偽属性(論理属性、ブーリアン属性)は属性値を省略して属性名だけを設定してもいいというのは現状間違っている訳ではないということが判りました。
しかしながら、その進化の過程で都合よく仕様変更されたことは明白で、元々は省略してるのは属性値じゃなくて属性名の方やった~!という真実も見えてきました。
この記事を読んでくださったWebデザイナー、コーダーのみなさん、将又これから勉強を始める人や、今まさに勉強中という人で「自分はこう解釈するよ!」っていうご意見や、単にご覧いただいたご感想でも疑問でも何でも結構です、コメントやお問い合わせいただければウレしいです!
ジョージ・ブール
ちなみに真偽属性の別名のブーリアン属性、のブーリアンって何?どういう意味??・・って気になり出したので調べてみました。確かプログラミングの方でブール値とかいうのを見た気もしますが。
よくわかりませんねぇ・・・ブール(代数)ってあるけれども?
で、ブール(bool)の意味は・・
「かっこいい」って!?どいこと?

どうやらこっちが正解っぽい?ブールさんって!人の名前からやったん??
