Spasi antara dua baris dalam sebuah tabel?

755

Apakah ini mungkin melalui CSS?

saya sedang mencoba

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

tidak berhasil. Mungkin saya melakukan sesuatu yang salah?

Marin
sumber
Apa itu browser dan dapatkah Anda memberikan potongan kode Anda (html / css)?
Patrick Desjardins
baik saya menggunakan ff3 karena saya tahu bahwa seharusnya mendukung Aturan tapi untuk saat ini saya ingin memperbaikinya di ff3. Saya mencoba spasi dan padding sejauh ini tidak berhasil. productlistingitem adalah tabel utama <table class = "productListingItem" border = "0" cellpadding = "10" cellspacing = "0"> <tr> <tr> <td class = "dragItem">
Marin
1
Mungkin itu karena border-spacingatribut terkait tabledan tidak tr. Coba table.classname {border-spacing:5em}. Note: IE8 mendukung properti penskalaan perbatasan jika! DOCTYPE ditentukan.
Varun Natraaj
Saya menggunakan ketinggian garis ketika tidak ada batas.
Leah
Apakah ini menjawab pertanyaan Anda? CSS: bagaimana cara membuat celah antara baris dalam sebuah tabel?
alexalejandroem

Jawaban:

523

Anda perlu menggunakan bantalan pada tdelemen Anda . Sesuatu seperti ini harus melakukan triknya. Anda bisa, tentu saja, mendapatkan hasil yang sama menggunakan bantalan atas bukan bantalan bawah.

Dalam kode CSS di bawah ini, tanda lebih besar berarti bahwa padding hanya diterapkan pada tdelemen yang mengarahkan anak-anak ke trelemen dengan kelas spaceUnder. Ini akan memungkinkan untuk menggunakan tabel bersarang. (Sel C dan D dalam contoh kode.) Saya tidak terlalu yakin tentang dukungan browser untuk pemilih anak langsung (pikirkan IE 6), tetapi seharusnya tidak memecah kode di browser modern.

