Atur cellpadding dan cellspacing di CSS?

3317

Dalam tabel HTML, cellpaddingdan cellspacingdapat diatur seperti ini:

<table cellspacing="1" cellpadding="1">

Bagaimana hal yang sama dapat dilakukan dengan menggunakan CSS?

kokos
sumber
6
Hanya saran umum, periksa untuk melihat apakah style.css Anda melakukan "reset" pada tabel Anda sebelum mencoba solusi ini. Contoh: Jika Anda tidak mengatur tabel width:automaka border-collapsemungkin tidak berfungsi seperti yang diharapkan.
PJ Brunet
1
Gunakan spasi-batas di atas meja dan padding pada td.
Anubhav

Jawaban:

3555

Dasar-dasar

Untuk mengendalikan "cellpadding" di CSS, Anda cukup menggunakan paddingsel tabel. Misalnya untuk 10px "cellpadding":

td { 
    padding: 10px;
}

Untuk "ruang seluler", Anda bisa menerapkan border-spacingproperti CSS ke tabel Anda. Misalnya untuk 10px "ruang seluler":

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

Properti ini bahkan akan memungkinkan jarak horizontal dan vertikal yang terpisah, sesuatu yang tidak dapat Anda lakukan dengan "ruang sel" sekolah lama.

Masalah di IE <= 7

Ini akan berfungsi di hampir semua browser populer kecuali Internet Explorer melalui Internet Explorer 7, di mana Anda hampir tidak beruntung. Saya mengatakan "hampir" karena browser ini masih mendukung border-collapseproperti, yang menggabungkan batas sel tabel yang berdampingan. Jika Anda mencoba untuk menghilangkan spasi sel (yaitu, cellspacing="0") maka border-collapse:collapseseharusnya memiliki efek yang sama: tidak ada ruang di antara sel-sel tabel. Dukungan ini buggy, karena tidak mengesampingkan yang sudah adacellspacing atribut HTML yang pada elemen tabel.

Singkatnya: untuk browser non-Internet Explorer 5-7, border-spacingmenangani Anda. Untuk Internet Explorer, jika situasinya tepat (Anda ingin 0 ruang seluler dan tabel Anda belum menentukannya), Anda dapat menggunakannya border-collapse:collapse.

table { 
    border-spacing: 0;
    border-collapse: collapse;
}

Catatan: Untuk ikhtisar besar properti CSS yang dapat diterapkan ke tabel dan untuk browser mana, lihat halaman Quirksmode yang fantastis ini .

Eric Nguyen
sumber
27
cellpadding = "0" masih dapat membuat perbedaan di Chrome 13.0.782.215, bahkan jika border-collapse: collapse dan spacing perbatasan diterapkan ke tabel.
whitneyland
7
@LeeWhitney Anda harus mengatur padding: 0 pada sel tabel Anda.
Martin Ørding-Thomsen
7
Ini sedikit di luar topik, tetapi atribut cellpadding dan cellspacing dihapus dalam HTML5, jadi CSS adalah satu-satunya cara untuk pergi sekarang.
Ignas2526
12
Halo semua. Saya telah memperbarui jawaban untuk kejelasan, termasuk bagian tentang cellpadding, yang saya pikir sudah jelas (cukup gunakan "padding"). Semoga ini lebih bermanfaat sekarang.
Eric Nguyen
4
Benar, @vapcguy, di salah satu situasi variabel tak terbatas yang Anda gunakan untuk menata tabel, Anda perlu menentukan penyeleksi yang lebih spesifik. Di atas ditandai sebagai contoh.
Eric Nguyen
942

Default

Perilaku default browser setara dengan:

table {border-collapse: collapse;}
td    {padding: 0px;}

         Masukkan deskripsi gambar di sini

Cellpadding

Mengatur jumlah ruang antara isi sel dan dinding sel

table {border-collapse: collapse;}
td    {padding: 6px;}

        Masukkan deskripsi gambar di sini

Cellspacing

Mengontrol ruang antar sel tabel

table {border-spacing: 2px;}
td    {padding: 0px;}

        Masukkan deskripsi gambar di sini

Kedua

table {border-spacing: 2px;}
td    {padding: 6px;}

        Masukkan deskripsi gambar di sini

Keduanya (khusus)

table {border-spacing: 8px 2px;}
td    {padding: 6px;}

        Masukkan deskripsi gambar di sini

