Saya menulis halaman di mana saya membutuhkan tabel HTML untuk mempertahankan ukuran yang ditetapkan. Saya membutuhkan tajuk di bagian atas tabel untuk tetap di sana setiap saat, tetapi saya juga membutuhkan badan tabel untuk menggulir tidak peduli berapa banyak baris yang ditambahkan ke tabel. Pikirkan versi mini excel. Ini sepertinya tugas yang sederhana tetapi hampir setiap solusi yang saya temukan di web memiliki beberapa kelemahan. Bagaimana saya bisa memecahkan masalah ini?
javascript
html
css
html-table
minty
sumber
sumber
Jawaban:
Saya harus menemukan jawaban yang sama. Contoh terbaik yang saya temukan adalah http://www.cssplay.co.uk/menu/tablescroll.html - saya menemukan contoh # 2 bekerja dengan baik bagi saya. Anda harus mengatur ketinggian tabel bagian dalam dengan Java Script, sisanya adalah CSS.
sumber
Saya menemukan DataTables cukup fleksibel. Sementara versi defaultnya didasarkan pada jquery, ada juga plugin AngularJs .
sumber
Saya melihat solusi sempurna Sean Haddy untuk pertanyaan serupa dan mengambil kebebasan untuk mengedit :
aria-hidden="false"
Tapi Sean yang melakukan angkat berat. Terima kasih juga kepada Matt Burland, karena telah menunjukkan perlunya mendukung langkah.
Silakan lihat sendiri di http://jsfiddle.net/jhfrench/eNP2N/
sumber
Sudahkah Anda mencoba menggunakan thead dan tbody, dan menetapkan tinggi tetap pada tbody dengan overflow: gulir?
Apa browser target Anda?
EDIT: Ini bekerja dengan baik (hampir) di firefox - penambahan scrollbar vertikal menyebabkan perlunya scrollbar horizontal juga - yuck. Yaitu hanya mengatur tinggi setiap td dengan apa yang saya tentukan ketinggian tbody menjadi. Inilah yang terbaik yang bisa saya pikirkan:
sumber
overflow-x: hidden;
danoverflow-y: auto
juga membantu.Yang Anda butuhkan adalah:
1) memiliki badan tabel dengan ketinggian terbatas karena gulir hanya terjadi ketika isinya lebih besar dari jendela gulir. Namun
tbody
tidak dapat berukuran, dan Anda harus menampilkannyablock
untuk melakukannya:2) Sinkronisasi ulang tajuk tabel dan lebar kolom isi tabel karena menjadikan yang terakhir
block
menjadikannya elemen yang tidak terkait. Satu-satunya cara untuk melakukannya adalah dengan mensimulasikan sinkronisasi dengan menegakkan lebar kolom yang sama untuk keduanya .Namun, karena
tbody
itu sendiri adalahblock
sekarang, ia tidak lagi dapat berperilaku sepertitable
. Karena Anda masih memerlukantable
perilaku untuk menampilkan kolom dengan benar, solusinya adalah meminta setiap baris Anda ditampilkan sebagai masing-masingtable
:(Perhatikan bahwa, menggunakan teknik ini, Anda tidak akan dapat menjangkau rentang baris lagi).
Setelah itu selesai, Anda dapat menegakkan lebar kolom untuk memiliki lebar yang sama di kedua
thead
dantbody
. Anda tidak bisa melakukannya:th, td { width: 20%; }
jika Anda memiliki 5 kolom), yang lebih praktis (tidak perlu mengatur lebar untuk setiap contoh tabel) tetapi tidak dapat berfungsi untuk jumlah kolom apa punSaya lebih suka opsi terakhir, yang membutuhkan penambahan:
Lihat demo di sini , bercabang dari jawaban untuk pertanyaan ini .
sumber
Sunting: Ini adalah jawaban yang sangat lama dan ada di sini untuk kemakmuran hanya untuk menunjukkan bahwa itu didukung sekali di tahun 2000-an tetapi turun karena strategi browser di tahun 2010 adalah untuk menghormati spesifikasi W3C bahkan jika beberapa fitur telah dihapus: Tabel digulir dengan tajuk tetap / footer dengan kikuk ditentukan sebelum HTML5.
Kabar buruk
Sayangnya tidak ada cara yang elegan untuk menangani tabel yang dapat digulir dengan tetap
thead
/tfoot
karena spesifikasi HTML / CSS tidak begitu jelas tentang fitur itu .Penjelasan
Meskipun Spesifikasi HTML 4.01 mengatakan
thead
/tfoot
/tbody
digunakan (diperkenalkan?) Untuk menggulir isi tabel:Tetapi fitur tabel yang dapat digulir pada FF 3.6 telah dihapus dalam FF 3.7 karena dianggap sebagai bug karena tidak sesuai dengan spesifikasi HTML / CSS. Lihat ini dan itu komentar tentang bug FF.
Kiat Jaringan Pengembang Mozilla
Di bawah ini adalah versi sederhana dari tips berguna MDN untuk tabel yang dapat digulir,
lihat halaman yang diarsipkan ini atau versi Perancis saat ini
Namun MDN juga mengatakan ini tidak berfungsi lagi pada FF :-(
Saya juga telah menguji pada IE8 => tabel juga tidak dapat digulir: - ((
sumber
Tidak yakin apakah ada orang yang masih melihat ini tetapi cara saya telah melakukan ini sebelumnya adalah menggunakan dua tabel untuk menampilkan tabel asli tunggal - yang pertama hanya baris judul tabel asli dan tidak ada baris tubuh tabel (atau baris tubuh kosong untuk membuat ini valid).
Yang kedua adalah di div terpisah dan tidak memiliki judul dan hanya baris tubuh tabel asli. Div terpisah kemudian dibuat dapat digulir.
Tabel kedua di div diletakkan tepat di bawah tabel pertama di HTML dan terlihat seperti tabel tunggal dengan header tetap dan bagian bawah yang dapat digulir. Saya hanya menguji ini di Safari, Firefox dan IE (masing-masing versi terbaru di Spring 2010) tetapi berhasil di semuanya.
Satu-satunya masalah adalah bahwa tabel pertama tidak akan memvalidasi tanpa badan (validator W3.org - XHTML 1.0 ketat), dan ketika saya menambahkan satu tanpa konten itu menyebabkan baris kosong. Anda dapat menggunakan CSS untuk membuat ini tidak terlihat tetapi masih memakan ruang pada halaman.
sumber
display: none;
, kecuali Anda berarti ruang dalam sumber ..?Solusi ini berfungsi di Chrome 35, Firefox 30 dan IE 11 (tidak menguji versi lain)
CSS murni: http://jsfiddle.net/ffabreti/d4sope1u/
Semuanya diatur untuk ditampilkan: blok, tabel membutuhkan ketinggian:
sumber
Ini menyebabkan saya sakit kepala yang sangat besar mencoba menerapkan grid seperti itu untuk aplikasi kita. Saya mencoba semua berbagai teknik di luar sana tetapi masing-masing memiliki masalah. Yang paling dekat saya datang menggunakan plugin jQuery seperti Flexigrid (lihat http://www.ajaxrain.com untuk alternatif), tetapi ini tampaknya tidak mendukung tabel lebar 100% yang merupakan apa yang saya butuhkan.
Yang akhirnya saya lakukan adalah menggulirkan milik saya sendiri; Firefox mendukung
tbody
elemen pengguliran sehingga saya mengendus browser dan menggunakan CSS yang sesuai (pengaturan tinggi, melimpah dll ... tanyakan apakah Anda ingin lebih detail) untuk membuat gulir itu, dan kemudian untuk browser lain saya menggunakan dua tabel terpisah yang diatur untuk digunakantable-layout: fixed
yang menggunakan ukuran Algoritma yang dijamin tidak melimpah ukuran yang dinyatakan (tabel normal akan berkembang ketika konten terlalu lebar untuk muat). Dengan memberikan kedua tabel lebar yang sama, saya bisa membuat kolom mereka berbaris. Saya membungkus yang kedua dalam set div untuk menggulir dan dengan sedikit jiggery pokery dengan margin dll berhasil mendapatkan tampilan dan rasa yang saya inginkan.Maaf jika jawaban ini terdengar agak kabur di beberapa tempat; Saya menulis dengan cepat karena saya tidak punya banyak waktu. Tinggalkan komentar jika Anda ingin saya memperluas lebih jauh!
sumber
Berikut kode yang benar-benar berfungsi untuk IE dan FF (setidaknya):
Saya telah mengubah kode asli untuk membuatnya lebih jelas dan juga membuatnya bekerja dengan baik di IE dan juga FF ..
Kode asli DI SINI
sumber
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Inilah alternatif saya. Ini juga menggunakan DIV berbeda untuk header, body dan footer tetapi disinkronkan untuk mengubah ukuran jendela dan dengan mencari, menggulir, menyortir, memfilter dan memposisikan:
Daftar CD saya
Klik pada tombol Jazz, Klasik ... untuk melihat tabel. Sudah diatur sehingga memadai meskipun JavaScript dimatikan.
Tampak OK di IE, FF dan WebKit (Chrome, Safari).
sumber
Maaf saya belum membaca semua balasan untuk pertanyaan Anda.
Ya di sini hal yang Anda inginkan (sudah saya lakukan)
Anda dapat menggunakan dua tabel, dengan nama kelas yang sama untuk gaya yang sama, satu hanya dengan kepala meja dan yang lainnya dengan baris Anda. Sekarang letakkan tabel ini di dalam div yang memiliki ketinggian tetap dengan overflow-y: auto ATAU gulir.
sumber
Masalah utama yang saya miliki dengan saran di atas adalah bisa pasang tablesorter.js DAN mampu mengapung header untuk tabel dibatasi ke ukuran maks tertentu. Saya akhirnya menemukan plugin jQuery.floatThead yang menyediakan header mengambang dan memungkinkan penyortiran untuk terus bekerja.
Ini juga memiliki halaman perbandingan yang bagus yang menunjukkan dirinya vs plugin serupa .
sumber
JsFiddle hidup
Itu mungkin dengan hanya HTML & CSS
sumber
Jika boleh menggunakan JavaScript di sini adalah solusi saya Buat tabel atur lebar tetap pada semua kolom (piksel!) Tambahkan kelas Scrollify ke tabel dan tambahkan javascript + jquery 1.4.x atur tinggi dalam css atau gaya!
Diuji dalam: Opera, Chrome, Safari, FF, IE5.5 ( Skrip epik gagal ), IE6, IE7, IE8, IE9
Sunting: Tinggi tetap.
sumber
Saya melakukan ini dengan javascript (tanpa pustaka) dan CSS - tubuh tabel bergulir dengan halaman, dan tabel tidak harus tetap lebar atau tinggi, meskipun setiap kolom harus memiliki lebar. Anda juga dapat menyimpan fungsionalitas penyortiran.
Pada dasarnya:
Dalam HTML, buat div wadah untuk memposisikan baris tajuk tabel dan badan tabel, juga buat div "mask" untuk menyembunyikan isi tabel saat bergulir melewati header.
Di CSS, konversikan bagian tabel menjadi blok
Dalam Javascript, dapatkan lebar tabel dan cocokkan lebar topeng ... dapatkan tinggi konten halaman ... ukur posisi gulir ... manipulasi CSS untuk mengatur posisi baris judul tabel dan tinggi topeng
Inilah javascript dan DEMO jsFiddle.
sumber
Bagi saya, tidak ada yang terkait dengan pengguliran yang benar-benar berfungsi sampai saya menghapus lebar dari tabel CSS. Awalnya, tabel CSS terlihat seperti ini:
Segera setelah saya menghapus lebarnya: 100%; semua fitur gulir mulai berfungsi.
sumber
Jika Anda memiliki standar yang cukup rendah;) Anda bisa menempatkan tabel yang hanya berisi header langsung di atas tabel yang hanya memiliki badan. Ini tidak akan bergulir secara horizontal, tetapi jika Anda tidak membutuhkannya ...
sumber