/* 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>

Ini seharusnya membuat agak seperti ini:

+---+---+
| A | B |
+---+---+
| C | D |
|   |   |
+---+---+
| E | F |
+---+---+
Jan Aagaard
sumber
1
code.google.com/p/ie7-js menambahkan dukungan kepada pemilih anak di ie5.5, ie6, ie7 juga
Antony Hatchkins
403
Kecuali ini tidak menyelesaikan masalah sama sekali ketika baris Anda memiliki warna latar belakang dan Anda benar-benar ingin WHITESPACE di antara baris Anda.
Simon East
6
@Simon: Whitespace biasanya merujuk pada ruang kosong, dan tidak secara khusus warna putih. Jika Anda ingin mewarnai ruang di antara baris, Anda dapat mencoba dengan properti CSS <code> border-bottom </code> pada elemen td. Itu mungkin hanya akan merender dengan benar dengan batas 1px. Solusi lain, tetapi tidak begitu elegan, adalah menggunakan baris kosong.
Jan Aagaard
18
@ Jan: Ya, maksud saya ... Cukup sulit untuk menempatkan ruang kosong yang transparan di antara baris. Solusi Anda membantu dalam beberapa kasus, tetapi tidak menyelesaikan masalah itu. Memasukkan baris tabel kosong mungkin berhasil, tetapi ini sangat buruk. Perangkat bottom-bordertransparan mungkin juga berfungsi, tetapi saya tidak yakin seberapa kompatibel lintas-browser.
Simon East
1
@Simon: Coleman memiliki solusi jelek yang belum berfungsi untuk masalah Anda .
eggy
387

Di tabel induk, coba pengaturan

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

Ditambah deklarasi perbatasan, dan lihat apakah ini mencapai efek yang Anda inginkan. Berhati-hatilah, bahwa IE tidak mendukung model "separated borders".

pengguna37731
sumber
5
Ya, metode ini akan ideal, kecuali bahwa IE 7 tidak mendukungnya. Untuk dukungan browser, lihat: quirksmode.org/css/tables.html
Simon East
7
Selain itu, ia mengontrol spasi di semua baris dalam tabel, Anda tidak dapat mengatur spasi baris untuk setiap baris (yang mungkin ingin dicapai oleh OP).
Simon East
1
Ini tidak konsisten antara Chrome dan Firefox. Jika Anda memiliki theaddan tbody, itu akan membuat rangkap dua di border-spacingantaranya, di Chrome (tetapi satu di Firefox).
Camilo Martin
91
Ini adalah jawaban yang sebenarnya, secara khusus diatur border-spacing: 0 1emuntuk mendapatkan jarak antar baris saja.
igneosaur
1
@igneosaurus Saya mencoba melakukan apa yang Anda katakan tetapi masih menambahkan jarak antara semua baris dan bukan hanya dua yang pertama. Bisakah Anda memberikan jsfiddle yang berfungsi?
user3281466
184

Anda memiliki tabel dengan album id dengan data apa pun ... Saya telah menghapus trs dan tds

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

Di css:

table#albums 
{
    border-collapse:separate;
    border-spacing:0 5px;
}
Pradyut Bhattacharya
sumber
15
ini bekerja dengan baik untuk saya. argumen jarak-batas pertama adalah jarak horizontal antara sel, dan yang kedua adalah jarak vertikal.
Itu tidak selalu harus dengan CSS mewah jika HTML lama yang baik dapat melakukan pekerjaan :)
luator
apakah mungkin untuk menerapkan hanya untuk tr di dalam "tbody"?
Jaison
129

karena saya memiliki gambar latar belakang di belakang meja, berpura-pura dengan bantalan putih tidak akan berfungsi. Saya memilih untuk meletakkan baris kosong di antara setiap baris konten:

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

kemudian gunakan css untuk memberi baris spacer ketinggian tertentu dan latar belakang transparan.

Koleman
sumber
3
Ini mungkin lebih fleksibel, saya pikir. Anda tidak dapat selalu mengontrol ketika sebelumnya Anda membutuhkan ruang (halaman yang dihasilkan secara dinamis).
Stefan Kendall
10
Ini mengingatkan saya pada tahun 90-an, ketika dukungan CSS hampir tidak ada dan tabel digunakan untuk sebagian besar tata letak. Saya masih memberikannya +1, karena "jawaban" lainnya tidak lebih baik dalam hal benar-benar membuat ruang antar baris tabel.
labirin
@ labirin Tidak banyak yang berubah sejak tahun 90an. Mengenai HTML, semuanya hanya menjadi jauh lebih kuat dan lebih berantakan.
maaartinus
73

Dari Jaringan Pengembang Mozilla :

Properti CSS spasi-batas menentukan jarak antara batas sel yang berdekatan (hanya untuk model batas yang terpisah). Ini sama dengan atribut cellspacing dalam HTML presentasi, tetapi nilai opsional kedua dapat digunakan untuk mengatur jarak horizontal dan vertikal yang berbeda.

Bagian terakhir itu sering diawasi. Contoh:

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

MEMPERBARUI

Saya sekarang mengerti bahwa OP ingin baris yang spesifik dan terpisah untuk meningkatkan jarak. Saya telah menambahkan pengaturan dengan tbodyelemen yang menyelesaikannya tanpa merusak semantik. Namun, saya tidak yakin apakah itu didukung di semua browser. Saya membuatnya di Chrome.

Contoh di bawah ini adalah untuk menunjukkan bagaimana Anda dapat membuatnya tampak seperti tabel ada baris terpisah, manis penuh sesak nafas. Juga memberi spasi lebih pada baris pertama dengan tbodypengaturan. Jangan ragu untuk menggunakannya!

Pemberitahuan dukungan: 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>

Justus Romijn
sumber
Jika saya ingin beberapa ruang antara dua baris tertentu saya hanya menambahkan baris spacer <tr> <td colspan = "2" style = "padding-bottom: 1em;"> </td> </tr>
Paul Taylor
Itu akan bekerja tetapi secara semantik tidak benar (seperti pada, baris pemisah Anda bukan baris aktual dengan data seperti baris lainnya. Ini dapat mengganggu bagi orang yang menggunakan pembaca layar atau perangkat asisten lainnya, serta untuk tujuan pengindeksan dan suka. Ini mungkin tidak membuat perbedaan besar tetapi bagus untuk tetap mengingatnya saat mengembangkan situs web :)
Justus Romijn
Itu benar, jika dia benar-benar menggunakan tabel untuk mewakili tabel. Jika dia hanya menggunakan tabel sebagai cara untuk menampilkan data secara tabular maka saya berpendapat lebih masuk akal untuk menyisipkan baris untuk merepresentasikan kesenjangan antara dua item daripada hanya menambahkan spasi pada salah satu bagian di atas atau di bawah garis karena apa yang ingin dilakukan pengguna adalah menambah ruang antara dua garis, bukan menambah ukuran elemen dalam garis.
Paul Taylor
53

Anda dapat mencoba menambahkan baris pemisah:

html:

<tr class="separator" />

css:

table tr.separator { height: 10px; }
Denis
sumber
7
Untuk IE, tr tanpa tubuh tidak akan dikenali. tambahkan dummy td tag juga.
Tidur
Masalahnya adalah bahwa dalam HTML5, validator W3C akan memancarkan kesalahan yang mengatakan "Baris tabel adalah lebar 0 kolom, yang kurang dari jumlah kolom yang ditetapkan oleh baris pertama".
David Grayson
Bagus, saya telah menambahkan <tr>, <td> dan <p> lainnya dan mengatur visibilitas p-tag ke hidden .. Juga berfungsi. :-)
Jeppe
47

Anda tidak dapat mengubah margin sel tabel. Tapi Anda BISA mengganti padding. Ubah padding dari TD, yang akan membuat sel lebih besar dan mendorong teks menjauh dari samping dengan padding yang meningkat. Namun, jika Anda memiliki garis perbatasan, tetap tidak akan persis seperti yang Anda inginkan.

Robert C. Barth
sumber
Yap, padding akan mendorong perbatasan ke bawah, jadi border-bottomdan padding-bottomartinya perbatasan akan berada di bawah padding.
Dan Dascalescu
21

Lihatlah border-collapse: atribut terpisah (default) dan spasi-perbatasan properti .

Pertama, Anda harus memisahkannya dengan border-collapse , lalu Anda dapat mendefinisikan ruang antara kolom dan baris dengan spasi-perbatasan .

Kedua properti CSS ini sebenarnya didukung dengan baik di setiap browser, lihat di sini .

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>

Syno
sumber
20

Ok, bisa kamu lakukan

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

Pastikan warna latar diatur pada td daripada baris. Ini harus berfungsi di sebagian besar browser ... (Chrome, mis. & Jika diuji)

Paul
sumber
Ini menciptakan masalah pelurusan vertikal yang aneh, setidaknya di Firefox
cjohansson
20

Anda perlu mengatur border-collapse: separate;di atas meja; kebanyakan stylesheet default browser dimulai border-collapse: collapse;, yang membuang batas perbatasan.

Juga, penspasian batas: berjalan pada TD, bukan TR.

Mencoba:

<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>
John Haugeland
sumber
1
border-spacing juga untuk tabel tidak td
silversky
4
Terima kasih. Saya berterima kasih kepada Anda dalam perbaikan komentar sebelumnya, tetapi editor yang terlalu bersemangat yang ingin mengubah gaya saya dan memecahkan kode dalam proses juga menghapus ucapan terima kasih saya. Saya sekarang meletakkannya di sini di tempat yang tidak bisa diedit.
John Haugeland
18

Anda dapat menggunakan ketinggian garis dalam tabel:

<table style="width: 400px; line-height:50px;">
alansiqueira27
sumber
Anda benar tetapi Teks juga akan mendapatkan ketinggian garis yang tidak baik, saya pikir Anda harus melihat coleman! Dia memiliki solusi yang bagus
Waqas Tahir
13
tr { 
    display: block;
    margin-bottom: 5px;
}
Moe
sumber
saya lebih suka tampilan: inline-block;
DS_web_developer
11

Jawaban yang terlambat :)

Jika Anda menerapkan float ke trelemen, Anda bisa memberi spasi di antara dua baris dengan marginatribut.

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

tr.classname {
margin-bottom:5px;
}
Oguzhan Ozel
sumber
12
Itu menakutkan. Apa yang sebenarnya dilakukan adalah mengatur displayproperti blockuntuk baris. Ini memungkinkan baris memiliki margin. Margin vertikal " Berlaku untuk: semua elemen kecuali yang memiliki tipe tampilan tabel selain keterangan tabel, tabel, dan tabel sebaris ". Karena table-rowbukan salah satu dari pengecualian itu, maka itu tidak masuk hitungan. Anda mungkin dapat mencapai efek yang sama dengan melakukan tr {display:block;}Tapi saya akan berhati-hati menggunakan salah satu dari metode ini dalam tabel yang rumit. Kemungkinan tidak akan menghasilkan apa yang Anda harapkan.
sholsinger
Menakutkan, tetapi berhasil. Tidak di ie7, tetapi cellspacing langsung di tabel berfungsi di ie7.
Liko
baris mengambang bukan solusi yang baik .. terutama jika halaman Anda lebih besar dari 2x lebar baris. tambahkan atribut width ke kedua tag
AndreaCi
11

Untuk membuat ilusi jarak antar baris, terapkan warna latar belakang ke baris dan kemudian buat batas tebal dengan warna putih sehingga "ruang" dibuat :)

tr 
{
   background-color: #FFD700;
   border: 10px solid white;
}
Varun Natraaj
sumber
9

Cara yang benar untuk memberikan spasi untuk tabel adalah dengan menggunakan cellpadding dan cellspacing misalnya

<table cellpadding="4">
Usman Zaheer
sumber
5
Anda dapat melakukan ini melalui CSS, yang menurut saya lebih "benar" (selain fakta bahwa itu lebih elegan, memindahkan penataan dari markup ke CSS menghemat bandwidth).
Camilo Martin
2
Itu tidak menghemat bandwidth. Saya sebenarnya menggunakan lebih banyak. Dengan asumsi Anda tidak menambahkan stylesheet hanya untuk ini, Anda perlu menambahkan pemilih dan mungkin id atau nama ke tabel ini. Itu lebih banyak byte tidak kurang.
majinnaibu
9

Saya menemukan ini saat berjuang dengan masalah yang sama. Saya menemukan jawaban Varun Natraaj cukup membantu, tetapi saya akan menggunakan perbatasan transparan sebagai gantinya.

td { border: 1em solid transparent; }

Batas transparan masih memiliki lebar.

Thoronwen
sumber
6

Berfungsi untuk sebagian besar browser terbaru pada tahun 2015. Solusi sederhana. Ini tidak berfungsi untuk transparan, tetapi tidak seperti jawaban Thoronwen, saya tidak bisa transparan untuk membuat ukuran apa pun.

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

Cukup letakkan divdi dalam tddan atur gaya berikut div:

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

Saya menyadari ini adalah jawaban untuk utas lama dan mungkin bukan solusi yang diminta, tetapi sementara semua solusi yang disarankan tidak melakukan apa yang saya butuhkan, solusi ini bekerja untuk saya.

Saya memiliki 2 sel tabel, satu dengan warna latar belakang, yang lain dengan warna batas. Solusi di atas menghilangkan batas, sehingga sel di sebelah kanan akan tampak mengambang di udara. Solusi yang melakukan triknya adalah mengganti table, trdan tddengan divs dan kelas yang sesuai: tabel akan menjadi div id="table_replacer", tr akan menjadi div class="tr_replacer"dan td akan menjadi div class="td_replacer"(mengubah tag penutup ke divs juga jelas)

Untuk mendapatkan solusi untuk masalah saya, css adalah:

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

Semoga ini bisa membantu seseorang.

bolvo
sumber
Imho, solusi ini setara dengan menggunakan tabel biasa, tr, pola td dan style tr {display: block;} yang saya coba. Masalah: tabel terlihat berbeda, karena elemen td tidak dirender ke lebar tabel, tetapi mengambang ke kiri di dalam tr. Berarti, elemen td dari semua baris tidak lagi disejajarkan secara vertikal.
Andreas Stankewitz
0

Anda dapat mengisi elemen <td /> dengan elemen <div />, dan menerapkan margin apa pun ke div yang Anda suka. Untuk ruang visual di antara baris, Anda dapat menggunakan gambar latar berulang di elemen <tr />. (Ini adalah solusi yang baru saya gunakan hari ini, dan tampaknya berfungsi di IE6 dan FireFox 3, meskipun saya tidak mengujinya lebih lanjut.)

Juga, jika Anda enggan memodifikasi kode server Anda untuk meletakkan <div /> di dalam <td /> s, Anda dapat menggunakan jQuery (atau yang serupa) untuk secara dinamis membungkus konten <td /> dalam <div /> >, memungkinkan Anda untuk menerapkan CSS seperti yang diinginkan.

John Fisher
sumber
0

Atau cukup tambahkan kosong dengan ketinggian margin di antara baris yang ingin Anda tambahkan spasi

John Magnolia
sumber
0

Inilah solusi sederhana dan elegan, dengan beberapa peringatan:

  • Anda tidak dapat benar-benar membuat celah transparan, Anda harus memberi mereka warna tertentu.
  • Anda tidak dapat membulatkan sudut batas di atas & di bawah celah
  • Anda perlu mengetahui lapisan dan batas sel tabel Anda

Dengan mengingat hal itu, coba ini:

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 */
}

