CSSセルマージン


95

私のHTMLドキュメントには、2つの列と複数の行を持つテーブルがあります。CSSを使用して最初の列と2番目の列の間のスペースを増やすにはどうすればよいですか?「margin-right:10px;」を適用してみました 左側の各セルには影響しますが、効果はありません。


ここに良いCSSソリューションがあり、新しく更新されました:stackoverflow.com/a/21551008/2827823
Ason

回答:


89

これをあなたの最初に適用してください<td>

padding-right:10px;

HTMLの例:

<table>
   <tr>
      <td style="padding-right:10px">data</td>
      <td>more data</td>
   </tr>
</table>

12
それにはるかに優れたアプローチは国境崩壊を使用することです:別々の
のGaurav Ramanan

21
上記のコメントが境界線折りたたみのテクニックをコピー/貼り付けている場合に備えて、それはborder-collapse: separateseparate上記のスペルにタイプミスがあった)
Tony DiNitto

1
あなたが国境間のスペースの量を定義したい場合にも、あなたが使用する必要がありますborder-spacing: 5px;
解決Tornøe

border-spacing行間にスペースも追加します。残念ながら、垂直方向と水平方向の間隔に個別のプロパティはありません。
リーブレイク

border-spacing2つの引数を取ります-1つは水平、もう1つは垂直です。
OldTinfoil

152

警告:padding-right特定の(視覚的な)問題は解決するかもしれませんが、テーブルセルのにスペースを追加する正しい方法ではありません。どのようなpadding-rightセルのために行うことは、それは他のほとんどの要素のために何をするかのようになります。それはスペースが追加されますの細胞。セルに境界線や背景色など、ゲームに影響を与える何かがない場合、これはセル間のスペースを設定する効果を模倣できますが、それ以外の場合は模倣できません。

誰かが指摘したように、テーブルセルのマージン指定は無視されます。

CSS 2.1仕様–テーブル–テーブルコンテンツの視覚的なレイアウト

内部テーブル要素は、コンテンツと境界線を持つ長方形のボックスを生成します。セルにもパディングがあります。内部テーブル要素にはマージンがありません。

では、「正しい」方法は何でしょうか。cellspacingテーブルの属性を置き換えようとしている場合は、border-spacingborder-collapse無効になっている)の代わりになります。ただし、セルごとの "マージン"が必要な場合、CSSを使用してそれを正しく実現する方法がわかりません。私が考えることができる唯一のハックはpadding、上記のように使用し、セルのスタイル設定(背景色、境界線など)を避け、代わりにセル内のコンテナーDIVを使用してそのようなスタイル設定を実装することです。

私はCSSのエキスパートではないので、上記の点で間違っている可能性があります(知っておくと便利です!テーブルセルマージンのCSSソリューションも必要です)。

乾杯!


これはすばらしいことであり、すべてパディングに適していますが、マージンについてはどうですか?境界線を含むセルの外側にスペースを追加したい。マージンCSSはセルには影響しないようです。
Levitikon、2011年

1
Levitikon、そうです。マージンは上記の理由で機能しません。必要なものを取得する唯一の方法であるAFAIKは、セルの内容をDIVでラップし、セルではなくマージン境界をそのDIVに追加することです。
ラビ

ずっと前にCSSソリューションを投稿しました(今日更新しました):stackoverflow.com/a/21551008/2827823
Ason


14

これはかなり遅れていることに気づきますが、記録のために、CSSセレクターを使用してこれを行うこともできます(インラインスタイルの必要性を排除します)。このCSSは、すべての行の最初の列にパディングを適用します。

table > tr > td:first-child { padding-right:10px }

そして、これはあなたのHTMLであり、CSSではありません!:

<table><tr><td>data</td><td>more data</td></tr></table>

これにより、特にCSSで多数の特定のフォーマットを行う必要がある場合に、よりエレガントなマークアップが可能になります。


14

マージンは残念ながら個々のセルでは機能しませんが、間にスペースを入れたい2つのセルの間に余分な列を追加できます...別のオプションは、背景と同じ色の境界線を使用することです...


境界線にはパディングと同じ問題があるようです。境界線の外側ではなく、セルの内容と境界線の間にスペースが追加されます。
stewbasic 2016

