CSS Hücre Kenar Boşluğu


96

HTML belgemde iki sütunlu ve çok satırlı bir tablom var. Birinci ve ikinci sütun arasındaki boşluğu css ile nasıl artırabilirim? "Margin-right: 10px;" sol taraftaki hücrelerin her birine, ancak etkisiz.


Burada yeni güncellenen iyi bir CSS çözümü var: stackoverflow.com/a/21551008/2827823
Ason

Yanıtlar:


93

Bunu ilk uygulamanıza uygulayın <td>:

padding-right:10px;

HTML örneği:

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

13
Buna çok daha iyi bir yaklaşım, sınır-çöküşü kullanmak olabilir: ayrı
Gaurav Ramanan

23
Birisinin sınır-daraltma tekniğini kopyalaması / yapıştırması durumunda, yukarıdaki yorum şu şekilde olmalıdır border-collapse: separate( separateyukarıdaki yazımda bir yazım hatası vardı )
Tony DiNitto

1
Ayrıca, sınırlar arasındaki boşluk miktarını belirlemek istiyorsanız, şunu kullanmanız gerekecekborder-spacing: 5px;
Sølve Tornøe

border-spacingayrıca satırlar arasına boşluk ekler. Maalesef dikey ve yatay boşluk için ayrı bir özellik yoktur.
Lee Blake

1
border-spacingbiri yatay, diğeri dikey olmak üzere iki bağımsız değişken alır.
OldTinfoil

153

Bir uyarı kelimesi: padding-rightbelirli (görsel) probleminizi çözebilir, ancak tablo hücreleri arasında boşluk eklemenin doğru yolu değildir . Ne padding-rightbir hücre için yaptığı en diğer elemanlar için ne yaptığını benzer: o boşluk ekler içinde hücrede. Hücrelerde bir kenarlık veya arka plan rengi yoksa ya da oyunu başka bir şeye verirse, bu, hücreler arasındaki boşluğu ayarlamanın etkisini taklit edebilir, ancak başka türlü olamaz.

Birisinin belirttiği gibi, tablo hücreleri için kenar boşluğu özellikleri göz ardı edilir:

CSS 2.1 Spesifikasyonu - Tablolar - Tablo içeriklerinin görsel düzeni

İç tablo öğeleri, içerik ve kenarlıklara sahip dikdörtgen kutular oluşturur. Hücrelerin dolgusu da vardır. İç tablo öğelerinin kenar boşlukları yoktur.

O halde "doğru" yol nedir? cellspacingTablonun özniteliğini değiştirmek istiyorsanız, border-spacing( border-collapsedevre dışı bırakılmış olarak) bir yedektir. Bununla birlikte, hücre başına "marjlar" gerekliyse, CSS kullanılarak bunun nasıl doğru bir şekilde gerçekleştirilebileceğinden emin değilim. Aklıma gelen tek hile padding, yukarıdaki gibi kullanmak , hücrelerin herhangi bir stilinden kaçınmak (arka plan renkleri, kenarlıklar, vb.) Ve bunun yerine, bu tür stilleri uygulamak için hücrelerin içindeki kapsayıcı DIV'leri kullanmaktır.

Ben bir CSS uzmanı değilim, bu yüzden yukarıda yanlış olabilirim (bunu bilmek harika olurdu! Ben de bir tablo hücre marjı CSS çözümü istiyorum).

Şerefe!


Bu harika ve hepsi dolgu için, peki ya marj için? Kenarlık içeren hücrenin dışına boşluk eklemek istiyorum. Margin CSS'nin hücreler üzerinde etkisi yok gibi görünüyor.
Levitikon

1
Levitikon, bu doğru - yukarıdaki nedenlerden dolayı marjlar çalışmıyor. AFAIK, istediğinizi elde etmenin tek yolu, hücrenin içeriğini bir DIV'ye sarmak, bu DIV'ye hücre yerine kenar boşluğu ve kenarlık eklemektir .
ravi

Uzun zaman önce bir CSS çözümü yayınladım (bugün güncelledim): stackoverflow.com/a/21551008/2827823
Ason


14

Bunun oldukça gecikmiş olduğunun farkındayım, ancak kayıt için bunu yapmak için CSS seçicilerini de kullanabilirsiniz (satır içi stillere olan ihtiyacı ortadan kaldırır.) Bu CSS, her satırın ilk sütununa dolgu uygular:

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

Ve bu sizin HTML'niz olacaktır, sans CSS !:

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

Bu, özellikle CSS ile çok sayıda özel biçimlendirme yapmanız gereken durumlarda çok daha zarif bir işaretlemeye olanak tanır.


14

kenar boşluğu maalesef tek tek hücrelerde çalışmıyor, ancak arasına boşluk koymak istediğiniz iki hücre arasına fazladan sütunlar ekleyebilirsiniz ... Diğer bir seçenek de arka planla aynı renkte bir kenarlık kullanmaktır ...


Görünüşe göre kenarlık dolgu ile aynı soruna sahip - sınırın dışında değil, hücre içeriği ve sınır arasına boşluk ekler.
stewbasic

11

Bunu basitçe yapabilirsiniz:

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

