CSS: bagaimana cara membuat celah antar baris dalam tabel?

95

Artinya membuat tabel resultan terlihat kurang seperti ini:

[=== BARIS ===]
[=== BARIS ===]
[=== BARIS ===]
[=== BARIS ===]

... dan lainnya seperti ini:

[=== BARIS ===]

[=== BARIS ===]

[=== BARIS ===]

[=== BARIS ===]

Saya mencoba menambahkan

margin-bottom:1em;

ke td dan tr tetapi tidak mendapat apa-apa. Ada ide?

MGOwen
sumber
2
Mengapa tidak cellspacing dan cellpadding?
adatapost
1
Penspasian sel akan memberikan spasi antar kolom juga.
rahul
4
Cellspacing dan cellpadding bukan HTML (X) yang valid. Anda tidak boleh menggunakannya.
freiksenet
8
@freiksenet: Anda salah. Mereka sempurna berlaku HTML4 yang ketat ( w3.org/TR/html401/struct/tables.html#h-11.2.1 ), xhtml1 ( w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ) dan bahkan xhtml1 .1 ( w3.org/MarkUp/DTD/xhtml-table-1.mod ).
mercator
1
Kemungkinan duplikat Spasi antara dua baris dalam tabel?
ThisClark

Jawaban:

218

Semua yang Anda butuhkan:

table {
    border-collapse: separate;
    border-spacing: 0 1em;
}

Itu mengasumsikan Anda menginginkan celah vertikal 1em, dan tidak ada celah horizontal. Jika Anda melakukan ini, Anda mungkin juga harus melihat cara mengontrol ketinggian garis Anda.

Agak aneh bahwa beberapa jawaban yang diberikan orang melibatkan runtuhnya batas: runtuh, yang efeknya berlawanan dengan pertanyaan yang diajukan.

John Haugeland
sumber
oh iya, saya mencoba untuk mendapatkan kolom tertentu agar memiliki jarak yang lebih luas jadi tidak berpikir untuk menerapkannya ke tabel
Jonathan.
4
Solusi ini tidak memungkinkan Anda menerapkan spasi secara selektif ke baris tertentu.
Flimm
15
Pertanyaannya tidak meminta itu.
John Haugeland
Ini adalah ide yang bagus tetapi untuk mengisi celah teratas dari baris pertama saya harus menemukan solusi yang saya kira tidak standar tetapi berhasil. Memberikan thead, tbody {position: relative; top: -{border-spacing-value} }.
Farzad YZ
4
Bolehkah aku mengatakan bahwa aku mencintaimu? ya Tuhan. Anda baru saja menyimpan $$
NikosKeyz
94
table {
    border-collapse: collapse;
}

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

Sel tidak akan bereaksi terhadap apa pun kecuali Anda menyetel batas-runtuh terlebih dahulu. Anda juga dapat menambahkan batas ke elemen TR setelah itu disetel (antara lain.)

Jika ini untuk tata letak, saya akan beralih ke penggunaan DIV dan teknik tata letak yang lebih mutakhir, tetapi jika ini adalah data tabular, ketuk diri Anda sendiri. Saya masih sering menggunakan tabel di aplikasi web saya untuk data.

Ryan Florence
sumber
Apakah Anda mengujinya? Tampaknya td dapat memiliki bantalan dengan atau tanpa runtuh. Batas berfungsi dengan penciutan, tetapi tidak di IE.
Kobi
Ini berhasil. Menjengkelkan bahwa margin tidak berfungsi, tetapi tidak masalah dalam kasus ini. Terima kasih.
MGOwen
30
Ini adalah pendekatan yang sangat buruk. Anda memodifikasi kotak sel untuk memposisikan sel, bukan hanya memposisikan sel, dengan menggabungkan sel bersama-sama karena Anda ingin sel tersebut terpisah. Saat sel membutuhkan latar belakang, Anda kacau. Pendekatan yang benar adalah pemisahan perbatasan, bukan runtuhnya batas, menggunakan pemisahan perbatasan untuk mendefinisikan, Anda tahu, pemisahan perbatasan.
John Haugeland
1
Ini hampir merupakan bagian pertama dari CSS2 yang diimplementasikan, karena browser telah menerapkan celah tabel untuk versi HTML yang digunakan semua orang untuk tata letak yang akurat piksel. Ya, saya yakin. :)
John Haugeland
1
Itu adalah salah satu sudut aneh dari CSS yang tidak diketahui oleh siapa pun kecuali orang-orang yang telah membaca spesifikasi. (Ada jumlah yang sangat besar. Demikian pula float pada dasarnya tidak boleh digunakan dengan cara yang digunakan dalam praktik.)
John Haugeland
8

