HTML講座 / divとspanはいつ使うのか

divとspanは、それ自体では特別な意味を加えずに内容をまとめる汎用要素です。段落などを含むまとまりにはdiv、文章の一部分にはspanを使えます。適切な意味を持つ要素がある場合は、まずその要素を検討します。

divとspanの違い

divは段落、リスト、カード全体などのフローコンテンツをまとめられます。spanは文中のテキストや強調など、記述コンテンツをまとめるための要素です。初期状態では前者がブロック、後者がインラインとして表示されますが、CSSで表示方法は変えられます。

ただし「改行されるか」だけで選んではいけません。spanの中にpやdivを入れられるようになるわけではありません。ページ上の役割がある領域なら、セマンティック要素を先に検討します。

装飾が必要な範囲だけをまとめる

次のHTMLを文書のbodyへ、CSSをhead内のstyleまたはCSSファイルへ入れます。カード全体は枠で囲まれ、価格部分だけ色と太さが変わります。

<div class="product-card">
  <h2>Travel mug</h2>
  <p>Price: <span class="price">$15</span></p>
</div>
.product-card {
  padding: 16px;
  border: 1px solid #dadada;
}
.price {
  color: #075cb4;
  font-weight: 700;
}

CSSなしでも製品名は見出し、価格は段落として残ります。色が変わらない場合はclass="price"とCSSの.priceを比較してください。先頭の点はCSSのクラスセレクターを表すもので、HTMLのクラス名には含めません。

意味のある要素を優先する

主要な移動はnav、独立した記事はarticle、押して処理を実行する操作はbuttonなどを検討します。クリックできるようにしたspanが、自動的にボタンの意味やキーボード操作を持つわけではありません。ボタンの種類はbuttonとフォーム部品で扱います。

一方、この価格の装飾のように特別な意味を追加する必要がなければspanで十分です。CSSクラスを保ちながら、役割に合う別の要素に変えることもできます。

内容モデルとdisplayを混同しない

フローコンテンツ、記述コンテンツという分類は、HTMLでどの内容を入れられるかに関する規則です。CSSのdisplayは配置上の表示方法です。span { display: block; }としても、段落を中に入れることが適切になるわけではありません。

<!-- Nonconforming: a paragraph inside span -->
<span class="card"><p>Product description</p></span>
<!-- A wrapper that permits the paragraph -->
<div class="card"><p>Product description</p></div>

誤った断片と修正例は別々に比較します。見た目が整っただけで構造も直ったと判断せず、目的に合う包みへ変えます。spanとdivの定義で許可される内容を確認できます。

よくある使い過ぎを見直す

すべての領域をdivだけで作る必要も、装飾用の包みに意味の合わない要素を割り当てる必要もありません。見出しらしく装飾したspanは見出しではありません。まず内容と操作の役割を決め、必要な装飾のためだけに汎用の包みを追加すると、余分な入れ子を減らせます。

같은 카테고리의 다른 글
HTML講座 / ol・ul・dlと入れ子のリスト

HTML講座 / ol・ul・dlと入れ子のリスト

順序付きリスト、箇条書き、用語と説明のリストを使い分けます。番号の開始位置や逆順表示、リスト項目の中にサブリストを置く正しい構造も学びます。

HTML講座 / テキストの意味を表すem・strong・引用・コード

HTML講座 / テキストの意味を表すem・strong・引用・コード

emとstrong、qとblockquote、abbr、code、kbdの違いを学びます。太字や斜体という見た目ではなく、文章中の役割に合わせて要素を選ぶ方法を説明します。

HTML講座 / 複数ページで小さなWebサイトを作る

HTML講座 / 複数ページで小さなWebサイトを作る

ホーム・紹介・問い合わせ練習の三ページを作り、共通メニューと現在位置を設定します。フォームは送信値の確認用とし、相対リンク、入力制約、キーボード、文法を点検します。

HTML講座 / audio・video・iframeでメディアを埋め込む

HTML講座 / audio・video・iframeでメディアを埋め込む

音声、動画、外部文書の埋め込みを学びます。字幕ファイル、代替リンク、画面幅への対応と、ファイル形式や提供元の制限による読み込み失敗の確認方法も説明します。

HTML講座 / required・文字数・範囲で入力値を検証する

HTML講座 / required・文字数・範囲で入力値を検証する

必須入力、文字数、数値の範囲と刻み、メール形式の制約を学びます。境界値を試し、ブラウザーの案内とサーバー側の検証を分けて考える方法も説明します。

HTML講座 / placeholderと入力中も残る案内文を付ける

HTML講座 / placeholderと入力中も残る案内文を付ける

label、placeholder、valueの違いを学びます。inputとtextareaの例、aria-describedbyによる説明の関連付け、フォームデータで送られる値の確認方法も紹介します。

HTML講座 / labelとinputを正しく関連付ける

HTML講座 / labelとinputを正しく関連付ける

labelのforとinputのidを対応させる方法を学びます。idと送信時のnameの違い、重複IDの問題、placeholderがラベルの代わりにならない理由も説明します。

HTML講座 / figureとfigcaptionで図と説明をまとめる

HTML講座 / figureとfigcaptionで図と説明をまとめる

図とキャプションを一つのまとまりとして表す方法を学びます。altとキャプションの役割、出典の示し方、figureを使わなくてもよい場面も説明します。

HTML講座 / srcset・sizes・pictureでレスポンシブ画像を作る

HTML講座 / srcset・sizes・pictureでレスポンシブ画像を作る

同じ構図の解像度選択と、画面幅に応じた構図変更を区別して学びます。w記述子、ピクセル密度、currentSrcによる確認方法と、キャッシュが比較に与える影響も解説します。

HTML講座 / タイトル・説明・言語・文字コードを設定する

HTML講座 / タイトル・説明・言語・文字コードを設定する

title、meta description、charset、viewportとhtmlのlangを整理します。タブと本文の違い、文字化けの調査、検索結果の説明が必ず採用されるわけではない点も学べます。