Catatan: Jika ada yang border-spacingdiset, ini menunjukkan border-collapseproperti dari tabel tersebut separate.

Cobalah sendiri!

Di sini Anda dapat menemukan cara HTML lama untuk mencapai ini.

Peter Mortensen
sumber
1
Bagaimana jarak di sekitar meja menghilang? Ketika saya mengatur "border-spacing: 8px 12px, ia menambahkan jarak tidak hanya antara, tetapi antara perbatasan tabel dan sel-sel luar! Tapi itu tidak digambarkan dalam gambar di sini; mereka rata rata
Kaz
1
@ 2astalavista Dan sayangnya jika seseorang ingin efek jarak eksterior dihapus, ini tidak akan bekerja seperti ini dengan atribut CSS ini.
Kaz
@ Ka Anda mungkin perlu menggunakan margin negatif untuk menyembunyikan bagian yang mengganggu itu.
2
Padding default pada TD biasanya 1px, bukan 0
Jan M
341
table
{
    border-collapse: collapse; /* 'cellspacing' equivalent */
}

table td, table th
{
    padding: 0; /* 'cellpadding' equivalent */
}
Anak anjing
sumber
2
Ini sebenarnya satu-satunya hal yang bisa saya peroleh untuk bekerja, meskipun saya menerapkan info ke id agar tidak terlalu umum.
Kzqai
20
Itu cellspacing=0setara. Setara untuk sama cellspacing=1sekali berbeda. Lihat jawaban yang diterima.
TRiG
3
Bukankah seharusnya table tddan table thhanya menjadi tddan thmasing - masing? Ini bekerja dengan baik, tetapi pemilih yang lebih kecil berarti pencocokan sedikit lebih cepat
Cole Johnson
1
@Cole Sebenarnya, saya pikir seharusnya table > tr > tddan table > tr > th. Ini hampir secepat trdan th, dan dijamin berfungsi jika Anda memiliki tabel bersarang. Just my 2c
leviathanbadger
@ di atas Anda00 tetapi apakah tablepemilih diperlukan? IIRC, a <td>tidak valid kecuali di dalam a <tr>.
Cole Johnson
114

Mengatur margin pada sel tabel tidak benar-benar memiliki efek sejauh yang saya tahu. Setara CSS sebenarnya cellspacingadalahborder-spacing - tetapi tidak bekerja di Internet Explorer.

Anda bisa menggunakan border-collapse: collapseuntuk mengatur spasi sel dengan andal ke 0 seperti yang disebutkan, tetapi untuk nilai lain saya pikir satu-satunya cara lintas browser adalah tetap menggunakan cellspacingatribut.

Will Prescott
sumber
47
Di zaman sekarang kenyataan itu adalah penghisapan sampai tingkat N.
John K
7
Ini hampir benar, tetapi border-collapsehanya berfungsi di IE 5-7 jika tabel belum memiliki cellspacingatribut yang ditentukan. Saya telah menulis jawaban komprehensif yang menggabungkan semua bagian yang benar dari jawaban lain di halaman ini jika itu membantu.
Eric Nguyen
Sejujurnya, siapa yang peduli dengan Internet Explorer? Siapa pun yang menggunakannya harus mengetahui situs web yang rusak adalah kesalahan mereka - karena menggunakan browser berkualitas rendah. Situs web tidak harus berurusan dengan ini. Biarkan Internet Explorer hilang. Lupakan dukungan untuk itu. Kita tidak membutuhkannya, dan itu menyakitkan untuk dikembangkan.
99

Retasan ini berfungsi untuk Internet Explorer 6 dan yang lebih baru, Google Chrome , Firefox, dan Opera :

table {
    border-collapse: separate;
    border-spacing: 10px; /* cellspacing */
    *border-collapse: expression('separate', cellSpacing = '10px');
}

table td, table th {
    padding: 10px; /* cellpadding */
}

The *deklarasi untuk Internet Explorer 6 dan 7, dan browser lainnya benar akan mengabaikannya.

expression('separate', cellSpacing = '10px')kembali 'separate', tetapi kedua pernyataan dijalankan, seperti dalam JavaScript Anda dapat memberikan lebih banyak argumen dari yang diharapkan dan semuanya akan dievaluasi.

Vitalii Fedorenko
sumber
untuk mereka yang mencoba email responsif, perhatikan bahwa * tidak dikenali oleh outlook 2007+ (menggunakan kata sebagai mesin render) campaignmonitor.com/css
ptim
71