11

あなたは単にそれを行うことができます:

<html>
<table>
    <tr>
        <td>one</td>
        <td width="10px"></td>
        <td>two</td>
    </tr>
</table>
</html>

CSSは必要ありません:)この10pxはあなたのスペースです。


これは良い、シンプル、そして効果的です。思い出させてくれてありがとう+1
Hayden Thring 2013年

8
これは、構造とスタイルの分離に適したアプローチではありません。CSSが必要であるかどうかは問題ではありません-CSSはこのようなものに使用されるべきです。
Simon Robb 2013年

<td style = "width:10px;"> </ td>であってはなりません
Rune Jeppesen 14年

1
覚えておいてください、最も簡単なソリューションが最善です。インラインスタイルのメソッドも良いです:)
MrTrebor '27

それは私の特定のケースで機能します。とてもクリエイティブ。ありがとう
ファンヴァンリン

7

お試しくださいpadding-rightmarginセルの間にを置くことはできません。

<table>
   <tr>
      <td style="padding-right: 10px;">one</td>
      <td>two</td>
   </tr>
</table>

4

border-collapseの使用:分離; テーブルの横ではなく、テーブルセルの間にマージンが必要なだけだったので、私にはうまくいきませんでした。

私は次の解決策を思いつきました:

- CSS

.tableDiv{
    display: table;
}

.cellSeperator {
    display: table-cell;
    width: 20px;
}

.cell1 {
    display: table-cell;
    width: 200px;
}

.cell2 {
    display: table-cell;
    width: 50px;
}

- HTML

<div class="tableDiv">
    <div class="cell1"></div>
    <div class="cellSeperator"></div>
    <div class="cell2"></div>
</div>

4

このソリューションtdは、両方を必要borderpaddingするとスタイルの両方で機能します。
(Chrome 32、IE 11、Firefox 25でテスト済み)

CSS:
table {border-collapse: separate; border-spacing:0; }   /*  separate needed      */
td { display: inline-block; width: 33% }  /*  Firefox need inline-block + width  */
td { position: relative }                 /*  needed to make td move             */
td { left: 10px; }                        /*  push all 10px                      */
td:first-child { left: 0px; }             /*  move back first 10px               */
td:nth-child(3) { left: 20px; }           /*  push 3:rd another extra 10px       */

/*  to support older browsers we need a class on the td's we want to push
    td.col1 { left: 0px; }
    td.col2 { left: 10px; }
    td.col3 { left: 20px; }
*/

HTML:
<table>
    <tr>
        <td class='col1'>Player</td>
        <td class='col2'>Result</td>
        <td class='col3'>Average</td>
    </tr>
</table>

2016年更新

Firefoxはinline-block、セットなしとセットなしでサポートするようになりましたwidth

table {border-collapse: separate; border-spacing:0; }
td { position: relative; padding: 5px; }
td { left: 10px; }
td:first-child { left: 0px; }
td:nth-child(3) { left: 20px; }
td { border: 1px solid gray; }


/* CSS table */
.table {display: table; }
.tr { display: table-row; }
.td { display: table-cell; }

.table { border-collapse: separate; border-spacing:0; }
.td { position: relative; padding: 5px; }
.td { left: 10px; }
.td:first-child { left: 0px; }
.td:nth-child(3) { left: 20px; }
.td { border: 1px solid gray; }
<table>
  <tr>
    <td>Player</td>
    <td>Result</td>
    <td>Average</td>
  </tr>
</table>

<div class="table">
  <div class="tr">
    <div class="td">Player</div>
    <div class="td">Result</div>
    <div class="td">Average</div>
  </div>
</div>


これは、divから作成されたcssテーブル(display:table *)でも機能しました。
Necreaux、2015

2

この方法でセル内の個々の列を選択することはできません。私の意見ではstyle='padding-left:10px'、2番目の列にを追加して、内部のdivまたは要素にスタイルを適用するのが最善の方法です。このようにして、より大きな空間の錯覚を実現できます。


2

テーブルの幅を制御できる場合は、すべてのテーブルセルにパディング左を挿入し、テーブル全体に負のマージン左を挿入します。

