Edit - Asli Judul: Apakah ada cara alternatif untuk mencapai border-collapse:collapse
di CSS
(dalam rangka untuk memiliki runtuh, meja sudut bulat)?
Karena ternyata hanya membuat batas tabel runtuh tidak menyelesaikan masalah root, saya telah memperbarui judul untuk lebih mencerminkan diskusi.
Saya mencoba membuat meja dengan sudut bulat menggunakan CSS3
border-radius
properti. Gaya tabel yang saya gunakan terlihat seperti ini:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Inilah masalahnya. Saya juga ingin mengatur border-collapse:collapse
properti, dan ketika itu diatur border-radius
tidak lagi berfungsi. Apakah ada cara berbasis CSS saya bisa mendapatkan efek yang sama seperti border-collapse:collapse
tanpa benar-benar menggunakannya?
Suntingan:
Saya telah membuat halaman sederhana untuk menunjukkan masalah di sini (hanya Firefox / Safari).
Tampaknya sebagian besar masalah adalah bahwa pengaturan meja untuk memiliki sudut bulat tidak mempengaruhi sudut td
elemen sudut . Jika semua meja satu warna, ini tidak akan menjadi masalah karena saya hanya bisa membuat sudut atas dan bawah td
dibulatkan untuk baris pertama dan terakhir masing-masing. Namun, saya menggunakan warna latar belakang yang berbeda untuk meja untuk membedakan judul dan striping, sehingga td
elemen dalam akan menunjukkan sudut bulat mereka juga.
Ringkasan solusi yang diusulkan:
Mengitari meja dengan elemen lain dengan sudut bundar tidak berfungsi karena sudut persegi tabel "berdarah."
Menentukan lebar perbatasan ke 0 tidak menciutkan tabel.
td
Sudut bawah masih persegi setelah pengaturan ruang sel ke nol.
Sebaliknya, menggunakan JavaScript berfungsi dengan menghindari masalah.
Solusi yang memungkinkan:
Tabel dihasilkan dalam PHP, jadi saya hanya bisa menerapkan kelas yang berbeda untuk masing-masing th / tds luar dan gaya setiap sudut secara terpisah. Saya lebih suka tidak melakukan ini, karena itu tidak terlalu elegan dan sedikit sakit untuk diterapkan ke beberapa tabel, jadi tolong terus saran datang.
Kemungkinan solusi 2 adalah menggunakan JavaScript (jQuery, khususnya) untuk menata sudut-sudutnya. Solusi ini juga berfungsi, tetapi masih belum cukup yang saya cari (saya tahu saya pilih-pilih). Saya punya dua pemesanan:
- ini adalah situs yang sangat ringan, dan saya ingin menjaga JavaScript seminimal mungkin
- bagian dari daya tarik yang menggunakan radius perbatasan bagi saya adalah degradasi yang anggun dan peningkatan progresif. Dengan menggunakan batas-jari-jari untuk semua sudut bundar, saya berharap memiliki situs yang dibulatkan secara konsisten di browser yang mendukung CSS3 dan situs yang secara konsisten berbentuk persegi di tempat lain (Saya sedang melihat Anda, IE).
Saya tahu bahwa mencoba melakukan ini dengan CSS3 hari ini mungkin tampak tidak perlu, tetapi saya punya alasan. Saya juga ingin menunjukkan bahwa masalah ini adalah hasil dari spesifikasi w3c, bukan dukungan CSS3 yang buruk, sehingga solusi apa pun akan tetap relevan dan berguna ketika CSS3 memiliki dukungan yang lebih luas.
sumber
Jawaban:
Saya menemukan jawabannya. Anda hanya perlu menggunakan beberapa penyeleksi khusus.
Masalah dengan membulatkan sudut-sudut meja adalah bahwa elemen td juga tidak menjadi bulat. Anda dapat menyelesaikannya dengan melakukan sesuatu seperti ini:
Sekarang semuanya berputar dengan baik, kecuali bahwa masih ada masalah untuk
border-collapse: collapse
menghancurkan segalanya.Solusinya adalah menambahkan
border-spacing: 0
dan membiarkan defaultborder-collapse: separate
di atas meja.sumber
border-spacing: 0;
sebagai gaya perbatasan?border-spacing: 0;
seperti Ramon merekomendasikan memperbaikinya untuk saya. Pastikan Anda menambahkanborder-radius
danborder-spacing
gaya ke elemen<th>
atau<td>
, bukan<thead>
atau<tbody>
.border-spacing: 0; border-collapse: separate;
Metode berikut berfungsi (diuji di Chrome) dengan menggunakan
box-shadow
dengan sebaran1px
alih-alih perbatasan "nyata".sumber
Jika Anda menginginkan solusi khusus CSS (tidak perlu diatur
cellspacing=0
dalam HTML) yang memungkinkan untuk perbatasan 1px (yang tidak dapat Anda lakukan denganborder-spacing: 0
solusi), saya lebih suka melakukan hal berikut:border-right
danborder-bottom
untuk sel tabel Anda (td
danth
)border-top
border-left
first-child
danlast-child
penyeleksi, bulatkan sudut yang sesuai untuk sel tabel di empat sudut.Lihat demo di sini.
Diberikan HTML berikut:
Lihat contoh di bawah ini:
sumber
table.Info
harus dilakukan kelas dengan sesuatu?Sudahkah Anda mencoba menggunakan
table{border-spacing: 0}
bukantable{border-collapse: collapse}
???sumber
border-spacing: 0
adalah Anda tidak dapat memiliki batas 1px, bukan? Karena batas menumpuk bukannya runtuh.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
menghasilkan apa yang saya butuhkan.Anda mungkin harus meletakkan elemen lain di sekitar meja dan gaya itu dengan perbatasan bulat.
The Draft bekerja menetapkan bahwa
border-radius
tidak berlaku untuk elemen tabel ketika nilaiborder-collapse
adalahcollapse
.sumber
overflow:hidden;
Seperti yang dikatakan Ian, solusinya adalah menyarangkan meja di dalam div dan mengaturnya seperti itu:
Dengan
overflow:hidden
, sudut persegi tidak akan berdarah melalui div.sumber
overflow: hidden
sembulan / tooltip apa pun akan terpotong oleh dimensi pembungkus.Sejauh yang saya ketahui, satu-satunya cara Anda dapat melakukannya adalah dengan memodifikasi semua sel seperti:
Dan kemudian untuk mendapatkan perbatasan di bagian bawah dan kanan kembali
:last-child
tidak valid dalam ie6, tetapi jika Anda menggunakanborder-radius
saya menganggap Anda tidak peduli.EDIT:
Setelah melihat halaman contoh Anda, tampaknya Anda mungkin dapat mengatasinya dengan spasi dan bantalan sel.
Batas abu-abu tebal yang Anda lihat sebenarnya adalah latar belakang tabel (Anda dapat melihat ini dengan jelas jika Anda mengubah warna batas menjadi merah). Jika Anda mengatur ruang sel ke nol (atau yang setara:
td, th { margin:0; }
:), "batas" abu-abu akan hilang.EDIT 2:
Saya tidak dapat menemukan cara untuk melakukan ini hanya dengan satu tabel. Jika Anda mengubah baris tajuk ke tabel bersarang, Anda mungkin bisa mendapatkan efek yang Anda inginkan, tetapi itu akan lebih banyak bekerja, dan tidak dinamis.
sumber
Saya mencoba solusi menggunakan elemen pseudo
:before
dan:after
padathead th:first-child
danthead th:last-child
Dikombinasikan dengan membungkus meja dengan a
<div class="radius borderCCC">
lihat jsFiddle
Bekerja untuk saya di chrome (13.0.782.215) Beri tahu saya jika ini berfungsi untuk Anda di peramban lain.
sumber
Sebenarnya Anda bisa menambahkan
table
bagian dalam Andadiv
sebagai pembungkusnya. dan kemudian menetapkanCSS
kode - kode ini ke pembungkus:sumber
Jawaban yang diberikan hanya berfungsi ketika tidak ada batas di sekitar meja, yang sangat terbatas!
Saya memiliki makro di SASS untuk melakukan ini, yang sepenuhnya mendukung perbatasan eksternal dan internal, mencapai gaya yang sama dengan border-collapse: runtuh tanpa benar-benar menentukannya.
Diuji dalam FF / IE8 / Safari / Chrome.
Memberikan batas bundar yang bagus di CSS murni di semua browser tetapi IE8 (menurun dengan anggun) karena IE8 tidak mendukung batas-radius :(
Beberapa browser yang lebih lama mungkin memerlukan awalan vendor untuk bekerja dengannya
border-radius
, jadi silakan menambahkan awalan itu ke kode Anda sebagaimana diperlukan.Jawaban ini bukan yang terpendek - tetapi berhasil.
Untuk menerapkan gaya ini cukup ubah
tandai sebagai berikut:
dan pastikan untuk memasukkan gaya CSS di atas dalam HTML Anda.
Semoga ini membantu.
sumber
border-radius
.Untuk tabel berbatasan dan dapat digulir, gunakan ini (ganti variabel,
$
teks awal)Jika Anda menggunakan
thead
,tfoot
atauth
, ganti sajatr:first-child
dantr-last-child
dantd
dengan mereka.HTML:
sumber
Saya memiliki masalah yang sama. hapus
border-collapse
seluruhnya dan gunakan:cellspacing="0" cellpadding="0"
dalam dokumen html. contoh:sumber
Saya baru saja menulis satu set CSS gila untuk ini yang tampaknya bekerja dengan sempurna:
sumber
Solusi dengan border-collapse: pisahkan untuk tabel dan tampilan: inline-table untuk tbody dan thead.
sumber
Saya baru dengan HTML dan CSS dan saya juga mencari solusi untuk ini, di sini apa yang saya temukan.
Saya coba, coba tebak :)
sumber
Menemukan jawaban ini setelah mengalami masalah yang sama, tetapi ternyata cukup sederhana: cukup beri tabel overflow: tersembunyi
Tidak perlu elemen pembungkus. Memang, saya tidak tahu apakah ini akan berhasil 7 tahun yang lalu ketika pertanyaan awalnya diajukan, tetapi berhasil sekarang.
sumber
Meja dengan sudut bulat dan dengan sel berbatasan. Menggunakan solusi @Ramon Tayag .
Kuncinya adalah menggunakan
border-spacing: 0
saat ia menunjukkan.Solusi menggunakan SCSS .
sumber
Saya mulai bereksperimen dengan "tampilan" dan saya menemukan bahwa:
border-radius
,border
,margin
,padding
, dalamtable
ditampilkan dengan:Sebagai contoh
Tetapi kita perlu mengatur a
width
dari setiap kolomsumber
Berikut adalah contoh terbaru tentang cara menerapkan tabel dengan sudut bulat dari http://medialoot.com/preview/css-ui-kit/demo.html . Ini didasarkan pada penyeleksi khusus yang disarankan oleh Joel Potter di atas. Seperti yang Anda lihat, itu juga mencakup beberapa sihir untuk membuat IE sedikit bahagia. Ini mencakup beberapa gaya tambahan untuk mengganti warna baris:
sumber
Ini caranya:
Atau
sumber
Saya selalu melakukan ini dengan menggunakan Sass
sumber
border-collapse: collapse
diaktifkan.border-collapse: collapse
. Maafkan lagi, saya akan menunggu pembaruan Anda.Solusi terbaik sejauh ini berasal dari solusi Anda sendiri dan seperti ini:
sumber
Border-radius sekarang didukung secara resmi. Jadi, dalam semua contoh di atas, Anda dapat meletakkan awalan "-moz-".
Trik lain adalah dengan menggunakan warna yang sama untuk baris atas dan bawah seperti perbatasan Anda. Dengan ketiga warna yang sama, ia menyatu dan tampak seperti meja bundar sempurna meskipun sebenarnya tidak secara fisik.
sumber