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講座 / figureとfigcaptionで図と説明をまとめる

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

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

HTML講座 / HTML文書の基本構造

HTML講座 / HTML文書の基本構造

doctype、html、head、bodyの役割と、文字コード・文書タイトル・viewportの設定を解説します。ファイルの保存から表示確認、表示されない場合の調べ方まで学べます。

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

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

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

HTML講座 / HTMLとは何か、Webページでの役割を理解する

HTML講座 / HTMLとは何か、Webページでの役割を理解する

HTMLで文書の意味と構造を表す方法を、CSS・JavaScriptとの違いとともに学びます。実際にHTMLファイルを保存して、ブラウザーで確認する手順も紹介します。

HTML講座 / table・tr・th・tdで表を作る

HTML講座 / table・tr・th・tdで表を作る

行と列を持つデータをHTMLの表で表す基本を学びます。見出しセルとデータセル、theadとtbody、横幅が広い表のスクロール方法も紹介します。

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

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

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

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

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

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

HTML講座 / formの構造とGET・POSTによる送信

HTML講座 / formの構造とGET・POSTによる送信

action、method、nameの役割とGET・POSTの違いを学びます。FormDataと開発者ツールを使い、送信対象の値、入力検証、サーバー処理を分けて確認します。

HTML講座 / セマンティック要素でページの領域を分ける

HTML講座 / セマンティック要素でページの領域を分ける

header、nav、main、article、section、aside、footerの役割を学びます。見た目の配置と意味を区別し、複数のナビゲーションを識別する方法も紹介します。

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

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

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