Saya mencoba merancang tabel HTML di mana tajuk akan tetap berada di bagian atas halaman saat DAN HANYA saat pengguna menggulirnya keluar dari tampilan. Misalnya, tabel mungkin 500 piksel ke bawah dari halaman, bagaimana cara membuatnya sehingga jika pengguna menggulir header keluar dari tampilan (entah bagaimana browser mendeteksi tidak lagi dalam tampilan windows), itu akan tetap diletakkan di atas ? Adakah yang bisa memberi saya solusi Javascript untuk ini?
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
</tbody>
</table>
Jadi pada contoh di atas, saya ingin <thead>
menggulir halaman jika tidak terlihat.
PENTING: Saya TIDAK mencari solusi di mana <tbody>
akan ada scrollbar (overflow: otomatis).
jquery
html
html-table
Sam Dufel
sumber
sumber
Jawaban:
Anda akan melakukan sesuatu seperti ini dengan mengetuk
scroll
event handlerwindow
, dan menggunakan yang laintable
dengan posisi tetap untuk menampilkan header di bagian atas halaman.HTML:
CSS:
JavaScript:
Ini akan menampilkan kepala tabel saat pengguna menggulir ke bawah cukup jauh untuk menyembunyikan kepala tabel asli. Ini akan bersembunyi lagi ketika pengguna telah menggulir halaman cukup jauh lagi.
Contoh kerja: http://jsfiddle.net/andrewwhitaker/fj8wM/
sumber
window
. mkoryak.github.io/floatThead memiliki solusi yang lebih umum berlaku.CSS murni (tanpa dukungan IE11):
sumber
-webkit-sticky
sebagai nilai yang tidak valid untukposition
.-webkit-sticky
untuk Safari (Desktop & iOS), bukan untuk Chrome.position: sticky
berfungsi di Chrome dari versi 56. Anda harus menetapkan aturan KEDUA:-webkit-sticky
dansticky
persis dalam urutan yang sama seperti dalam contoh kode saya. Safari dapatwebkit-sticky
dan semua browser lain menimpanyasticky
.position: sticky
tidak akan bekerja dengan elemen tabel.Yah, saya mencoba untuk mendapatkan efek yang sama tanpa menggunakan kolom ukuran tetap atau memiliki ketinggian tetap untuk seluruh tabel.
Solusi yang saya temukan adalah hack. Terdiri dari menduplikasi seluruh tabel kemudian menyembunyikan semuanya kecuali header, dan membuatnya memiliki posisi tetap.
HTML
CSS
javascript
Lihat di sini: http://jsfiddle.net/QHQGF/7/
Sunting: memperbarui kode sehingga thead dapat menerima peristiwa pointer (sehingga tombol dan tautan di header masih berfungsi). Ini memperbaiki masalah yang dilaporkan oleh luhfluh dan Joe M.
Jsfiddle baru di sini: http://jsfiddle.net/cjKEx/
sumber
visibility: hidden
. Anda hanya dapat bersembunyi#clone tbody
dan setelah itu Anda dapat mengatur perbatasan ... Bekerja biola: jsfiddle.net/QHQGF/1707Saya menulis sebuah plugin yang melakukan ini. Saya sudah bekerja di sana selama sekitar satu tahun sekarang dan saya pikir itu menangani semua kasus sudut dengan cukup baik:
Berikut ini beberapa demo / dokumen:
http://mkoryak.github.io/floatThead/
sumber
Saya dapat memperbaiki masalah dengan mengubah lebar kolom. Saya mulai dengan solusi Andrew di atas (terima kasih banyak!) Dan kemudian menambahkan satu lingkaran kecil untuk mengatur lebar td kloning:
Ini menyelesaikan masalah tanpa harus mengkloning seluruh tabel dan menyembunyikan tubuh. Saya baru mengenal JavaScript dan jQuery (dan untuk menumpuk yang melimpah), jadi ada komentar yang dihargai.
sumber
Sejauh ini, ini adalah solusi terbaik yang saya temukan untuk memiliki header tabel tetap.
UPDATE 5/11: Memperbaiki bug pengguliran horizontal seperti yang ditunjukkan oleh Kerry Johnson
Codepen: https://codepen.io/josephting/pen/demELL
sumber
outerWidth
kewidth
dalam definisi fungsi resizeFixed ().z-index
ke beberapa angka positif di.fixed
kelas sehingga objek yang diberikan pasca-pageload di tabel tidak mengapung di atas header tetap saat Anda menggulir.Solusi terbaik adalah dengan menggunakan plugin jquery ini:
https://github.com/jmosbech/StickyTableHeaders
Plugin ini bekerja sangat baik untuk kami dan kami mencoba banyak solusi lain. Kami mengujinya di IE, Chrome dan Firefox
sumber
Ada banyak solusi yang sangat bagus di sini. Tetapi salah satu solusi CSS saja yang paling sederhana yang saya gunakan dalam situasi ini adalah sebagai berikut:
Karena tidak ada persyaratan untuk JavaScript, ini menyederhanakan situasi secara signifikan. Anda pada dasarnya perlu fokus pada yang kedua aturan CSS , yang berisi ketentuan untuk memastikan bahwa kepala tabel tetap berada di atas, tidak peduli ruang gulir.
Untuk menguraikan masing-masing aturan secara rinci.
position
dimaksudkan untuk menunjukkan kepada browser bahwa objek kepala, barisnya, dan sel-selnya semua harus menempel di atas. Ini perlu disertaitop
, yang menentukan ke browser bahwa kepala akan menempel pada bagian atas halaman atau viewport. Selain itu, Anda dapat menambahkanz-index
untuk memastikan bahwa konten kepala selalu tetap di atas.Warna latar belakang hanyalah untuk menggambarkan titik. Anda tidak perlu menggunakan JavaScript tambahan untuk mendapatkan efek ini. Ini didukung di sebagian besar browser utama setelah 2016.
sumber
Saya menemukan perpustakaan jQuery sederhana bernama Sticky Table Headers. Dua baris kode dan itu melakukan apa yang saya inginkan. Solusi di atas tidak mengelola lebar kolom, jadi jika Anda memiliki sel tabel yang membutuhkan banyak ruang, ukuran yang dihasilkan dari header persisten tidak akan cocok dengan lebar tabel Anda.
http://plugins.jquery.com/StickyTableHeaders/
Info penggunaan di sini: https://github.com/jmosbech/StickyTableHeaders
sumber
Nah, setelah meninjau semua solusi yang tersedia saya menulis plugin yang dapat membekukan setiap baris (tidak hanya th) di bagian atas halaman atau wadah. Ini sangat sederhana dan sangat cepat. Jangan ragu untuk menggunakannya. http://maslianok.github.io/stickyRows/
sumber
Anda dapat menggunakan pendekatan ini, HTML murni dan CSS tanpa JS diperlukan :)
sumber
Saya menemukan solusi sederhana tanpa menggunakan JQuery dan hanya menggunakan CSS .
Anda harus meletakkan konten tetap di dalam tag 'th' dan menambahkan CSS
Posisi, z-index dan properti teratas sudah cukup. Tetapi Anda dapat menerapkan sisanya untuk memberikan tampilan yang lebih baik.
sumber
Saya juga mengalami masalah yang sama dengan pemformatan perbatasan tidak ditampilkan menggunakan kode entrophy tetapi beberapa perbaikan kecil dan sekarang tabel dapat diperluas dan menampilkan semua aturan styling css yang dapat Anda tambahkan.
untuk menambahkan css:
maka di sini adalah javascript baru:
sumber
Inilah solusi yang dibangun berdasarkan jawaban yang diterima. Itu mengoreksi untuk: lebar kolom, gaya tabel yang cocok, dan ketika tabel digulir dalam wadah div.
Pemakaian
Pastikan tabel Anda memiliki
<thead>
tag karena hanya konten yang ditambahkan yang akan diperbaiki.JavaSript
sumber
$sp.scrollLeft()
yang mendapatkan jumlah yang digulir dari kiri sehingga ketika menggulir ke bawah tabel tetap diposisikan dengan benar. Juga ditambahkan periksa ketika menggulir secara horizontal jika tabel tetap terlihat untuk menyesuaikan posisi kiri. Masalah lain yang tidak bisa saya pecahkan adalah ketika tabel berjalan di atas viewport, tabel tetap harus disembunyikan sampai pengguna menggulir mundur.Uncaught TypeError: $table.scrollParent is not a function
Ini akan membantu Anda memiliki tajuk tetap yang juga dapat digulir secara horizontal dengan data.
sumber
Ini solusi saya
sumber
Agak terlambat ke pesta, tapi di sini ada implementasi yang bekerja dengan beberapa tabel pada halaman yang sama dan "jank" gratis (menggunakan requestAnimationFrame). Juga tidak perlu memberikan lebar pada kolom. Pengguliran horizontal juga berfungsi.
Header didefinisikan dalam
div
sehingga Anda bebas untuk menambahkan markup apa pun di sana (seperti tombol), jika diperlukan. Ini semua HTML yang dibutuhkan:https://jsfiddle.net/lloydleo/bk5pt5gs/
sumber
Dalam solusi ini, header tetap dibuat secara dinamis, konten dan gaya diklon dari THEAD
yang Anda butuhkan adalah dua baris misalnya:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Plugin jquery saya, FixedHeader dan getStyleObject yang disediakan di bawah ini dapat Anda masukkan ke dalam file .js
sumber
Buat tabel tambahan dengan header yang sama dengan tabel utama. Cukup letakkan thead di tabel baru dengan satu baris dan semua header di dalamnya. Lakukan posisi absolut dan latar belakang putih. Untuk tabel utama, letakkan dalam div dan gunakan beberapa scroll tinggi dan overflow-y. Dengan cara ini tabel baru kami akan mengatasi tajuk tabel utama dan tetap di sana. Kelilingi semuanya dalam div. Di bawah ini adalah kode kasar untuk melakukannya.
sumber
Demo: demo tajuk tabel tetap css
sumber
Perbaiki masalah Anda dengan ini
sumber
Ini dapat dicapai dengan menggunakan transformasi properti gaya. Yang harus Anda lakukan adalah membungkus meja Anda menjadi beberapa div dengan ketinggian tetap dan overflow diatur ke otomatis, misalnya:
Dan kemudian Anda dapat melampirkan pengendali onscroll ke sana, di sini Anda memiliki metode yang menemukan setiap tabel dibungkus dengan
<div class="tableWrapper"></div>
:Dan berikut ini contoh kerja dari tindakan ini (saya telah menggunakan bootstrap untuk membuatnya lebih cantik): biola
Bagi mereka yang juga ingin mendukung IE dan Edge, berikut cuplikannya:
Di IE dan Edge gulir sedikit laggy ... tapi berhasil
Inilah jawaban yang membantu saya mengetahui hal ini: jawaban
sumber
Saya sudah mencoba sebagian besar solusi ini, dan akhirnya menemukan (IMO) solusi terbaik, modern,:
Kotak CSS
Dengan kisi-kisi CSS, Anda dapat mendefinisikan 'kisi', dan akhirnya Anda dapat membuat solusi lintas-browser yang bagus, bebas javascript, untuk tabel dengan header tetap, dan konten yang dapat digulir. Tinggi tajuk bahkan bisa dinamis.
CSS : Tampilkan sebagai kisi, dan atur jumlah
template-rows
:HTML : Buat wadah kotak dan jumlah yang ditentukan
rows
:Berikut ini contoh kerjanya:
CSS
HTML
sumber
Saya telah mencoba menggunakan transformasi: terjemahkan . Meskipun berfungsi baik di Firefox dan Chrome, tidak ada fungsi di IE11. Tidak ada bilah gulir ganda. Mendukung tfoot dan keterangan meja. Javascript murni, tanpa jQuery.
http://jsfiddle.net/wbLqzrfb/42/
sumber
Saya menemukan solusi tanpa jquery
HTML
CSS
Anda dapat melihatnya berfungsi di sini: https://jsfiddle.net/lexsoul/fqbsty3h
Sumber: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
sumber