table {
    margin-left: -20px;
    width: 720px;
}

table td {
    padding-left: 20px;
}

表の幅には、パディング/マージンの幅を含める必要があることに注意してください。上記を例にとると、テーブルの視覚的な幅は700pxになります。

テーブルセルで境界線を使用している場合、これは最適なソリューションではありません。


2

解決

この問題を解決する最良の方法は、試行錯誤と私の前に書かれたものを読むことの組み合わせであることがわかりました。

http://jsfiddle.net/MG4hD/


ご覧のとおり、かなりトリッキーなことが起こっています...しかし、これを美しくするための主なキッカーは次のとおりです。

親要素(UL):border-collapse:別; ボーダー間隔:.25em; margin-left:-.25em;
子要素(LI):表示:テーブルセル; 垂直方向に揃える:中央;

HTML

<ul>
<li><span class="large">3</span>yr</li>
<li>in<br>stall</li>
<li><span class="large">9</span>x<span class="large">5</span></li>
<li>on<br>site</li>
<li>globe</li>
<li>back<br>to hp</li>
</ul>

CSS

ul { border: none !important; border-collapse: separate; border-spacing: .25em; margin: 0 0 0 -.25em; }
li { background: #767676 !important; display: table-cell; vertical-align: middle; position: relative; border-radius: 5px 0; text-align: center; color: white; padding: 0 !important; font-size: .65em; width: 4em; height: 3em; padding: .25em !important; line-height: .9; text-transform: uppercase; }

1

マージンの代わりに境界線を設定するCianの解決策に従って、背景色と一致する必要がないように境界線の色を透明に設定できることを発見しました。FF17、IE9、Chrome v23で動作します。実際の境界線も必要ない場合は、適切なソリューションのようです。


1

<!DOCTYPE html>
<html>
<head>
<style>
table{
border-spacing: 16px 4px;
}

 td {
    border: 1px solid black;
}
</style>
</head>
<body>

<table style="width:100%">
  <tr>
    <td>Jill</td>
    <td>Smith</td>		
    <td>50</td>
  </tr>
  <tr>
    <td>Eve</td>
    <td>Jackson</td>		
    <td>94</td>
  </tr>
  <tr>
    <td>John</td>
    <td>Doe</td>		
    <td>80</td>
  </tr>
</table>

</body>
</html>

パディングを使用するのは正しい方法ではありません。見た目が変わる可能性がありますが、希望どおりではありません。これで問題が解決する場合があります。


このソリューションはすでに投稿されており、同じことを言う2つの回答は必要ありません。
Ason、2015

1

あなたはそれらの両方を使うことができます:

padding-right:10px;

padding-right:10%;

ただし、%で使用することをお勧めします。


1
私は賛成票を投じましたが、使用した方がよい理由を説明したかもしれません%
Mawgはモニカを2016

1
通常、%はレスポンシブにするために使用されます。
ムハンマドアワイス16

1
プラス1-多分あなたはそう言うためにあなたの答えを編集できますか?あなたは応答デザインについて何かへのリンクを追加したい場合はveryone人読み込むことは、より良い..コメントを読むかもしれません:-)
MawgはREINSTATEモニカ言う

1

パディングが機能しない場合、別の回避策は、列を追加し、を使用して幅を介してマージンを設定すること<colgroup>です。セルの境界自体にマージンを与えようとしたので、上記のパディングソリューションはどれも機能しませんでした。これが最終的に問題を解決したものです。

<table>
  <colgroup>
    <col>
    <col width="20px">
    <col>
  </colgroup>
  <tr>
     <td>data</td>
     <td></td>
     <td>more data</td>
   </tr>
</table>

:nth-​​childを使用してテーブルセルの境界線のスタイルを設定し、2番目と3番目の列が1つの列に見えるようにします。

table tr td:nth-child(2) { border: 1px solid black; border-right:0; }
table tr td:nth-child(3) { border: 1px solid black; border-left:0; }

それは問題を覆い隠すのではなく、答えるのです。それを行うことによってそれを適切に行う方法を誰も学ぶことはありません
Mawgはモニカを16:29
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.