Jika tidak ada jawaban lain yang memuaskan, Anda selalu dapat membuat baris kosong dan menatanya dengan CSS secara tepat agar transparan.

Flimm
sumber
Mengapa suara negatifnya? Jawaban lain bermasalah: jawaban rpflo mengharuskan Anda menggunakan border-collapse dan untuk memperluas bantalan sel, membuat sel tampak lebih besar daripada membuat spasi di antara mereka. Jawaban John Haugeland tidak memungkinkan Anda menerapkan spasi pada baris tertentu secara selektif. Saya dapat melanjutkan tetapi jawaban ini adalah salah satu opsi yang berfungsi untuk kasus penggunaan saya ketika tidak ada jawaban lain yang berhasil.
Flimm
2
Pendekatan downvoting pengguna anonim untuk menentukan tinggi baris individual dengan CSS jauh lebih baik daripada menambahkan konten dummy ke tabel, jika Anda perlu mengontrol baris individual, yang sebenarnya bukan pertanyaan ini.
John Haugeland
Baris palsu juga membingungkan alat yang mengharapkan baris tabel menjadi baris tabel (seperti alat aksesibilitas penting bagi penyandang cacat, dan plugin umum untuk mengekspor / menyortir / memformat ulang / dll). Ada banyak alasan untuk menggunakan gaya untuk mengontrol gaya, daripada memasukkan barang palsu, sebagai aturan umum. Baca tentang Semantic Markup untuk info lebih lanjut.
MGOwen
@MGOwen Bisakah Anda memberi nama alat aksesibilitas yang akan gagal dalam skenario ini, dan bagaimana alat itu akan gagal? Saya sekarang skeptis dengan saran aksesibilitas yang tidak menyebutkan secara spesifik, ada banyak saran aksesibilitas buruk di luar sana yang tidak benar-benar membantu siapa pun (misalnya, saran garis besar dokumen untuk HTML 5 semuanya salah , alat aksesibilitas tidak bekerja dengan cara orang mengatakan mereka bekerja).
Flimm
4

Jika Anda tidak memiliki batas, atau memiliki batas dan menginginkan penspasian di dalam sel, Anda dapat menggunakan padding, atau line-height. Sejauh yang saya tahu, margin tidak berpengaruh pada sel dan baris.
Properti CSS untuk penspasian sel adalah border-spacing, tetapi tidak berfungsi di IE6 / 7 (jadi Anda dapat menggunakannya tergantung pada kerumunan Anda).

Jika semuanya gagal, Anda dapat menggunakan cellspacingatribut lama di markup Anda - tetapi ini juga akan memberi Anda jarak antar kolom. Beberapa penyetelan ulang CSS menyarankan Anda tetap harus menyetelnya untuk mendapatkan dukungan lintas browser:

/ * tabel masih perlu cellspacing="0"di markup * /

Kobi
sumber
2

Inilah caranya (saya pikir itu tidak mungkin):

Pertama berikan tabel hanya spasi batas vertikal (misalnya 5px) dan setel spasi batas horizontal ke 0. Kemudian Anda harus memberikan batas yang tepat untuk setiap sel baris. Misalnya sel paling kanan di setiap baris harus memiliki batas di atas, bawah dan kanan. Sel paling kiri harus memiliki batas di atas, bawah, dan kiri. Dan sel lain di antara 2 ini seharusnya hanya memiliki batas di atas dan bawah. Seperti contoh ini:

<table style="border-spacing:0 5px; color:black">
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
    <tr>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-left:thin black solid;">left-most cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid;">other cell</td>
        <td style="border-bottom:thin black solid; border-top:thin black solid; border-right:thin black solid;">right-most cell</td>
    </tr>
</table>
Arash Esmaeili
sumber
1

Menurut saya, cara termudah untuk dilakukan adalah menambahkan padding ke tag Anda.

td {
 padding: 10px 0
}

Semoga ini bisa membantu Anda! Bersorak!

Huy Le
sumber
Ini menciptakan ruang ekstra di dalam baris tabel. Jika baris tabel memiliki warna yang tidak akan terlihat bagus.
Kokodoko
1

Cukup Anda dapat menggunakan padding-topdan padding-bottompada tdelemen.

Unit bisa apa saja dari daftar ini:

masukkan deskripsi gambar di sini

Kode Demo:

td
{
  padding-top: 10px;
  padding-bottom: 10px;
}
<table>
  <tr>
    <th>Firstname</th>
    <th>Lastname</th>
  </tr>
  <tr>
    <td>Peter</td>
    <td>Griffin</td>
  </tr>
  <tr>
    <td>Lois</td>
    <td>Griffin</td>
  </tr>
</table>

Abrar Jahin
sumber
0

