「display:table-cell;」のdivがある理由 マージンの影響を受けませんか?


211

私はとdiv隣り合っている要素がありdisplay: table-cell;ます。

marginそれらの間に設定したいのですmargin: 5pxが、効果がありません。どうして?

私のコード:

<div style="display: table-cell; margin: 5px; background-color: red;">1</div>
<div style="display: table-cell; margin: 5px; background-color: green;">1</div>

回答:


310

原因

MDNのドキュメントから:

[マージンプロパティ]は、テーブルキャプション、テーブル、インラインテーブル以外のテーブル表示タイプの要素を除くすべての要素に適用されます。

つまり、marginプロパティは要素に適用できませんdisplay:table-cell

解決

border-spacing代わりにプロパティの使用を検討してください。

display:tableレイアウトとの親要素に適用する必要があることに注意してくださいborder-collapse:separate

例えば:

HTML

<div class="table">
    <div class="row">
        <div class="cell">123</div>
        <div class="cell">456</div>
        <div class="cell">879</div>
    </div>
</div>

CSS

.table {display:table;border-collapse:separate;border-spacing:5px;}
.row {display:table-row;}
.cell {display:table-cell;padding:5px;border:1px solid black;}

jsFiddleデモを見る


水平方向と垂直方向のマージンが異なる

DiegoQuirósが述べたように、このborder-spacingプロパティは2つの値を受け入れて、水平軸と垂直軸に異なるマージンを設定します。

例えば

.table {/*...*/border-spacing:3px 5px;} /* 3px horizontally, 5px vertically */

6
ありがとう!水平と垂直のスペースを異なるボーダー間隔にする必要がある場合にもこの表記があります。
ディエゴキロス2014

そして私はバグを見つけたと思った。CSSについてもっと学ぶ必要があることがわかりました。
ピートアルヴィン

これは特定の左/右/上/下のマージンを実際に処理しないと思いますか?特定のテーブルセルに他のセルと異なるパディングを設定する方法はありませんか?
ネイサン

@Nathan paddingは、通常どおり、必要なセレクター(クラスやIDなど)に設定できます。marginセル間を意味する場合は、2つの値をborder-spacingに設定することにより、縦軸と横軸に個別に設定できますが、個別のセルではなくテーブル全体に適用されます。
Boaz

21

内側のdivを使用してマージンを設定できます。

<div style="display: table-cell;">
   <div style="margin:5px;background-color: red;">1</div>
</div>
<div style="display: table-cell; ">
  <div style="margin:5px;background-color: green;">1</div>
</div>

JSフィドル


2
セル間のマージンは必要だがセルの左または右は必要ない場合、これは良い考えです。その場合、CSSは次のようになり.inner-div { margin-right: 5px; } .outer-cell:last-child .inner-div { margin-right: 0; }ます。しかし、この落とし穴にも注意してください。この例の赤と緑の背景は、セル上にないため、高さが必ずしも一致しません。
Henrik N

8

表のセルはマージンを考慮しませんが、代わりに透明な境界線を使用できます:

div {
  display: table-cell;
  border: 5px solid transparent;
}

注:ここではパーセンテージは使用できません... :(


2

あなたがこのようにお互いの隣にdivを持っているなら

<div id="1" style="float:left; margin-right:5px">

</div>
<div id="2" style="float:left">

</div>

これはうまくいくはずです!


10
では、もし彼が2つのdivを同じ高さにしたいとしたらどうでしょうか フロートはこれを行うことができません。
広島市2014

そして、それがJSが素晴らしい理由です:)
Chris Happy

@ChrisHappy CSSソリューションがある場合は、JavaScriptを使用しないでください。コードが大きくなるだけです。
ssc-hrep3 2017年

@ ssc-hrep3応答性がオンデマンドになると、かさばるCSSソリューションではもはや十分ではありません...
Chris Happy

2
特に十分な対応が必要な場合は十分です。現在主要なブラウザのほとんどでサポートされており、この正確な問題を非常に簡単に解決するflexboxを見てください。レイアウトスタイルはJavaScriptで実行しないでください。
ssc-hrep3 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.