div間のスペース-表示テーブルセル


96

ここには2つのdivがあります。

<div style="display:table-cell" id="div1">
    content
</div>

<div style="display:table-cell" id="div2">
    content
</div>

これらの2つのdiv(を持つdisplay:table-cell)の間にスペースを作る方法はありますか?

回答:


192

border-spacingプロパティを使用できます:

HTML:

<div class="table">
    <div class="row">
        <div class="cell">Cell 1</div>
        <div class="cell">Cell 2</div>
    </div>
</div>

CSS:

.table {
  display: table;
  border-collapse: separate;
  border-spacing: 10px;
}

.row { display:table-row; }

.cell {
  display:table-cell;
  padding:5px;
  background-color: gold;
}

JSBinデモ

他のオプションはありますか?

まあ、そうではありません。

どうして?

  • marginプロパティdisplay: table-cell要素には適用さません
  • padding プロパティは、セルの端の間にスペースを作成しません。
  • floatプロパティは、table-cell親要素と同じ高さにできる要素の予想される動作を破棄します。

他のオプションはありますか?確かに、position: relative
ジョンゴシ2014年

よる@Jongosi 仕様の影響position: relativetable-*-grouptable-rowtable-columntable-cell、及びtable-caption要素が定義されていません。
Hashem Qolami 2014年

3
また、背景と同じ色の片側ボーダーを作成することもできます。border-right: 10px solid #FFF。これは、table-cell要素間にスペースが必要なときにCSSドロップダウンメニューをデザインするときにうまくいきました。
armadadrive 2016年

1
純粋に間隔を空けるためにセルを追加することもできます。理想的ではありませんが、少なくとも、右端のセルでボーダー間隔をオフにしようとする頭痛の種を回避できます。
Daniel

また、「パディング」を「セル」の1つのエッジのみに配置したかったため、透明な境界線にrgba(0,0,0,0)の境界線色を使用した以外は、armadadriveのソリューションを使用する必要があったので、背景の色や画像を気にする必要はありません。border-right:10pxソリッドrgba(0,0,0,0);
JAX

19

可能であれば、透明な境界線を使用してください。

JSFiddleデモ

https://jsfiddle.net/74q3na62/

HTML

<div class="table">
    <div class="row">
        <div class="cell">Cell 1</div>
        <div class="cell">Cell 2</div>
        <div class="cell">Cell 3</div>
    </div>
</div>

CSS

.table {
  display: table;
  border: 1px solid black;
}

.row { display:table-row; }

.cell {
  display: table-cell;
  background-clip: padding-box;
  background-color: gold;
  border-right: 10px solid transparent;
}

.cell:last-child {
  border-right: 0 none;
}

説明

border-spacing受け入れられた答えが示唆するように、プロパティを使用できますが、これにより、テーブルセル間だけでなく、テーブルセルとテーブルコンテナーの間にスペースが生成されます。これは望ましくない場合があります。

テーブルセルに境界線を表示する必要がない場合は、transparent境界線を使用してセルの余白を生成する必要があります。background-clip: padding-box;テーブルセルの背景色が境界線に表示されるため、透明な境界線は設定が必要です。

透明な境界線と背景クリップは、IE9以上(および他のすべての最新ブラウザー)でサポートされています。IE8との互換性が必要な場合、または実際の透明なスペースが必要ない場合は、白い境界線の色を設定して、省略できますbackground-clip


'border-right'設定は実際にはスペースを提供するのに十分であり、「テーブル」宣言は必要ありません。
Forsberg、2017年

0
<div style="display:table;width:100%"  >
<div style="display:table-cell;width:49%" id="div1">
content
</div>

<!-- space between divs - display table-cell -->
<div style="display:table-cell;width:1%" id="separated"></div>
<!-- //space between divs - display table-cell -->

<div style="display:table-cell;width:50%" id="div2">
content
</div>
</div>

0

さて、上記は機能しますが、ここでは少し必要なマークアップが少なく、より柔軟な私の解決策を示します。

.cells {
  display: inline-block;
  float: left;
  padding: 1px;
}
.cells>.content {
  background: #EEE;
  display: table-cell;
  float: left;
  padding: 3px;
  vertical-align: middle;
}
<div id="div1" class="cells"><div class="content">My Cell 1</div></div>
<div id="div2" class="cells"><div class="content">My Cell 2</div></div>


-6

任意の名前で新しいdivを作成し(私はtable-splitを使用します)、コンテンツを追加せずに幅を指定し、分離する必要のあるdivの間に配置します。

必要に応じて幅を追加できます。0.6%を使用したのは、これを行う必要があるときに必要だったからです。

.table-split {
  display: table-cell;
  width: 0.6%
}
<div class="table-split"></div>


10
これはひどい解決策です。

1
これは、実際のテーブル要素がレイアウト目的で使用されたときの一般的な戦略であり、方法論が廃止された理由の一部です。
rakitin 2016

CSSでのみ実現できるため、HTMLの使用は避けてください
Toni Michel Caubet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.