Bagi mereka yang menginginkan nilai ruang sel non-nol, CSS berikut ini berfungsi untuk saya, tetapi saya hanya dapat mengujinya di Firefox.

Lihat tautan Quirksmode yang diposting di tempat lain untuk detail kompatibilitas. Tampaknya ini mungkin tidak bekerja dengan versi Internet Explorer yang lebih lama.

table {
    border-collapse: separate;
    border-spacing: 2px;
}
Malvine
sumber
54

Solusi sederhana untuk masalah ini adalah:

table
{
    border: 1px solid #000000;
    border-collapse: collapse;
    border-spacing: 0px;
}
table td
{
    padding: 8px 8px;
}
George Filippakos
sumber
49

Juga, jika Anda ingin cellspacing="0", jangan lupa untuk menambahkan border-collapse: collapsedi Anda table's stylesheet.

tikar
sumber
43

Bungkus isi sel dengan div dan Anda dapat melakukan apa pun yang Anda inginkan, tetapi Anda harus membungkus setiap sel dalam kolom untuk mendapatkan efek yang seragam. Misalnya, untuk mendapatkan margin kiri & kanan yang lebih lebar:

Jadi CSS akan menjadi,

div.cellwidener {
  margin: 0px 15px 0px 15px;
}
td.tight {
  padding: 0px;
}
<table border="0">
  <tr>
    <td class="tight">
      <div class="cellwidener">My content</div>
    </td>
  </tr>
</table>

Ya, itu merepotkan. Ya, ia bekerja dengan Internet Explorer. Bahkan, saya hanya mengujinya dengan Internet Explorer, karena hanya itu yang diizinkan untuk digunakan di tempat kerja.

Robert White
sumber
Saya berharap saya bisa lebih meningkatkan ... Contoh pertama yang tidak mengulangi yang lain dan yang menunjukkan bagaimana membatasi efek ke satu tabel atau sel, daripada semua dari mereka di halaman !!!
vapcguy
23

Cukup gunakan border-collapse: collapseuntuk meja Anda, dan paddinguntuk thatau td.

Dan
sumber
21

Gaya ini untuk reset penuh untuk tabel - cellpadding , cellspacing , dan border .

Saya memiliki gaya ini di file reset.css saya:

table{
    border:0;          /* Replace border */
    border-spacing: 0px; /* Replace cellspacing */
    border-collapse: collapse; /* Patch for Internet Explorer 6 and Internet Explorer 7 */
}
table td{
    padding: 0px; /* Replace cellpadding */
}
Elad Shechter
sumber
20

TBH. Untuk semua penggemar dengan CSS Anda mungkin juga hanya menggunakancellpadding="0" cellspacing="0" karena mereka tidak usang ...

Orang lain yang menyarankan margin pada <td>jelas belum mencoba ini.

korektor
sumber
35
Mereka sebenarnya ditinggalkan dalam HTML5.
Kzqai
18
table th,td {
    padding: 8px 2px;
}
table {
    border-collapse: separate;
    border-spacing: 2px;
}
Abhishek Singh
sumber
17

Cukup gunakan aturan padding CSS dengan data tabel:

td { 
    padding: 20px;
}

Dan untuk spasi perbatasan:

table { 
    border-spacing: 1px;
    border-collapse: collapse;
}

Namun, ini dapat membuat masalah di browser versi lama seperti Internet Explorer karena implementasi model kotak yang berbeda.

suraj rawat
sumber
15

Dari apa yang saya pahami dari klasifikasi W3C adalah bahwa <table>s dimaksudkan untuk menampilkan data 'hanya'.

Berdasarkan itu saya merasa jauh lebih mudah untuk membuat <div>dengan latar belakang dan semua itu dan memiliki tabel dengan data melayang menggunakan position: absolute;danbackground: transparent; ...

Ia bekerja di Chrome, Internet Explorer (6 dan yang lebih baru) dan Mozilla Firefox (2 dan yang lebih baru).

Margin yang digunakan (atau dimaksudkan anyways) untuk membuat spacer antara unsur-unsur wadah, seperti <table>, <div>dan <form>, tidak <tr>, <td>, <span>atau <input>. Menggunakannya untuk apa pun selain elemen wadah akan membuat Anda sibuk menyesuaikan situs web Anda untuk pembaruan peramban di masa mendatang.

