Tablodaki iki satır arasındaki boşluk?


755

Bu CSS ile mümkün mü?

deniyorum

tr.classname {
  border-spacing: 5em;
}

boşuna. Belki yanlış bir şey yapıyorum?


Tarayıcı nedir ve kodunuzun bir parçasını (html / css) sağlayabilir misiniz?
Patrick Desjardins

Peki ben sözde kurallar desteklediğini bildiğim gibi ff3 kullanıyorum ama şimdilik ben ff3 düzeltmek için arıyorum. i boşluk ve dolgu şimdiye kadar şans denedim. productlistingitem ana tablodur <table class = "productListingItem" border = "0" cellpadding = "10" cellspacing = "0"> <tr> <tr> <td class = "dragItem">
Marin

1
Belki de bununla border-spacingilgili olan tableve olmayan bir özellik olmasıdır tr. Deneyin table.classname {border-spacing:5em}. Note:! DOCTYPE belirtilmişse IE8, kenar boşluğu özelliğini destekler.
Varun Natraaj

Kenarlık olmadığında satır yüksekliğini kullanıyorum.
Leah

Yanıtlar:


523

tdElemanlarınızda dolgu kullanmanız gerekir . Böyle bir şey hile yapmalı. Tabii ki, aynı sonucu, alt dolgu yerine bir üst dolgu kullanarak da alabilirsiniz.

