Saya punya meja seperti ini:
<table>
<tfoot>
<tr><td>footer</td></tr>
</tfoot>
<tbody>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
<tr><td>Body 1</td></tr>
</tbody>
<tbody>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
<tr><td>Body 2</td></tr>
</tbody>
<tbody>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
<tr><td>Body 3</td></tr>
</tbody>
</table>
Saya ingin memberi jarak antara setiap elemen tubuh, tetapi padding dan margin tidak berpengaruh. Ada ide?
Jawaban:
Coba ini, jika Anda tidak keberatan tidak memiliki perbatasan.
sumber
transparent
sebagai warna perbatasan. Apa yang dikatakan @SteveAlmond.transparent
akan memberikan warna latar belakang elemen, yang pada dasarnya tidak dapat dibedakan dari badan elemen. Anda perlu mewarnai perbatasan secara eksplisit dengan warna yang Anda inginkan (agar tidak terlihat)Sesuatu seperti ini akan berfungsi, tergantung pada persyaratan dukungan browser Anda:
sumber
display: table-row;
?Orang akan selalu memiliki opini kontroversial tentang penggunaan elemen tabel kosong untuk mengatur tata letak halaman (sebagaimana dibuktikan dengan suara negatif jawaban ini). Saya mengenali ini, tetapi terkadang lebih mudah menggunakannya dengan cara ini saat Anda bekerja dengan cara yang " cepat dan kotor ".
Saya telah menggunakan baris kosong di proyek sebelumnya ke grup spasi dari baris tabel. Saya menetapkan baris spacer kelas css mereka sendiri dan menentukan ketinggian untuk kelas itu yang bertindak sebagai margin atas dan bawah untuk grup baris tabel itu.
Jika Anda tidak memiliki batas pada sel tabelAnda,Anda juga dapat menentukan ketinggian ke sel atau baris khas Anda dalam lembar gaya yang memberi spasi merata di semua baris tabel Anda.sumber
Saya telah mengalami masalah dalam mengatur jarak beberapa
<tbody>
dengan::before
semu, karena<tr>
mengandung<td>
dengan rowpan di beberapa browser.Pada dasarnya, jika Anda memiliki
<tbody>
struktur seperti ini:Dan Anda mengikuti siapa yang menyarankan untuk menulis css pada
::before
elemen semu seperti ini:Ini akan mempengaruhi rowpan, membuat tabel "kehilangan" dalam hitungan detik
<tr>
berapa banyak<td>
-rowspan yang ada di baris pertama.Jadi, jika ada yang menemui masalah seperti itu, solusinya adalah gaya
::before
semu dengan cara ini:Ini biola
sumber
Berikut kemungkinan lain yang bergantung pada: first-child yang tidak tersedia di semua browser:
sumber
Cukup atur
display
sebagaiblock
dan itu akan berhasil.sumber
display:block
merusak kesejajaran kolom antara elemen tubuh. Anda tidak lagi mendapatkan keuntungan dari mesin tata letak tabelDari semua jawaban yang diberikan di atas, hanya jawaban djenson47 yang mempertahankan pemisahan antara penyajian dan konten . Kelemahan dari metode model batas yang diciutkan adalah Anda tidak dapat lagi menggunakan atribut batas tabel atau spasi sel untuk memisahkan sel individu. Anda dapat berargumen bahwa ini adalah hal yang baik, dan ada beberapa solusi, tetapi bisa menyebalkan. Jadi menurut saya metode anak pertama adalah yang paling elegan.
Alternatifnya, Anda juga dapat menyetel properti overflow kelas TBODY Anda ke selain "terlihat". Metode ini memungkinkan Anda mempertahankan model perbatasan yang terpisah juga:
sumber
Karena padding dapat diterapkan ke TD, Anda dapat melakukan trik dengan tanda +. Maka dimungkinkan untuk memberikan bantalan atas ke TD dari TR pertama dari sebuah tbody:
Saya telah menambahkan "tbody + tbody" sehingga tbody pertama tidak akan memiliki bantalan atas. Namun, itu tidak wajib.
Sejauh yang saya tahu tidak ada kekurangan :), meskipun tidak menguji browser lama.
sumber
Anda dapat menggunakan
border-spacing
tabel dengan grup baris tabel untuk menambahkan spasi di antara grup tersebut. Padahal, menurut saya tidak ada cara untuk menentukan grup mana yang diberi spasi dan mana yang tidak.CSS
sumber
JAWABAN BARU
Anda dapat menggunakan
<tbody>
tag sebanyak yang Anda suka. Saya tidak menyadari bahwa W3C tidak masalah sampai sekarang. Bukan untuk mengatakan solusi saya di bawah ini tidak berfungsi (itu berhasil), tetapi untuk melakukan apa yang Anda coba lakukan, tetapkan<tbody>
kelas tag Anda dan kemudian referensi<td>
tag individual mereka melalui CSS seperti:dan HTML Anda sebagai berikut:
Coba orang itu :)
JAWABAN LAMA
apapun yang Anda lakukan, JANGAN masukkan baris kosong ...
Anda tidak boleh memiliki lebih dari 1 elemen tubuh di tabel Anda. yang dapat Anda lakukan adalah menyetel atribut class atau id di
<tr>
elemen Anda dan memberikan<td>
padding tag yang sesuai :Anda bahkan dapat menetapkan kelas tambahan atas dan bawah
<tr>
sehingga mereka hanya melakukan bantalan atas atau bawah, masing-masing:dan di HTML Anda,
<tr>
tag Anda akan terlihat seperti ini:Semoga ini membantu!
sumber
jawaban djensen47 berfungsi baik untuk browser yang lebih baru, namun, seperti yang ditunjukkan, IE7 tidak berfungsi.
Solusi saya untuk masalah ini untuk mendukung browser lama adalah dengan membungkus setiap konten sel di dalam div. Kemudian tambahkan margin-top ke div.
CSS
Pengaturan tinggi menjaga sel setidaknya 30px tinggi untuk mencegah pewarnaan sel yang digunakan di dalam div dari runtuh di sekitar teks. Margin atas menciptakan ruang yang diinginkan dengan membuat seluruh baris lebih tinggi.
sumber
Menemukan ini sambil mencoba menyelesaikannya sendiri. Saya sukses dengan meletakkan
<br>
tag tepat sebelum</tbody>
tag penutup . Ini murni perbaikan visual, tetapi tampaknya berfungsi di sebagian besar browser yang saya uji.Harus dapat diakses juga.
sumber