HTMLタグ<div>と<span>の違いは何ですか?


543

私はの使用を示すいくつかの簡単な例をお願いしたいと思います<div><span>。ページのセクションをidまたはclassでマークするために両方を使用するのを見てきましたが、一方が他方よりも優先される場合があるかどうか知りたいです。

回答:


582

つまり、意味的に使用するには、ドキュメントのセクションをラップするためにdivを使用し、テキストや画像などの小さな部分をラップするためにスパンを使用する必要があります。

例えば:

<div>This a large main division, with <span>a small bit</span> of spanned text!</div>

インライン要素内にブロックレベルの要素を配置することは違法であることに注意してください。

<div>Some <span>text that <div>I want</div> to mark</span> up</div>

...違法です。


編集:HTML5以降、一部のブロック要素は一部のインライン要素の内部に配置できます。かなり明確なリストについては、こちらのMDNリファレンスを参照してください。上記は、<span>フレージングコンテンツのみを受け入れ、<div>フローコンテンツであるため、依然として違法です。


あなたはいくつかの具体的な例を求めました、それで私のボウリングのウェブサイト、BowlSKから取ったものです

<div id="header">
  <div id="userbar">
    Hi there, <span class="username">Chris Marasti-Georg</span> |
    <a href="/edit-profile.html">Profile</a> |
    <a href="https://www.bowlsk.com/_ah/logout?...">Sign out</a>
  </div>
  <h1><a href="/">Bowl<span class="sk">SK</span></a></h1>
</div>

どうしたの?

ページの上部に、「ヘッダー」という論理セクションがあります。これはセクションなので、適切なIDを持つdivを使用します。その中に、ユーザーバーと実際のページタイトルという2つのセクションがあります。タイトルには適切なタグを使用しますh1。セクションであるユーザーバーはでラップされますdiv。その中で、ユーザー名はで囲まれているspanので、スタイルを変更できます。ご覧のとおりspan、タイトルに約2文字も含めています。これにより、スタイルシートの色を変更できます。

また、HTML5には、記事、セクション、ナビゲーションなどの一般的なページ構造を定義する幅広い新しい要素セットが含まれていることにも注意してください。

HTML 5ワーキングドラフトのセクション4.4はそれらをリストし、それらの使用法についてのヒントを与えます。HTML5はまだ機能する仕様であるため、「最終版」はまだ何もありませんが、これらの要素のいずれかがどこにでもあるかどうかは非常に疑わしいです。古いバージョンのIEでこれらの要素にスタイルを設定する場合に使用する必要があるJavaScriptハックがあります。これらの要素をdocument.createElementソースで指定する前に、使用する各要素を1つ作成する必要があります。これを処理するライブラリがたくさんあります-クイックGoogle検索でhtml5shivが見つかりました


5
クリス、あなたのテキストに間違いがあります:スパンのスタイルを「ブロック」に設定したとしても、それをブロックレベルの要素の周りにラップすることは依然として違法です!
Konrad Rudolph、

7
意味を持たないためdivspan意味的に使用できません。divは意味のないジェネリックブロックレベルの要素spanですが、は意味のないジェネリックインライン要素です。
apnerve 2011年

9
@apnerveブロックとインライン要素のセマンティクスは、構文解析の観点からも、「このソースを読んで何が起こっているのかを理解する」観点からも、ドキュメントフローに対して異なる意味を持っています。
Chris Marasti-Georg、2011

20
「セマンティクス(ギリシャ語のsēmantiká、複数のsēmantikósから)[1] [2]は意味の研究です。これは、単語、句、記号、記号などの記号と、それらが表すもの、それらのデノタの関係に焦点を当てています」記号「div」と「span」は、間違いなく何かを表しています。HTML仕様には、ブロック要素とインライン要素が何を表すのかについての細かい内訳があります。 w3.org/TR/html401/struct/global.html#h-7.5.3。HTML5ドラフトでは、グループ化コンテンツとテキストレベルのセマンティクスという別のグループに分類しています。 dev.w3.org/html5/spec/Overview.html
Chris Marasti-Georg

16
「divはブロック要素で、spanはインラインです。」で私を迎えました。:)
Matical

390

完全を期すために、次のように考えてみてください。

  • HTMLには多数のブロック要素(前後の改行)が定義されており、多数のインラインタグ(改行なし)があります。
  • しかし、現代のHTML内のすべての要素を持っていることになっている意味は<p>段落で、<li>ときに我々ではないような古い時代に-リスト項目、などであり、我々は右の目的のために右のタグを使うことになっています<blockquote>コンテンツが引用かどうかを使用してインデントされます。
  • それで、あなたがしようとしていることに意味ないとき、あなたは何をしますか?何もありません意味 400ピクセル幅の欄には、ありますか?テキストの列の幅を400pxにしたいのは、デザインに適しているからです。
  • このため、彼らはHTMLにさらに2つの要素を追加しました。それは、一般的な、または無意味な要素<div><span>、それ以外の場合、人々は意味を持つ要素の悪用に戻るためです。

