Saya perlu membuat tabel html (atau yang terlihat serupa) dengan header tetap dan kolom pertama tetap.
Setiap solusi yang saya lihat sejauh ini menggunakan Javascript atau jQuery
untuk mengatur scrollTop / scrollLeft, tetapi tidak bekerja dengan lancar di browser seluler, jadi saya mencari solusi CSS murni.
Saya menemukan solusi untuk kolom tetap di sini: jsfiddle.net/C8Dtf/20/ tetapi saya tidak tahu bagaimana saya dapat meningkatkannya untuk membuat tajuk tetap juga.
Saya ingin ini berfungsi di browser webkit atau menggunakan beberapa css3
fitur, tetapi saya ulangi, saya tidak ingin menggunakan Javascript
untuk scrolling.
EDIT: Ini adalah contoh perilaku yang ingin saya capai: https://web.archive.org/web/20130829032141/http://datatables.net/release-datatables/extras/FixedColumns/css_size.html
sumber
position
perilaku kompleks ke baris dan sel, tetapi saya tidak begitu mengerti di mana hal itu dapat diterapkan atau tidak.Jawaban:
Solusi CSS murni aktual dengan baris tajuk tetap dan kolom pertama
Saya harus membuat tabel dengan header tetap dan kolom pertama tetap menggunakan CSS murni dan tidak ada jawaban di sini yang sesuai dengan yang saya inginkan.
The
position: sticky
properti mendukung kedua mencuat ke atas (seperti yang telah saya melihatnya digunakan paling) dan ke sisi dalam versi modern dari Chrome, Firefox, dan Edge. Ini dapat dikombinasikan dengandiv
yang memilikioverflow: scroll
properti untuk memberi Anda tabel dengan header tetap yang dapat ditempatkan di mana saja di halaman Anda:Tempatkan meja Anda dalam wadah:
Gunakan
overflow: scroll
di penampung Anda untuk mengaktifkan pengguliran:Seperti yang ditunjukkan Dagmar di komentarnya, container juga membutuhkan a
max-width
dan amax-height
.Gunakan
position: sticky
untuk memiliki sel tabel tongkat ke tepi dantop
,right
, atauleft
untuk memilih tepi untuk menempel:Seperti yang disebutkan MarredCheese di komentar, jika kolom pertama Anda berisi
<td>
elemen, bukan<th>
elemen, Anda dapat menggunakantbody td:first-child
di CSS daripadatbody th
Agar tajuk di kolom pertama menempel di kiri, gunakan:
Tampilkan cuplikan kode
https://jsfiddle.net/qwubvg9m/1/
sumber
width
kolom pertama Anda, Anda dapat menggunakanposition: sticky
pada sel di kolom kedua denganleft
nilai yang sama dengan kolom pertama Andawidth
: jsfiddle.net/wvypo83c/794<td>
elemen, bukan<th>
elemen, Anda dapat menggunakantbody td:first-child
CSS sebagai gantitbody th
.Saat ini, ini dimungkinkan untuk dicapai dengan menggunakan CSS hanya dengan
position: sticky
properti.Ini dia cuplikannya:
(jsFiddle: https://jsfiddle.net/hbqzdzdt/5/ )
Mengenai kompatibilitas. Ia bekerja di semua browser utama, tetapi tidak di IE. Ada polyfill untuk
position: sticky
tapi saya tidak pernah mencobanya.sumber
Ini bukanlah hal yang mudah.
Tautan berikut adalah ke demo kerja:
Tautan Diperbarui menurut komentar lanoxx
http://jsfiddle.net/C8Dtf/366/
Ingatlah untuk menambahkan ini:
saya tidak melihat cara lain untuk mencapai ini. Apalagi dengan menggunakan css saja.
Ini banyak yang harus dilalui. Semoga ini membantu :)
sumber
"bFilter": false
"bInfo" : false
ke dalam.dataTable()
panggilanthead
ada di meja sendiri yang tidak terikat dengan perubahan daritd
elemen, jadi jika teks sel panjang,th
lebar tidak akan menyesuaikan sesuai.Semua saran ini bagus dan semuanya, tetapi hanya memperbaiki header atau kolom, tidak keduanya, atau menggunakan javascript. Alasan - tidak percaya itu bisa dilakukan dengan CSS murni. Alasannya:
Jika memungkinkan untuk melakukannya, Anda perlu menumpuk beberapa div yang dapat digulir satu di dalam yang lain, masing-masing dengan gulir ke arah yang berbeda. Kemudian Anda perlu membagi tabel Anda menjadi tiga bagian - header tetap, kolom tetap, dan data lainnya.
Baik. Tapi sekarang masalahnya - Anda dapat membuat salah satunya tetap diam saat Anda menggulir, tetapi yang lain bersarang di dalam area gulir terlebih dahulu dan karena itu dapat di-scroll sehingga tidak terlihat itu sendiri, jadi tidak dapat diperbaiki pada tempatnya layar. 'Ah-ha' Anda mengatakan 'tetapi saya entah bagaimana bisa menggunakan posisi absolut atau tetap untuk melakukan itu' - tidak, Anda tidak bisa. Segera setelah Anda melakukannya, Anda kehilangan kemampuan untuk menggulir penampung itu. Ini adalah situasi ayam dan telur - Anda tidak dapat memiliki keduanya, keduanya membatalkan satu sama lain.
Saya yakin satu-satunya solusi adalah melalui javascript. Anda harus benar-benar memisahkan ketiga elemen dan menjaga posisinya tetap sinkron melalui javascript. Ada contoh bagus di posting lain di halaman ini. Yang ini juga patut untuk dilihat:
http://tympanus.net/codrops/2014/01/09/sticky-table-headers-columns/
sumber
Saya telah membuat beberapa perubahan di jsfiddle. Ini mungkin yang Anda coba lakukan.
Saya telah membuat hardcode judul seperti ini:
Dan saya menambahkan beberapa gaya juga.
Semoga ini yang Anda inginkan :)
sumber
Contoh hanya menggunakan CSS:
sumber
div
. Ini adalahdiv
yang memungkinkan pengguliran baris sementara header tetap di tempat yang sama. Pendekatan ini berhasil untuk kebutuhan saya.Untuk memperbaiki Header dan Kolom, Anda dapat menggunakan plugin berikut:
Diperbarui pada Juli 2019
Baru-baru ini muncul juga solusi CSS murni yang didasarkan pada properti CSS
position: sticky;
(di sini untuk detail lebih lanjut tentangnya) diterapkan ke setiapTH
item (bukan wadah induknya)sumber
Saya menemukan solusi luar biasa dari Paul O'Brien untuk masalah ini dan ingin membagikan tautannya: https://codepen.io/paulobrien/pen/LBrMxa
Saya menghapus gaya untuk footer:
sumber
Saya baru-baru ini harus membuat solusi dengan grup header tetap dan kolom pertama tetap. Saya membagi tabel saya menjadi div dan menggunakan jquery untuk menangkap window scrolling.
http://jsfiddle.net/TinT/EzXub/2346/
sumber
Seorang rekan kerja dan saya baru saja merilis proyek GitHub baru yang menyediakan arahan Angular yang dapat Anda gunakan untuk mendekorasi meja Anda dengan header tetap: https://github.com/objectcomputing/FixedHeader
Ini bergantung pada css dan angular saja, dengan arahan yang menambahkan beberapa div. Tidak diperlukan jQuery.
Implementasi ini tidak berfitur lengkap seperti beberapa implementasi lainnya, tetapi jika kebutuhan Anda hanya untuk menambahkan tabel tetap, menurut kami ini mungkin pilihan yang baik.
sumber
Setelah dua hari berkelahi dengan Internet Explorer 9 + Chrome + Firefox (Windows) dan Safari (Mac), saya telah menemukan sistem yang
Hasil:
HTML:
CSS:
sumber
div.cost_center table{border-collapse: collapse;}
dan teks ketiga harus sesuai dengan ukuran 60px (dalam contoh ini)Jawaban yang ada akan cocok untuk kebanyakan orang, tetapi bagi mereka yang ingin menambahkan bayangan di bawah tajuk tetap dan di sebelah kanan kolom pertama (tetap), berikut adalah contoh yang berfungsi (css murni):
http://jsbin.com/nayifepaxo/1/edit?html,output
Trik utama untuk membuatnya bekerja adalah menggunakan
::after
untuk menambahkan bayangan di sebelah kanan masing-masing yang pertamatd
di masing-masingtr
:Butuh waktu lama (terlalu lama ...) untuk menyelesaikan semuanya, jadi saya pikir saya akan berbagi untuk mereka yang berada dalam situasi yang sama.
sumber
Tampilkan cuplikan kode
perlu memperbaiki footer header
sumber
Sesuatu seperti ini mungkin berhasil untuk Anda ... Ini mungkin akan meminta Anda untuk mengatur lebar kolom untuk baris tajuk Anda.
http://jsfiddle.net/vkhNC/
Memperbarui:
Saya tidak yakin bahwa contoh yang Anda berikan dimungkinkan hanya dengan CSS. Saya ingin seseorang membuktikan bahwa saya salah. Inilah yang saya miliki sejauh ini . Ini bukan produk jadi tetapi bisa menjadi awal untuk Anda. Saya harap ini mengarahkan Anda ke arah yang membantu, di mana pun itu.
sumber
Solusi lain adalah dengan menggunakan AngularJS. Modul AngularUI memiliki direktif yang disebut
ng-grid
yang mendukung fitur yang disebut penyematan kolom. Ini bukan CSS murni 100% tetapi juga bukan solusi lainnya.http://angular-ui.github.io/ng-grid/#columnPinning
sumber
Contoh CSS Murni:
http://jsfiddle.net/cCarlson/L98m854d/
Kekurangan: Logika / struktur header tetap sangat bergantung pada dimensi tertentu, jadi abstraksi mungkin bukan pilihan yang tepat .
sumber
Posisi: sticky tidak berfungsi untuk beberapa elemen seperti (thead) di chrome dan browser webkit lainnya seperti safari.
Tapi itu bekerja dengan baik dengan (th)
Atau kunjungi contoh codepen saya :
sumber
Saya rasa ini akan membantu Anda: https://datatables.net/release-datatables/extensions/FixedHeader/examples/header_footer.html
Singkatnya, jika Anda tahu cara membuat dataTable, Anda hanya perlu menambahkan baris jQuery ini ke bawah:
bottom: true // untuk memperbaiki header Bawah.
sumber
Jika Anda hanya ingin menggunakan HTML dan CSS murni, saya punya solusi untuk masalah Anda:
Di jsFiddle ini Anda dapat melihat solusi non-skrip yang menyediakan tabel dengan header tetap. Seharusnya tidak menjadi masalah untuk menyesuaikan markup untuk kolom pertama tetap juga. Anda hanya perlu membuat tabel dengan posisi absolut untuk kolom pertama di dalam
hWrapper
-div dan memposisikan ulangvWrapper
-div.Menyediakan konten dinamis seharusnya tidak menjadi masalah menggunakan mesin penggoda sisi server atau sisi browser, solusi saya berfungsi dengan baik di semua browser modern dan browser lama dari IE8 dan seterusnya.
sumber
Hanya perlu mengubah gaya sebagai
Demo: https://plnkr.co/edit/Qxy5RMJBXmkaJAOjBtQn?p=preview
sumber