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講座 / 要素・タグ・属性とHTMLの基本文法

HTML講座 / 要素・タグ・属性とHTMLの基本文法

開始タグと終了タグ、空要素、属性、入れ子、コメントの書き方を学びます。真偽属性や特殊文字の注意点と、ブラウザー表示だけでは判断できない文法エラーも説明します。

HTML講座 / HTMLのエラーを探して文書を検査する

HTML講座 / HTMLのエラーを探して文書を検査する

Nu HTML Checkerの使い方と、重複IDを含む失敗例の修正を学びます。エラー位置の読み方、保存したファイルとサーバーの出力、構文と実際の操作の違いも解説します。

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

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

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

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

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

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

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

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

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

HTML講座 / fieldset・legend・autocompleteでフォームを説明する

HTML講座 / fieldset・legend・autocompleteでフォームを説明する

関連する入力をfieldsetでまとめ、legendで質問を示す方法を学びます。ラジオグループを独立させるnameと、自動入力の目的を示すautocompleteの違いも解説します。

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

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

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

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

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

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

HTML講座 / img・alt・画像サイズを指定する

HTML講座 / img・alt・画像サイズを指定する

imgのsrc、alt、width、heightの役割を学びます。画像の配置場所と相対パス、装飾画像の代替テキスト、表示幅とファイル容量の違いも説明します。

HTML講座 / textarea・select・option・buttonを使う

HTML講座 / textarea・select・option・buttonを使う

複数行入力、選択メニュー、送信・リセット・通常ボタンを使い分けます。表示ラベルと送信値、初期値と現在値を実際のフォームで比較する方法も紹介します。