padding di TD berfungsi jika Anda ingin ruang memiliki warna latar belakang yang sama dengan td

dalam kasus saya, persyaratannya adalah untuk spasi antara baris header dan apa pun yang ada di atasnya

dengan menerapkan gaya ini ke satu sel, saya bisa mendapatkan pemisahan yang diinginkan. Tidak perlu menambahkannya ke semua sel ... Bisa dibilang bukan yang PALING elegan, tapi mungkin lebih elegan daripada baris pemisah.

<td colspan="10"> 
    <div class="HeaderRow" 
         style="margin-top:10px;">
            <%# Eval("VendorName")%>
     </div>
</td>  
greg
sumber
-1

Jika Anda tetap menggunakan desain menggunakan tabel, ide terbaiknya adalah memberikan baris kosong tanpa konten dan ketinggian yang ditentukan di antara setiap baris dalam tabel.

Anda dapat menggunakan div untuk menghindari kerumitan ini. Beri margin untuk setiap div.

rahul
sumber
1
Masih ada alasan bagus untuk menggunakan tabel (seperti data tabel). Anda benar, baris kosong tentu saja merupakan rute yang konyol: P Tapi ada solusi, runtuh batas.
Ryan Florence
-1

Anda juga bisa mengubah tinggi untuk setiap baris menggunakan CSS.

<head>
 <style>
 tr {
   height:40px;
 }
</style>
</head>

<body>
<table>

<tr> <td>One</td> <td>Two</td> </tr>
<tr> <td>Three</td> <td>Four</td> </tr>
<tr> <td>Five</td> <td>Six</td> </tr>

</table>
</body>

Anda juga dapat mengubah ketinggian <td>elemen, itu akan memberi Anda hasil yang sama.


sumber
-1

Buat yang lain <tr>tepat di bawah dan tambahkan beberapa ruang atau ketinggian ke konten<td>

masukkan deskripsi gambar di sini

Lihat biola misalnya

https://jsfiddle.net/jd_dev777/wx63norf/9/

Jaydeep Chauhan
sumber
Ini dianggap praktik yang buruk. Salah satu alasannya adalah bahwa alat (seperti pembaca untuk pengguna yang dinonaktifkan) mengharapkan baris tabel menjadi baris tabel, dan akan mengekspor / membaca / menafsirkan baris "palsu" Anda yang dicampur dengan yang asli. Lihat pertama kali jawaban yang sama diberikan pada tahun 2014 di atas.
MGOwen
1
@MGOwen terima kasih atas saran Anda. benar-benar setuju
Jaydeep Chauhan
-4

Tambahkan aturan berikut ke tr dan seharusnya berhasil

float: left

Contoh (Buka di IE9 offcourse :)): http://jsfiddle.net/zshmN/

EDIT: Ini bukan solusi yang sah atau benar seperti yang ditunjukkan oleh banyak orang, tetapi jika Anda tidak memiliki pilihan dan membutuhkan sesuatu, ini akan berfungsi di IE9.

Jadi semua yang memberikan suara, tolong beri tahu kami solusi yang benar juga

Sandeep Choudhary
sumber
3
Pendekatan ini mencegah pelapisan kolom otomatis saat sel berisi data dengan dimensi berbeda - markup tabel pada dasarnya tidak ada gunanya. Ini bekerja cukup baik dalam contoh yang diberikan, tetapi ini bukan teknik yang disarankan. Ubah teks sel untuk melihat apa yang saya maksud.
verism
Hai @verism, maaf tapi saya tidak mengerti maksud Anda. Bisakah Anda menjelaskannya sedikit lagi? Atau jika Anda dapat memberikan biola di mana metode ini gagal karena saya telah menggunakan metode ini secara ekstensif dan ingin menangani skenario di mana gagal.
Sandeep Choudhary
Tidak ada penggambaran kolom yang jelas; yang berarti data tabel kehilangan struktur visualnya dan menjadi lebih sulit untuk dibaca. jsfiddle.net/verism/zshmN/5
verism
@verism ya ini adalah salah satu masalah, tetapi kita dapat menentukan kolom lebar tetap. Saya tahu ini bukan solusi yang baik, tetapi saya tidak menemukan solusi lain yang berfungsi di IE9
Sandeep Choudhary
1
Baris tabel mengambang tidak legal menurut spesifikasi CSS. CSS2 bagian 17 mengharuskan elemen display: table-row berada di dalam display: table-row-group, -header-group, atau -footer-group elemen. Namun, algoritma mengambang menurut bagian 9 menyuntikkan induk blok anonim. Ini berarti baris tabel tidak lagi memiliki tata letak induk yang sah, dan browser sedang menebak apa yang harus dilakukan. Ini benar-benar salah.
John Haugeland