Aşağıdaki CSS kodunda, büyük harf işareti, doldurmanın yalnızca sınıftaki öğelere tddoğrudan yönlendirilen öğelere uygulandığı anlamına gelir . Bu, iç içe tabloların kullanılmasını mümkün kılacaktır. (Örnek kodda C ve D hücresi.) Doğrudan çocuk seçici için tarayıcı desteğinden çok emin değilim (IE 6'yı düşünün), ancak herhangi bir modern tarayıcıda kodu kırmamalıdır.trspaceUnder

/* Apply padding to td elements that are direct children of the tr elements with class spaceUnder. */

tr.spaceUnder>td {
  padding-bottom: 1em;
}
<table>
  <tbody>
    <tr>
      <td>A</td>
      <td>B</td>
    </tr>
    <tr class="spaceUnder">
      <td>C</td>
      <td>D</td>
    </tr>
    <tr>
      <td>E</td>
      <td>F</td>
    </tr>
  </tbody>
</table>

Bu bir şekilde şöyle olmalıdır:

+---+---+
| A | B |
+---+---+
| C | D |
|   |   |
+---+---+
| E | F |
+---+---+

1
code.google.com/p/ie7-js çocuk seçiciye ie5.5, ie6, ie7'de de destek veriyor
Antony Hatchkins

403
Bunun dışında, satırlarınız arka plan rengine sahip olduğunda ve aslında satırlarınız arasında WHITESPACE olmasını istediğinizde bu sorunu çözmez.
Simon East

6
@Simon: Beyaz boşluk, özellikle beyaz renk değil, boş alanı ifade eder. Satırlar arasındaki boşluğu renklendirmek istiyorsanız, td öğelerindeki CSS <code> border-bottom </code> özelliğiyle deneyebilirsiniz. Bu muhtemelen yalnızca 1 piksellik bir kenarlıkla doğru şekilde oluşturulur. Bir başka, ama çok zarif olmayan bir çözüm, boş bir sıra kullanmak olacaktır.
Jan Aagaard

18
@Jan: Evet, kesinlikle benim açımdan ... Satırlar arasına şeffaf boş alan koymak oldukça zor . Çözümünüz bazı durumlarda yardımcı olur, ancak bu sorunu çözmez. Boş bir tablo satırı eklemek işe yarayabilir, ancak bu tamamen çirkin. Bir bottom-bordersaydam gücüne ayarlanmış da çalışabilir, ama emin ne kadar çapraz tarayıcı uyumlu değilim.
Simon East

1
@Simon: Coleman, sorununuz için çirkin, ancak çalışan bir çözüme sahip .
eggy

387

Üst tabloda ayarlamayı deneyin

border-collapse:separate; 
border-spacing:5em;

Artı bir sınır bildirimi ve bunun istediğiniz etkiyi sağlayıp sağlamadığını görün. Yine de IE'nin "ayrılmış sınırlar" modelini desteklemediğine dikkat edin.


5
Evet, bu yöntem ideal olacaktır , ancak IE 7 bunu desteklemez. Tarayıcı desteği için bkz: quirksmode.org/css/tables.html
Simon East

7
Ayrıca, tablodaki tüm satırlar arasındaki aralığı kontrol eder, tek tek satırlar için satır aralığı ayarlayamazsınız (OP'nin elde etmek istediği budur).
Simon East

1
Bu, Chrome ve Firefox arasında tutarsız. Eğer bir varsa theadve tbodybu bir çift hale getirecek border-spacingChrome'da, arasındaki (ama Firefox'ta tek bir).
Camilo Martin

91
Bu, border-spacing: 0 1emyalnızca satırlar arasındaki boşluğunuzu almak için özel olarak ayarlanmış gerçek yanıttır .
Igneosaur

1
@igneosaur Söylediklerini yapmayı denedim ama hala sadece ilk ikisi değil tüm satırlar arasına boşluk ekledi. Çalışan bir jsfiddle sağlayabilir misiniz?
user3281466

184

Herhangi bir veri ile kimlik albümleri ile tablo var ... Ben trs ve tds atladım

<table id="albums" cellspacing="0">       
</table>

CSS'de:

table#albums 
{
    border-collapse:separate;
    border-spacing:0 5px;
}

15
bu benim için iyi çalıştı. sınır aralığının ilk argümanı hücreler arasındaki yatay aralıktır ve ikincisi dikey aralıktır.

İyi eski HTML işi yapabilirse her zaman süslü CSS ile yapmak zorunda
kalmaz


sadece "tbody" içindeki tr için başvurmak mümkün mü?
Jaison

129

Masanın arkasında bir arka plan görüntüsü olduğundan, beyaz dolgu ile taklit etmek işe yaramaz. Her içerik satırı arasına boş bir satır koymayı seçtim:

<tr class="spacer"><td></td></tr>

ardından boşluk satırlarına belirli bir yükseklik ve saydam arka plan vermek için css kullanın.


3
Bu muhtemelen daha esnektir, sanırım. Önceden ne zaman alana (dinamik olarak oluşturulmuş sayfalar) ihtiyacınız olacağını her zaman kontrol edemezsiniz.
Stefan Kendall

10
Bu bana 90'ları hatırlatıyor, CSS desteği neredeyse yokken ve tablolar çoğu düzen için kullanılıyordu. Yine de +1 veriyorum, çünkü diğer "cevaplar" aslında tablo satırları arasında yer açmak açısından daha iyi değil .
labirent

@labyrinth 90'lı yıllardan bu yana pek bir şey değişmedi. HTML ile ilgili olarak, hepsi çok daha güçlü ve çok daha dağınık hale geldi.
maaartinus

73

Mozilla Geliştirici Ağı'ndan :

Kenarlık aralığı CSS özelliği, bitişik hücrelerin kenarlıkları arasındaki mesafeyi belirtir (yalnızca ayrılmış kenarlıklar modeli için). Bu, sunum HTML'sindeki hücre aralığı özelliğine eşdeğerdir, ancak farklı yatay ve dikey boşluk ayarlamak için isteğe bağlı ikinci bir değer kullanılabilir.

Bu son kısım sıklıkla denetlenir. Misal:

.your-table {
    border-collapse: separate; /* allow spacing between cell borders */
    border-spacing: 0 5px; /* NOTE: syntax is <horizontal value> <vertical value> */

GÜNCELLEME

Artık OP'nin spesifik, ayrı satırların daha fazla boşluk olmasını istediğini anlıyorum. tbodyAnlambilimi bozmadan bunu başaran unsurlarla bir kurulum ekledim . Ancak, tüm tarayıcılarda desteklenip desteklenmediğinden emin değilim. Chrome'da yaptım.

Aşağıdaki örnek, tablonun ayrı satırlar, tam şişmiş css tatlılığı gibi görünmesini nasıl sağlayabileceğinizi göstermek içindir. Ayrıca ilk satıra tbodykurulumla daha fazla boşluk bıraktı . Kullanmaktan çekinmeyin!

Destek bildirimi: IE8 +, Chrome, Firefox, Safari, Opera 4+

.spacing-table {
  font-family: 'Helvetica', 'Arial', sans-serif;
  font-size: 15px;
  border-collapse: separate;
  table-layout: fixed;
  width: 80%;
  border-spacing: 0 5px; /* this is the ultimate fix */
}
.spacing-table th {
  text-align: left;
  padding: 5px 15px;
}
.spacing-table td {
  border-width: 3px 0;
  width: 50%;
  border-color: darkred;
  border-style: solid;
  background-color: red;
  color: white;
  padding: 5px 15px;
}
.spacing-table td:first-child {
  border-left-width: 3px;
  border-radius: 5px 0 0 5px;
}
.spacing-table td:last-child {
  border-right-width: 3px;
  border-radius: 0 5px 5px 0;
}
.spacing-table thead {
  display: table;
  table-layout: fixed;
  width: 100%;
}
.spacing-table tbody {
  display: table;
  table-layout: fixed;
  width: 100%;
  border-spacing: 0 10px;
}
<table class="spacing-table">
  <thead>
    <tr>
        <th>Lead singer</th>
        <th>Band</th>
    </tr>
  </thead>
  <tbody>
    <tr>
        <td>Bono</td>
        <td>U2</td>
    </tr>
  </tbody>
  <tbody>
    <tr>
        <td>Chris Martin</td>
        <td>Coldplay</td>
    </tr>
    <tr>
        <td>Mick Jagger</td>
        <td>Rolling Stones</td>
    </tr>
    <tr>
        <td>John Lennon</td>
        <td>The Beatles</td>
    </tr>
  </tbody>
</table>


Eğer iki belirli satır arasında vertivcal bir boşluk isteseydim bir ara satır ekledim <tr> <td colspan = "2" style = "padding-bottom: 1em;"> </td> </tr>
Paul Taylor

Bu işe yarayacaktır ancak anlamsal olarak yanlıştır (olduğu gibi, ayırıcı satırınız diğer satırlar gibi verilerle gerçek bir satır değildir. Bu, ekran okuyucuları veya diğer yardımcı aygıtları kullanan kişiler için, ayrıca endeksleme amaçları için ve Büyük bir fark yaratmayabilir, ancak bir web sitesi geliştirirken
Justus Romijn

Bir tabloyu temsil etmek için aslında bir tablo kullanıyorsa, bu doğrudur. Eğer tabloyu verileri tablo biçiminde görüntülemek için bir yol olarak kullanıyorsa, yukarıdaki iki seçimden birine boşluk eklemek yerine iki öğe arasındaki boşluğu temsil etmek için bir satır eklemenin daha mantıklı olduğunu iddia ederim. veya satırın altında, çünkü kullanıcının yapmak istediği şey, bir satır içindeki öğelerin boyutunu artırmak değil, iki satır arasına boşluk eklemektir.
Paul Taylor

53

Ayırıcı satır eklemeyi deneyebilirsiniz:

html:

<tr class="separator" />

css:

table tr.separator { height: 10px; }

7
IE için, gövdesi olmayan tr tanınmaz. kukla td etiketi de ekleyin.
Nap

Sorun, HTML5'te W3C doğrulayıcısının "Bir tablo satırı 0 sütun genişliğindeydi ve bu da ilk satır tarafından oluşturulan sütun sayısından daha az" hatası vermesi.
David Grayson

Güzel, başka bir <tr>, <td> ve <p> ekledim ve p etiketinin görünürlüğünü gizli olarak ayarladım. :-)
Jeppe

47

Bir tablo hücresinin kenar boşluğunu değiştiremezsiniz. Ancak dolguyu değiştirebilirsiniz. Hücreyi büyütecek ve artan dolgu ile metni kenardan uzağa itecek olan TD'nin dolgusunu değiştirin. Bununla birlikte, sınır çizgileriniz varsa, yine de tam olarak istediğiniz şey olmaz.


Evet, dolgu yüzden, sınır aşağı iter border-bottomve padding-bottomsınır dolgu altında olacağı anlamına gelir.
Dan Dascalescu

21

Bir göz atın ayrı: border-çöküş özniteliği (varsayılan) ve sınır-aralık özelliği.

İlk olarak, onları kenarları daraltmakla ayırmanız gerekir , daha sonra sütunlar ve satırlar arasındaki boşluğu kenar boşluğu ile tanımlayabilirsiniz .

Bu CSS özelliklerinin her ikisi de aslında her tarayıcıda iyi desteklenir, buraya bakın .

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

table, 
table td,
table th  {border: 1px solid black;}
<table>
  <tr>
    <td>Some text - 1</td>
    <td>Some text - 1</td>
  </tr>
  <tr>
    <td>Some text - 2</td>
    <td>Some text - 2</td>
  </tr>
  <tr>
    <td>Some text - 3</td>
    <td>Some text - 3</td>
  </tr>
</table>


20

Tamam, yapabilirsin

tr.classname td {background-color:red; border-bottom: 5em solid white}

Arka plan renginin satır yerine td'de ayarlandığından emin olun. Bu, çoğu tarayıcıda çalışmalıdır ... (Chrome, yani & ff test edildi)


Bu, en azından Firefox'ta garip dikey hizalama sorunları yaratır
cjohansson

20

border-collapse: separate;Masayı ayarlamanız gerekir ; çoğu tarayıcı varsayılan stil sayfası başlar ve border-collapse: collapse;bu kenar boşluğunu kapatır.

Ayrıca, kenarlık aralığı: TDdeğil, devam eder TR.

Deneyin:

<html><head><style type="text/css">
    #ex    { border-collapse: separate; }
    #ex td { border-spacing: 1em; }
</style></head><body>
    <table id="ex"><tr><td>A</td><td>B</td></tr><tr><td>C</td><td>D</td></tr></table>
</body>

1
kenar boşluğu da td değil tablo için
silversky

4
Teşekkürler. Daha önce yorum düzeltmesinde teşekkür ettim, ama tarzımı değiştirmek ve süreçte kodu kırmak isteyen aşırı hevesli bir editör de teşekkürlerimi sildi. Şimdi buraya düzenlenemediği yere koyuyorum.
John Haugeland

18

Tabloda satır yüksekliğini kullanabilirsiniz :

<table style="width: 400px; line-height:50px;">

Haklısın ama Metin de iyi olmayan satır yüksekliğini alacak, sanırım coleman görmelisin! O güzel çözümü vardır
Waqas Tahir


11

Çok geç cevap :)

Öğelere kayan nokta uygularsanız tr, marginöznitelikli iki satır arasında boşluk bırakabilirsiniz .

table tr{
float: left
width: 100%;
}

tr.classname {
margin-bottom:5px;
}

12
Bu korkutucu. Bu aslında ne yapıyor satır için displayözelliği ayarlamaktır block. Bu, satırın kenar boşluğuna sahip olmasını sağlar. Dikey kenar boşluğu " Aşağıdakilere uygulanır: tablo başlığı, tablo ve satır içi tablo dışında tablo görüntüleme türleri dışındaki tüm öğeler ". Yana table-rowbu istisnalardan herhangi değildir, o halde onu sayılmaz. Muhtemelen aynı etkiyi yaparak da başarabilirsiniz. tr {display:block;}Ama karmaşık bir tabloda bu yöntemlerden birini kullanmaktan çekinirim. Muhtemelen beklediğinizle sonuçlanmayacaktır.
11'te sholsinger

Bu korkutucu, ama işe yaradı. İe7'de değil, doğrudan tablodaki hücre aralığı ie7'de çalışır.
Liko

yüzen satırlar iyi bir çözüm değildir .. özellikle sayfanız satır genişliğinden 2 kat daha büyükse. genişlik özelliğini her iki etikete de ekle
AndreaCi

11

Satırlar arasında bir boşluk yanılsaması oluşturmak için, satıra arka plan rengi uygulayın ve ardından bir "boşluk" oluşturulması için beyaz renkle kalın bir kenarlık oluşturun :)