RolanDecoy
sumber
7
OP tidak pernah menyatakan untuk apa dia menggunakan tabel.
Alfabravo
13

CSS:

selector{
    padding:0 0 10px 0; // Top left bottom right 
}
suraj rawat
sumber
12

Anda dapat dengan mudah mengatur padding di dalam sel tabel menggunakan properti padding CSS. Ini adalah cara yang valid untuk menghasilkan efek yang sama dengan atribut cellpadding tabel.

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 10px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellpadding in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>[email protected]</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

Demikian pula, Anda bisa menggunakan properti spasi perbatasan CSS untuk menerapkan spasi antara batas sel tabel yang berdekatan seperti atribut cellspacing. Namun, untuk bekerja jarak-perbatasan nilai muse properti border-collapse terpisah, yang merupakan default.

table {
  border-collapse: separate;
  border-spacing: 10px;
  /* Apply cell spacing */
}

table,
th,
td {
  border: 1px solid #666;
}

table th,
table td {
  padding: 5px;
  /* Apply cell padding */
}
<!DOCTYPE html>
<html lang="en">
<head>

  <meta charset="utf-8">
  <title>Set Cellspacing in CSS</title>

</head>

<body>

  <table>
    <thead>
      <tr>
        <th>Row</th>
        <th>First Name</th>
        <th>Last Name</th>
        <th>Email</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>1</td>
        <td>Clark</td>
        <td>Kent</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>2</td>
        <td>Peter</td>
        <td>Parker</td>
        <td>[email protected]</td>
      </tr>
      <tr>
        <td>3</td>
        <td>John</td>
        <td>Rambo</td>
        <td>[email protected]</td>
      </tr>
    </tbody>
  </table>

</body>
</html>

Rafiqul Islam
sumber
10

Coba ini:

table {
    border-collapse: separate;
    border-spacing: 10px;
}
table td, table th {
    padding: 10px;
}

Atau coba ini:

table {
    border-collapse: collapse;
}
table td, table th {
    padding: 10px;
}
Falguni Panchal
sumber
9

Saya gunakan !importantsetelah perbatasan-runtuh suka

border-collapse: collapse !important;

dan itu bekerja untuk saya di IE7. Tampaknya menimpa atribut cellspacing.

Håkan Nilsson
sumber
9
!importanthanya akan diperlukan untuk mengesampingkan pengaturan CSS lain dalam situasi yang kompleks (dan bahkan sebagian besar pendekatan yang salah).
Jukka K. Korpela
1
Juga mengulangi jawaban Dan, hanya menambahkan !important, yang bisa dimasukkan sebagai komentar, bukan jawaban lain.
vapcguy
8
<table>
    <tr>
        <th>Col 1</th>
        <th>Col 2</th>
        <th>Col 3</th>
    </tr>
    <tr>
        <td>1</td>
        <td>2</td>
        <td>3</td>
    </tr>
</table>

cell-paddingdapat diberikan oleh paddingdalam CSS sementara cell-spacingdapat diatur dengan mengatur border-spacinguntuk tabel.

table {
    border-spacing: 10px;
}
td {
    padding: 10px;
}

Biola .

fuddin
sumber
6
td {
    padding: npx; /* For cellpadding */
    margin: npx; /* For cellspacing */
    border-collapse: collapse; /* For showing borders in a better shape. */
}

Jika margintidak bekerja, coba set displaydari truntuk blockdan kemudian marjin akan bekerja.

Majid Sadr
sumber
5

Untuk tabel, spasi dan cellpadding sudah usang dalam HTML 5.

Sekarang untuk ruang seluler Anda harus menggunakan spasi-perbatasan. Dan untuk cellpadding Anda harus menggunakan border-collapse.

Dan pastikan Anda tidak menggunakan ini dalam kode HTML5 Anda. Selalu mencoba menggunakan nilai-nilai ini dalam file CSS 3.

Pushp Singh
sumber
5
table {
    border-spacing: 4px; 
    color: #000; 
    background: #ccc; 
}
td {
    padding-left: 4px;
}
Peter Mortensen
sumber
4

Dalam tabel HTML, cellpaddingdan cellspacingdapat diatur seperti ini:

Untuk sel-padding :

Panggil saja td/thsel sederhana padding.

Contoh:

table {
    border-collapse: collapse;
}