20
これは適切な説明です。なぜこれが答えとして受け入れられなかったのかしら。
apnerve

16
ページの奥にあるため
Jason Sebring 2012

12
良い答えが受け入れられなかったからといって、投票できないというわけではありません。わかりやすく説明するための+1。
Cyber​​Fonic 2012

8
わかりましたが、div要素とspan要素の違いを説明していないため、元の質問には答えません。
tehvan 2017

216

ここにはすでに適切で詳細な回答がありますが、視覚的な例はありません。そのため、簡単な説明を次に示します。

divとspanの違い

<div>This is a div.</div>
<div>This is a div.</div>
<div>This is a div.</div>
<span>This is a span.</span>
<span>This is a span.</span>
<span>This is a span.</span>

<div>はブロックタグ<span>ですが、インラインタグです。


16
CSSがなくても、レイアウトへの影響は異なります!これが私がこれを見たのを見たのはこれが初めてです!
GreenAsJade 2014

2
それは非常に迅速にそのdiv要素は、次の行を持って答えるので、私はこの答えをupvote、ありがとう
スクリプトキティ

4
私のような初心者を視覚的に説明してくれてありがとう:-)
Aritra Chatterjee 2017

73

<div>ブロックレベルの要素で<span>あり、インライン要素です。

インラインテキストで何かを実行したい場合<span>は、改行が導入されないため、この方法が適しています<div>


他の人が指摘しているように、これらのそれぞれに含まれる意味論がいくつかあります。最も重要なのは、a <div>がドキュメントの論理的な分割を意味し、ドキュメントのセクションまたは何か、laのようなものです。

<div id="Chapter1">
   <p>Lorem ipsum dolor sit amet, <span id="SomeSpecialText1">consectetuer adipiscing</span> elit. Duis congue vehicula purus.</p>
   <p>Nam <span id="SomeSpecialText2">eget magna nec</span> sapien fringilla euismod. Donec hendrerit.</p> 
</div>

1
divはインライン(display:inline;)にすることができ、スパンの場合はその逆になりますが、これが最良の説明です。それらはラッパータグであり、スパンは通常、文章や強調表示テキストに使用され、divはセクションに使用されます。
ロス

3
CSSを使用してこれを変更できることは承知していますが、それによって別のテクノロジーが導入されます。HTMLはそれ自体で独立することができ、その場合、divはインラインではなく、純粋な形式であるようには意図されていません。
Jason Bunting

さまざまな状況でHTML要素を適切に使用する方法を説明した優れた本はありますか?
mko

@mko-正直なところ、わかりません。経験は最良の教師であります。結局のところ、「正しい」答えはありません。それ自体、状況と目的に合ったものが存在するだけです。;)
Jason Bunting、2015年

30

本当に重要な違いはすでにクリスの答えで述べられています。ただし、その影響は誰にとっても明白ではありません。

インライン要素として、<span>他のインライン要素のみを含めることができます。したがって、次のコードは間違っています。

<span><p>This is a paragraph</p></span>

上記のコードは無効です。ブロックレベル要素をラップするには、別のブロックレベル要素(など<div>)を使用する必要があります。一方、<div>ブロックレベルの要素が有効な場所でのみ使用できます。

さらに、これらのルールは(X)HTMLで修正されており、CSSルールの存在によって変更されることはありません。したがって、次のコード間違っています!

<span style="display: block"><p>Still wrong</p></span>
<span><p style="display: inline">Just as wrong</p></span>

7
@ファイザンそれはどのように関連していますか?それも間違っています:すべてのブラウザーがこのマークアップに対して一貫した結果を生成するわけではありません。使用するdoctype(およびブラウザ)によっては、まったく実行されず、検証エラーが発生する場合があります。
Konrad Rudolph

一部のブラウザは無効化されたコードを実行するのに十分効率的です。それが実行された理由です。HTMLに適した検証ツールを勧めてくれませんか?
ファイザン、2013年

6
「あなたがすることは保守的に、あなたが受け入れることは寛大に」en.wikipedia.org/wiki/Robustness_principle
jldupont 2013年

5
スープ食堂へようこそ。無効なHTMLを食べるブラウザーは、高度に最適化されたまさにその理由ですが、うるさいHTMLパーサーは標準ではありません。その塩の価値があるすべてのブラウザ(つまり、「HTML」と互換性がある)は、ある種の「スープ」タイプ(内部)ライブラリを使用して、口当たりを良くします。
応答

8

「ブロック要素」の重要性は暗示されていますが、明示的には述べられていません。すべての理論を無視した場合(理論は良い)、次は実際的な比較になります。以下:

<p>This paragraph <span>has</span> a span.</p>
<p>This paragraph <div>has</div> a div.</p>

生成する:

This paragraph has a span.

This paragraph

has
a div.