tr 
{
   background-color: #FFD700;
   border: 10px solid white;
}

9

Tablolar için boşluk bırakmanın doğru yolu, hücre dolgusu ve hücre boşluğu kullanmaktır.

<table cellpadding="4">

5
Bunu daha "doğru" diyebileceğim CSS ile yapabilirsiniz (daha zarif olmasının yanı sıra biçimlendirmeyi CSS'ye taşımak bant genişliğinden tasarruf sağlar).
Camilo Martin

2
Bant genişliğinden tasarruf etmez. Aslında daha fazlasını kullanıyorum. Sadece bunun için bir stil sayfası eklemediğinizi varsayarsak, bu tabloya bir seçici ve muhtemelen bir kimlik veya ad eklemeniz gerekir. Bu daha az bayt değil.
majinnaibu

9

Benzer bir sorunla mücadele ederken buna tökezledim. Varun Natraaj'ın cevabının oldukça yardımcı olduğunu gördüm, ancak bunun yerine şeffaf bir kenarlık kullanacağım.

td { border: 1em solid transparent; }

Saydam kenarlıklar hala genişliğe sahiptir.


6

2015 yılında en son tarayıcılar için çalışır. Basit bir çözüm. Şeffaflık için işe yaramaz, ancak Thoronwen'in cevabından farklı olarak, herhangi bir boyutta render yapmak için şeffaf olamaz.

    tr {
      border-bottom:5em solid white;
    }

3

Basitçe içine divyerleştirin tdve aşağıdaki stilleri ayarlayın div:

margin-bottom: 20px;
height: 40px;
float: left;
width: 100%;

2

Bunun eski bir iş parçacığının cevabı olduğunu ve istenen çözüm olmayabilir, ancak tüm önerilen çözümler ihtiyacım olanı yapmasa da, bu çözüm benim için çalıştı.

Biri arka plan rengi diğeri kenarlık rengi olan 2 tablo hücresim vardı. Yukarıdaki çözümler sınırı kaldırır, böylece sağdaki hücre havada havada süzülüyormuş gibi görünecektir. Hile yaptı Çözelti değiştirmekti table, trve tddiv ve buna tekabül eden sınıfları ile: Tablo olur div id="table_replacer", tr olur div class="tr_replacer"ve td olacaktır div class="td_replacer"(değişiklik açıkça zamanda div etiket kapatma)

Benim sorunum için çözüm almak için css:

#table_replacer{display:table;}
.tr_replacer {border: 1px solid #123456;margin-bottom: 5px;}/*DO NOT USE display:table-row! It will destroy the border and the margin*/
.td_replacer{display:table-cell;}

Umarım bu birine yardımcı olur.


Imho, bu çözüm denedim normal tablo, tr, td desen ve stil tr {display: block;} kullanmaya eşdeğerdir. Sorun: td öğeleri tablo genişliğine dönüştürülmediği için tablo farklı görünüyor, ancak tr içinde bırakılıyor. Yani, tüm satırların td öğeleri artık dikey olarak hizalanmamıştır.
Andreas Stankewitz

0

<Td /> öğelerini <div /> öğeleriyle doldurabilir ve istediğiniz div'lere kenar boşluğu uygulayabilirsiniz. Satırlar arasındaki görsel boşluk için <tr /> öğesinde yinelenen bir arka plan görüntüsü kullanabilirsiniz. (Bu, bugün kullandığım çözümdü ve daha fazla test etmememe rağmen hem IE6 hem de FireFox 3'te çalışıyor gibi görünüyor.)

Ayrıca, <td /> s içine <div /> s koymak için sunucu kodunuzu değiştirmek istemiyorsanız, <td /> içeriğini <div / >, istediğiniz şekilde CSS uygulamanızı sağlar.


0

Veya boşluk eklemek istediğiniz satırların arasına kenar boşluğunun yüksekliğine sahip bir boşluk ekleyin


0

İşte birkaç uyarı ile basit ve zarif bir çözüm:

  • Aslında boşlukları şeffaf hale getiremezsiniz, onlara belirli bir renk vermeniz gerekir.
  • Boşlukların üstündeki ve altındaki kenarların köşelerini yuvarlayamazsınız
  • Tablo hücrelerinizin doldurma ve kenarlıklarını bilmeniz gerekir

Bunu göz önünde bulundurarak şunu deneyin:

td {padding:5px 8px;border:2px solid blue;background:#E0E0E0}  /* lets say the cells all have this padding and border, and the gaps should be white */

tr.gapbefore td {overflow:visible}
tr.gapbefore td::before,
tr.gapbefore th::before
{
  content:"";
  display:block;
  position:relative;
  z-index:1;
  width:auto;
  height:0;
  padding:0;
  margin:-5px -10px 5px;  /* 5px = cell top padding, 10px = (cell side padding)+(cell side border width)+(table side border width) */
  border-top:16px solid white;  /* the size & color of the gap you want */
  border-bottom:2px solid blue; /* this replaces the cell's top border, so should be the same as that. DOUBLE IT if using border-collapse:separate */
}

Aslında yaptığınız şey bir dikdörtgeni yapıştırmak ::before bloğu, boşluktan önce istediğiniz satırdaki tüm hücrelerin üstüne . Bu bloklar mevcut sınırların üst üste gelip onları gizlemek için hücrelerden biraz dışarı çıkar. Bu bloklar sadece bir üst ve alt sınır birlikte sandviçlenir: Üst sınır boşluğu oluşturur ve alt sınır hücrelerin orijinal üst sınırının görünümünü yeniden oluşturur.

Tablonun yanı sıra hücrelerin etrafında bir kenarlık varsa, 'bloklarınızın' yatay -ve kenar boşluğunu daha da artırmanız gerektiğini unutmayın. Yani 4 piksellik bir tablo kenarlığı için şunu kullanırsınız:

margin:-5px -12px 5px;     /* 14px = original 10px + 2px for 'uncollapsed' part of table border */

Tablonuz border-collapse:separatebunun yerine kullanıyorsa border-collapse:collapse, (a) tam tablo kenarlığı genişliğini kullanmanız gerekir:

margin:-5px -14px 5px;     /* 14px = original 10px + 4px full width of table border */

... ve ayrıca (b) boşluğun altında görünmesi gereken kenarlığın çift genişliğini değiştirin:

border-bottom:4px solid blue;     /* i.e. 4px = cell top border + previous row's bottom border */

Teknik, isterseniz bir .gapafter sürümüne veya satır boşlukları yerine dikey (sütun) boşluklar oluşturmaya kolayca uyarlanabilir.

İşte onu görebileceğiniz bir kod kalemi: https://codepen.io/anon/pen/agqPpW


-1

İşte bu sorunsuz çalışıyor:

#myOwnTable td { padding: 6px 0 6px 0;}

Gerektiğinde hangi td'yi belirterek daha ince taneli bir düzen çalıştırabileceğinizi varsayalım.


-5

yukarıda gösterilen bunu yapıyor ...

table tr{ float: left width: 100%; }  tr.classname { margin-bottom:5px; } 

dikey sütun hizalamasını kaldırır, bu nedenle nasıl kullandığınıza dikkat edin


-17

Denedin mi:

tr.classname { margin-bottom:5em; }

Alternatif olarak, her bir td de ayarlanabilir:

td.classname { margin-bottom:5em; }

veya

 td.classname { padding-bottom:5em; }

Bu gerçekten işe yarıyor mu? Benim var div.el { display: table-row; margin: 10px; }ve marj hiçbir şey yapmıyor. Gerçek bir tablodan biraz farklı olduğunu biliyorum, ama olmamalı ...
bradlis7

20
Tablo satırlarının / hücrelerinin kenar boşluğu yoktur.
Espen
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.