td {
  border: 1px solid red;
  padding: 10px;
}

Untuk spasi sel

Sebut saja sederhana table border-spacing

Contoh:

/********* Cell-Spacing   ********/
table {
    border-spacing: 10px;
    border-collapse: separate;
}

td {
  border: 1px solid red;
}

Lebih banyak gaya tabel dengan tautan sumber CSS di sini Anda mendapatkan lebih banyak gaya tabel dengan CSS .

MD Ashik
sumber
3

Anda dapat melakukan hal seperti ini di CSS, menggunakan border-spacingdan padding:

table {
  border-collapse: collapse;
}

td, th {
  padding: 1em;
  border: 1px solid blue;
}
<table>
  <tr>
    <th>head_1</th>
    <th>head_2</th>
    <th>head_3</th>
    <th>head_4</th>
  </tr>
  <tr>
    <td>txt_1</td>
    <td>txt_2</td>
    <td>txt_3</td>
    <td>txt_4</td>
  </tr>
</table>

Alireza
sumber
Aturan penspasian batas diabaikan ketika batas diciutkan.
dgrogan
0

Bagaimana kalau menambahkan gaya langsung ke tabel itu sendiri? Ini alih-alih digunakan tabledalam CSS Anda, yang merupakan pendekatan BAD jika Anda memiliki beberapa tabel di halaman Anda:

<table style="border-collapse: separate;border-spacing: 2px;">
    <tr>
        <td style="padding: 4px 4px;">Some Text</td>
    </tr>
</table>
vapcguy
sumber
2
Menempatkan "style" di tag tabel lebih buruk daripada meletakkan "table # someId" di css Anda, karena gaya harus dipisahkan dari konten. Tetapi poin utama dari pertanyaan adalah bagaimana mengubah html yang sudah tidak digunakan lagi menjadi css yang tepat. Yang telah Anda lakukan dengan benar, tetapi Anda belum benar-benar menambahkan sesuatu dengan jawaban Anda, dan berfokus pada masalah yang tidak terkait.
Teepeemm
1
Tidak ada yang ditambahkan ?! Apa yang saya tambahkan adalah untuk fokus pada bagaimana setiap jawaban lain di sini pada dasarnya mengatakan untuk menggunakan td { padding: ... }atau table { border-spacing: ... }, alih-alih menerapkannya langsung ke tabel. Mereka tidak menambahkan apa pun. Seperti yang saya katakan, ketika Anda memiliki beberapa tabel di halaman Anda & tidak ingin memengaruhi mereka, Anda tidak ingin ini! Kami tidak memerlukan seluruh halaman jawaban yang mengatakan "Gunakan lembar gaya!", Padahal mungkin itulah hal terakhir yang Anda inginkan, karena Anda hanya ingin memformat satu sel atau tabel. Saat itulah menerapkannya ke tableatau tdtidak diinginkan & membuat kelas baru karena itu berlebihan.
vapcguy
1
Setiap jawaban lain menggunakan stylesheet karena pertanyaan aslinya adalah "bagaimana saya bisa melakukan ini dengan css". Jika pertanyaannya adalah "bagaimana saya dapat mempengaruhi css hanya satu tabel ini", maka jawaban Anda akan lebih tepat (meskipun saya masih akan lebih suka table#someId).
Teepeemm
2
Secara teknis, style inline masih CSS, hanya saja tidak menggunakan stylesheet, tapi saya mengerti.
vapcguy
1
Karena ide di balik kelas adalah untuk dapat digunakan kembali. Untuk sekali saja, itu tidak masuk akal dan berlebihan, IMHO.
vapcguy
0

Saya menyarankan ini dan semua sel untuk tabel tertentu dipengaruhi.

table.tbl_classname td, th {
    padding: 5px 5px 5px 4px   ;
 }

Greggo
sumber
0

Anda dapat memeriksa kode di bawah ini hanya dengan membuat index.htmldan menjalankannya.

<!DOCTYPE html>
<html>
   <head>
      <style>
         table{
         border-spacing:10px;
         }
         td{
         padding:10px;
         }
      </style>
   </head>
   <body>
      <table cellspacing="0" cellpadding="0">
         <th>Col 1</th>
         <th>Col 2</th>
         <th>Col 3</th>
         <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
         </tr>
      </table>
   </body>
</html>

OUTPUT:

masukkan deskripsi gambar di sini

Amaresh Tiwari
sumber