CSS gerekmez :) Bu 10px sizin alanınızdır.


bu iyi, basit ve etkili, bana +1
Hayden Thring'i

8
Bu, yapı ve stilin ayrılması için iyi bir yaklaşım değildir. CSS'nin gerekli olup olmadığı bir durum değildir - CSS böyle bir şey için kullanılmalıdır.
Simon Robb

<td style = "width: 10px;"> </td> olmamalı
Rune Jeppesen

1
Unutmayın, en basit çözümler en iyisidir. Satır içi stilde yöntem de iyidir :)
MrTrebor

Benim özel durumum için çalışıyor. Çok yaratıcı. Teşekkürler
Phan Van Linh

7

Deneyin padding-right. marginHücreler arasına e-posta koymanıza izin verilmez .

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

4

Border-collapse kullanma : ayrı; benim için işe yaramadı, çünkü sadece masanın yanlarında değil tablo hücrelerinin arasında bir boşluğa ihtiyacım var.

Bir sonraki çözümü buldum:

- 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

Bu çözüm çalışması td'hem bu ihtiyacı s borderve paddingstil için.
(Chrome 32, IE 11, Firefox 25'te test edilmiştir)

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'da güncellendi

Firefox artık bunu inline-blockbir set olmadan destekliyorwidth

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>


Bu aynı zamanda div'lerden oluşan css tabloları (display: table *) için de çalıştı.
Necreaux

2

Bu şekilde bir hücredeki tek tek sütunları ayıramazsınız. Kanımca, en iyi seçeneğiniz style='padding-left:10px'ikinci sütuna bir eklemek ve stilleri dahili bir div veya öğeye uygulamaktır. Bu şekilde daha büyük bir alan illüzyonuna ulaşabilirsiniz.


2

Tablonun genişliğinin kontrolüne sahipseniz, tüm tablo hücrelerine bir sol dolgu ekleyin ve tüm tabloya negatif bir sol kenar boşluğu ekleyin.

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

table td {
    padding-left: 20px;
}

Tablonun genişliğinin dolgu / kenar boşluğu genişliğini içermesi gerektiğini unutmayın. Yukarıdakileri örnek olarak kullanırsak, tablonun görsel genişliği 700 piksel olacaktır.

Masa hücrelerinizde kenarlıklar kullanıyorsanız, bu en iyi çözüm değildir.


2

ÇÖZÜM

Bu sorunu çözmenin en iyi yolunu deneme yanılma ve benden önce yazılanları okumanın bir birleşimi olarak buldum:

http://jsfiddle.net/MG4hD/


Gördüğünüz gibi, oldukça zor işlerim var ... ama bunun iyi görünmesini sağlamanın ana sebebi:

EBEVEYN ELEMENT (UL): sınır-daraltma: ayrı; sınır aralığı: .25em; kenar-sol: -.25em;
ÇOCUK ELEMANLARI (LI): ekran: masa hücresi; dikey hizalama: orta;

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'ın bir kenar boşluğu yerine bir kenarlık belirleme çözümünü takiben, arka planla renk eşleşmesi yapmak zorunda kalmamak için kenarlık rengini saydam olarak ayarlayabileceğinizi keşfettim. FF17, IE9, Chrome v23'te çalışır. Gerçek bir sınıra da ihtiyacınız olmadığı sürece iyi bir çözüm gibi görünüyor.


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>

Dolgu kullanmak bunu yapmanın doğru yolu değildir, görünüşü değiştirebilir ama istediğiniz şey bu değildir. Bu, sorununuzu çözebilir.


Bu çözüm zaten yayınlandı, aynı şeyi söyleyen 2 yanıta gerek yok.
Ason

1

İkisini de kullanabilirsiniz:

padding-right:10px;

padding-right:10%;

Ancak % ile kullanmak daha iyidir .


1
Oy verdim, ancak neden kullanmanın daha iyi olduğunu açıklamış olabilirsiniz%
Mawg, Monica'nın eski durumuna getirildiğini söyledi

1
Normalde duyarlı yapmak için% kullanılır.
Muhammad Awais

1
Artı bir - belki bunu söylemek için cevabınızı düzenleyebilirsiniz? Okuyan hiç kimse yorumları okuyamaz .. Duyarlı tasarımla ilgili bir şeye bağlantı eklemek istiyorsanız, daha da iyisi :-)
Mawg, Monica

1

Dolgu sizin için işe yaramıyorsa, başka bir çözüm de fazladan sütunlar eklemek ve kullanarak genişlik yoluyla bir kenar boşluğu ayarlamaktır <colgroup>. Hücre sınırının kendisine bir kenar boşluğu vermeye çalıştığım için yukarıdaki dolgu çözümlerinden hiçbiri benim için çalışmıyordu ve sonunda sorunu çözen şey buydu:

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

Tablo hücrelerinin kenarlıklarının stilini şu şekilde kullanın: nth-child, böylece 2. ve üçüncü sütunlar tek sütun olarak görünür.

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; }

Bu, sorunu cevaplamak değil maskelemek. Bunu yaparak kimse bunu düzgün bir şekilde yapmayı
öğrenemeyecek
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.