Apa yang sebenarnya Anda lakukan adalah menempelkan persegi panjang ::before blok bagian atas semua sel di baris yang Anda inginkan diawali dengan celah. Blok ini sedikit keluar dari sel untuk tumpang tindih dengan batas yang ada, menyembunyikannya. Blok-blok ini hanyalah batas atas dan bawah yang diapit bersama: Batas atas membentuk celah, dan batas bawah menciptakan kembali tampilan batas atas asli sel.

Perhatikan bahwa jika Anda memiliki batas di sekeliling tabel itu sendiri dan juga sel, Anda harus lebih meningkatkan margin horizontal -ve dari 'blok' Anda. Jadi untuk batas tabel 4px, Anda sebaiknya menggunakan:

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

Dan jika tabel Anda menggunakan border-collapse:separatebukan border-collapse:collapse, maka Anda harus (a) menggunakan lebar perbatasan tabel penuh:

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

... dan juga (b) ganti double-lebar perbatasan yang sekarang perlu muncul di bawah celah:

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

Teknik ini mudah disesuaikan dengan versi .gapafter, jika Anda suka, atau untuk membuat celah vertikal (kolom) alih-alih celah baris.

Berikut adalah codepen tempat Anda dapat melihatnya dalam aksi: https://codepen.io/anon/pen/agqPpW

Lakukan
sumber
-1

Ini berfungsi dengan baik:

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

Saya kira Anda bisa bekerja di tata letak yang lebih halus dengan menentukan td yang jika perlu.

Brice Coustillas
sumber
-5

melakukan ini ditunjukkan di atas ...

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

menghapus penyelarasan kolom vertikal jadi berhati-hatilah bagaimana Anda menggunakannya

richardh
sumber
-17

Sudahkah Anda mencoba:

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

Atau, masing-masing td dapat disesuaikan juga:

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

atau

 td.classname { padding-bottom:5em; }
Agustus
sumber
Apakah ini berhasil? Saya punya div.el { display: table-row; margin: 10px; }, dan margin tidak melakukan apa pun. Saya tahu ini sedikit berbeda dari meja sebenarnya, tetapi seharusnya tidak ...
bradlis7
20
Baris tabel / sel tidak memiliki margin.
Espen