display:inlineとdisplay:inline-blockの違いは何ですか?


回答:


1351

視覚的な答え

<span>内の要素を想像してみてください<div>。たとえば、<span>要素の高さを100pxにして赤い枠を付けると、次のようになります。

表示:インライン

表示:インライン

表示:インラインブロック

表示:インラインブロック

表示ブロック

ここに画像の説明を入力してください

コード:http : //jsfiddle.net/Mta2b/

の要素はの要素とdisplay:inline-blockdisplay:inlineていますが、高さを持つことができます。つまり、インラインブロック要素をテキストまたは他の要素内でフローしながら、ブロックとして使用できます。

概要としてサポートされているスタイルの違い:

  • インライン:のみmargin-leftmargin-rightpadding-leftpadding-right
  • インラインブロックmarginpaddingheightwidth

6
素晴らしい直感。唯一の違いは、インライン要素の高さ属性を設定できないことです。
user2316667 14年

7
@ user2316667と幅
オスカーカルデロン

2
@ user2316667と@OscarCalderon:また、インライン要素は垂直マージンとパディングを気にせず、次の要素は同じ行に配置されます(その後の改行はありません)。asのようなブロック要素はpdiv幅全体の線(強制的に改行)を取得しますが、幅/高さおよびすべての水平/垂直のパディング/マージンを尊重します。インラインブロック要素の動作はブロックと同じですが、改行はありません(他の要素を横に配置できます)
S.Serpooshan

1
padding-topとpadding-rightは、インライン要素の表示効果にも影響を与え、混乱を引き起こします。
tomwang1013 2017

2
@ manuman94いいえ、それはそれを意味するものではありません。すべての異なる表示タイプの使用例があります。
splattne 2017年

126

display: inline;文で使用する表示モードです。たとえば、段落があり、1つの単語を強調表示したい場合は、次のようにします。

<p>
    Pellentesque habitant morbi <em>tristique</em> senectus
    et netus et malesuada fames ac turpis egestas.
</p>

<em>要素がありdisplay: inline;、このタグは、常に文で使用されているため、デフォルトで。<p>要素がありdisplay: block;、それが文や文の中で、それは文章のブロックがありますどちらのだから、デフォルトで。

要素には、a またはa またはverticalを含めるdisplay: inline; ことはできません。持つ要素ができてい、と。 あなたが追加したい場合には要素は、この要素を設定する必要があります。これで、要素とその他すべてのブロックスタイル(の一部)にa を追加できますが、それは文(の一部)に配置されます。heightwidthmargindisplay: block; widthheightmargin
height<em>display: inline-block;heightblockinline-blockinlineinline-block


11
正解です。 tl; dr- インライン要素のサイズを変更する場合は、表示タイプとしてインラインブロックを使用できます。
エラーが発生しやすい2013

7
小さな修正:インライン要素は水平マージン(右、左)を持つことできますが垂直マージン(上、下)持つことできません
whyleee 2014

1
display値の1つを選択するときに実行できる/できないことについて述べたので、良い答えです。
ha9u63ar

14

答えで言及されていないことの1つは、インライン要素が行の間で壊れることがある一方で、インラインブロックはできない(そして明らかにブロックする)ということです!したがって、インライン要素はテキストとその中のブロックの文のスタイルを設定するのに役立ちますが、パディングできないため、代わりに行の高さを使用できます。

<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<hr/>
<div style="width: 350px">
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
  <div style="display: inline-block; background: #F00; color: #FFF">
    Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
  </div>
  Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>

ここに画像の説明を入力してください


6

上記のすべての回答は、元の質問に関する重要な情報を提供します。ただし、間違っているように見える一般化があります。

幅と高さを少なくとも1つのインライン要素(私が考えることができる)、つまり要素に設定することが可能<img>です。

ここで受け入れられた回答とこの重複についての回答はどちらも不可能であると述べていますが、これは有効な一般規則のようには見えません。

例:

img {
  width: 200px;
  height: 200px;
  border: 1px solid red;
}
<img src="#" />

img持っていますdisplay: inlineが、そのwidthとは、height正常に設定されました。


2
実際、img-tagには、デフォルトの表示値としてdisplay-inlineがあります。そのため、幅と高さを設定できます。
アレックス

imgはインライン要素です-> developer.mozilla.org/en-US/docs/Web/HTML/Inline_elements ...つまり、基本的に私が言っているのとほぼ同じことを言っていて、反対票を投じているのですか?
alexandros84 2017

7
いいえ、違います。img-tagsは「置換された要素」であり、基本的にコンテンツが置換され、インラインブロック要素のように動作します。そして、はい、実際のデフォルトプロパティです(ブラウザによって計算されたプロパティはインラインです)。しかしその唯一の理由は、CSS2までinline-blockが導入されなかったためであり、その内容は「inline-block要素のように動作するinline要素」であり、その内容によって置き換えられています。つまり、要素に高さ/幅を設定するのではなく、コンテンツに設定します-Wierd、はい。知っている。 drafts.c​​sswg.org/css2/conform.html#replaced-element
アレックス

それは実際にあなたが言っていることが面白いです。調査して再編集する時間を与えてください。代わりに、反対票と反対票を取り戻すかもしれません。結局のところ、私はこの議論が議論全体の完全性に貢献していると正直に感じています。
alexandros84 2017

1

splattneの答えは:私は同じことを繰り返すことはなくなりますので、おそらく、すべてのほとんどをカバーinlineし、inline-blockと異なる動作をdirectionCSSプロパティ。

次のスニペットone twoでは、LTRレイアウトと同様に、(順番に)レンダリングされます。ここのブラウザーは英語の部分をLTRテキストとして自動検出し、左から右にレンダリングしたのではないかと思います。

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

ただし、先に進んでに設定displayするinline-blockと、ブラウザはdirectionプロパティを尊重し、要素を右から左に順番にtwo oneレンダリングするように見えるため、レンダリングされます。

body {
  text-align: right;
  direction: rtl;
}

h2 {
  display: block; /* just being explicit */
}

span {
  display: inline-block;
}
<h2>
  هذا عنوان طويل
  <span>one</span>
  <span>two</span>
</h2>

他に問題があるかどうかはわかりませんが、Chromeでこれを経験的に調べただけです。

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