だけでなく、表示されていることすべきである div要素がない使用済みのインラインも、それは単に影響を与える希望を生成しません。


6

他の回答で述べたように、デフォルトでdivはブロック要素としてレンダリングされますが、spanそのコンテキスト内でインラインでレンダリングされます。しかし、どちらにも意味的な価値はありません。これらは、コンテンツの特定のビットにスタイルとIDを適用できるようにするために存在します。スタイルを使用すると、aのdivように振る舞ったり、spanその逆も可能です。

の便利なスタイルの1つdivinline-block

例:

  1. http://dustwell.com/div-span-inline-block.html

  2. CSS表示:インラインvsインラインブロック

私はinline-blockゲームWebプロジェクトで大成功を収めてきました。


3
それらに意味的価値がない場合、それらは1つだけになります。他のインラインスパン-一つは、ブロックレベルの分割であることを意味する
クリスMarasti -ゲオルグ・


3

スペイン語を少し知っているなら、このページを見てください。どこが適切に説明されていますか。

ただし、高速な定義divは、セクションを分割するためのものであり、のspanような別のブロック要素内の要素にある種のスタイルを適用するためのものdivです。


スペイン語を知る必要はありません。英語版は<span>です-HTML | MDN
user34660 2016年

3

あるようになったのかだけに、いくつかの歴史的背景を追加したいspandiv

の歴史span

1995年7月3日、Benjamin CW Sittler は、特定のテキストブロックにスタイルを適用するための一般的なテキストコンテナタグを提案しました。スタイルシートと組み合わせて使用​​する場合を除いて、レンダリングは中立です。読みやすさ、つまり意味についての議論があります。Bert Bosは、要素の拡張性の性質について、class属性(都市、人物、日付などの値)を通じて言及しています。Paul Prescodは、両方の要素が悪用されることを心配しています。彼は、「新しい要素はすべて古い要素の上にあるべきだ」と述べ、「セマンティクスのないタグを作成すれば、どこでも間違いなく使用できる」というテキストに反対しています。著者には、文書のセマンティクスを適切にタグ付けするように強制する必要があります。私たちは編集ベンダーにその選択を彼らのインターフェースで明示するように強制しなければなりません。」

-ソース(w3 wiki)

導入するRFCドラフトからspan

まず、他の要素が適切でない場合に、LANGおよびBIDI属性を保持するための汎用コンテナが必要です。そのためにSPAN要素が導入されています。

-ソース(IETFドラフト)

の歴史div

DIV要素を使用して、HTML文書を部門の階層として構造化できます。

...

CENTERは、HTML 3.0 DIV要素のサポートを追加する前にNetscapeによって導入されました。広く普及しているため、HTML 3.2でも保持されています。

HTML 3.2仕様

一言で言えば、どちらの要素も、より意味論的に一般的なコンテナの必要性から生まれました。Spanは、<text>テキストのスタイルを設定する要素のより一般的な代替として提案されました。Divは、ページを分割する一般的な方法として提案され、<center>コンテンツを中央揃えにするためにタグを置き換えるという追加の利点がありました。ページ区切りとしての歴史があるため、Divは常にブロック要素でした。Spanは常にインライン要素でしたが、その本来の目的はテキストのスタイリングでしたが、今日のdivとspanはどちらも、それぞれデフォルトのブロックとインラインの表示プロパティを持つ一般的な要素になりました。


2

HTMLには、コンテンツに構造またはセマンティクスを追加するタグがあります。たとえば、<p>タグは段落を識別するために使用されます。別の例は、<ol>順序付きリストのタグです。

上記のようにHTMLに適切なタグがない場合は、通常、<div>および<span>タグが使用されます。

<div>タグは、前と後の両方で改行を有する文書のblocklevelセクション/分割を識別するために使用されます。

divタグを使用できる場所の例は、ヘッダー、フッター、ナビゲーションなどです。ただし、HTML 5では、これらのタグはすでに提供されています。

<span>タグは、文書のインラインセクション/分割を識別するために使用されます。

たとえば、spanタグを使用して、インラインピクトグラフを要素に追加できます。


2

基本的に、彼ら自身も機能を実行しません。タグだけで機能について特定しているわけではありません

CSSを使用してのみカスタマイズできます。

今あなたの質問に来ています:

SPANタグといくつかのスタイリングは、HTMLの段落内などの行内に保持する場合に役立ちます。これは、HTMLの行レベルまたはステートメントレベルの一種です。

例:

<p>Am writing<span class="time">this answer</span> in my free time of my day.</p>

前述のDIVタグ機能は、スタイリングでのみ表示でき、HTMLコードの大きなチャンクを保持できます。

DIVはブロックレベルです

例:

    <div class="large-time">
    <p>Am writing <span class="time"> this answer</span> in my free time of my day. 
    </p>
    </div>

どちらも、要件に基づいて、使用する時間とケースがあります。

答えが明確であることを願っています。ありがとうございました。


私が求めていた理想的な答え。
PHPFan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.