divだらけをやめる — セマンティックHTML(第1回)
見た目は作れる。ただ、自分が書いたHTMLを読み返すと、タグの選び方が雑だと分かる。ここで止まっている人は多いと思います。
HTMLは見た目を作る言語ではなく、意味を伝える言語です。そこが入れ替わっていると、何度書き直しても同じところで雑になります。
Part 1 マークアップ / 第1回。前回:フロントエンドの全体像を掴む 次回:崩れる理由が分かるCSS(近日公開)
そもそもHTMLとは
文書の構造を説明するための言語です。プログラミング言語ではありません。
Wordで文章を書くとき、見出しには見出しスタイル、本文には本文スタイルを当てますよね。あれと同じことを、タグという記号でやります。<h1>と書けば「ここは大見出しです」、<p>と書けば「ここは段落です」という意味になります。
重要なのは、HTMLが意味を伝える担当だという点です。見た目はCSS、動きはJavaScriptが担当します。HTMLで見た目を作ろうとすると、この分担が崩れます。
「見た目は作れるけど、タグの選び方に自信がない」。これを今回で終わらせます。
よくある書き方(Before)
<div class="title">旧車図鑑</div>
<div class="list">
<div class="item">
<div class="name">スカイライン GT-R</div>
<div class="text">1969年発売。</div>
</div>
</div>
見た目はCSSでいくらでも作れます。問題は、このHTMLが何も意味を持っていないことです。
直した書き方(After)
<h1>旧車図鑑</h1>
<ul class="list">
<li>
<article>
<h2>スカイライン GT-R</h2>
<p>1969年発売。</p>
</article>
</li>
</ul>
なぜそうなるか
HTMLは「見た目を作る言語」ではなく「文書の構造を説明する言語」です。構造が正しく書かれていると、次の3者が正しく読めます。
- 検索エンジン — 何が見出しで、何が本文かを判断できる
- スクリーンリーダー — 見出しだけを拾って読み上げ、目の見えない人がページを移動できる
- 未来の自分と同僚 —
div.itemの中身を読まなくても、記事の繰り返しだと分かる
覚えるタグはそう多くありません。まずはこれだけ。
| タグ | 使う場面 |
|---|---|
h1〜h6 |
見出し。レベルを飛ばさない |
p |
段落 |
ul / ol / li |
並列に並ぶもの |
article |
単体で切り出しても意味が通るまとまり |
section |
見出しを持つ意味の区切り |
nav |
ページ間の主要なリンク群 |
header / footer |
冒頭と末尾のまとまり |
button |
クリックして何かが起きるもの |
特に事故が多いのが最後の button です。<div onclick="..."> はキーボードで操作できず、Tabキーで選べません。クリックできるものは button か a にする、と覚えてください。
手を動かす課題
好きな題材で、一覧ページのHTMLを書いてください。CSSはまだ書きません。条件は3つです。
h1はページに1つだけ- 一覧は
ulとliで組む divは「意味はないがCSSのために囲みたい」場所だけに使う
書けたら、Chromeの拡張機能「HeadingsMap」でアウトラインを見てください。見出しがきれいな階層になっていれば成功です。
- □ 見出しレベルを飛ばしていない(h2の次にh4が来ていない)
- □ 画像に
altを書いた(装飾目的ならalt="") - □ クリックできる要素は
buttonかaになっている - □ CSSを全部外しても、文書として読める
次回はCSSの基礎です。このHTMLに、崩れないレイアウトを与えます。
今回の学び
まず、見た目はCSSでいくらでも作れるということ。だからHTMLの良し悪しは見た目では判定できません。判定できるのは、CSSを全部外したときに文書として読めるかどうかでした。
次に、構造は3者に向けて書いていること。検索エンジン、読み上げソフト、そして未来の自分と同僚です。3者とも、書いた本人がその場で見ている画面とは違うものを見ています。
そして、クリックできるものはbuttonかaにすること。これだけは例外なしで覚えてよい規則です。見た目が同じでも、キーボードで操作できるかどうかが変わります。
この記事を共有する
関連記事

一覧と詳細だけのアプリで、フロントエンドの全体像を掴む(第0回)
一覧と詳細だけの小さなアプリを、21回かけて作り切る連載です。第0回では最終回に手元に残るものと、積み上げの順番を先に示します。

ソース解説(5) 文字列を自分で組み立てる場所
このサイトで、HTMLを文字列として自分で組み立てている場所は2つあります。RSSフィードとサイトマップです。 画面に出るページは、部品を組み合わせれば勝手に出来上がります。この2つは違います。1行ずつ並べて、最後に文字 […]

ソース解説(4) 速くしたら、デプロイが止まった
記事のデータは、共用サーバー上のWordPressから取ってきています。この部分は2回作り直しました。 最初は「常に最新を取る」形。速度の問題が出て、キャッシュする形へ。すると今度は、デプロイが止まるようになりました。 […]