Pola Desain Tabel Di Web

Diterbitkan: 2022-03-10
Ringkasan cepat Tabel adalah pola desain untuk menampilkan data dalam jumlah besar dalam baris dan kolom, dan sepertinya belum kalah disukai, jadi mari kita lihat bagaimana kita bisa membuat tabel di web pada tahun 2019.

Tabel adalah pola desain untuk menampilkan data dalam jumlah besar dalam baris dan kolom, membuatnya efisien untuk melakukan analisis komparatif pada objek kategorikal. Tabel telah digunakan untuk tujuan ini pada awal abad ke-2 dan ketika dunia mulai menjadi digital, tabel datang bersama kita.

Tidak dapat dihindari bahwa web akan mendukung tampilan data dalam format tabel. Tabel HTML menyajikan data tabular secara semantik dan secara struktural sesuai. Namun, gaya default pada tabel HTML bukanlah hal yang paling estetis yang pernah Anda lihat. Bergantung pada desain visual yang diinginkan, beberapa upaya diperlukan di bagian depan CSS untuk mempercantik tabel tersebut. Satu dekade yang lalu, sebuah artikel dengan “Top 10 CSS Table Designs” diterbitkan di Smashing Magazine, dan masih terus mendapatkan banyak lalu lintas hingga hari ini.

Web telah banyak berkembang selama dekade terakhir, dan lebih mudah dari sebelumnya untuk membuat situs atau aplikasi Anda beradaptasi dengan viewport yang dilihatnya. Meskipun demikian, kami harus terus membuat pilihan desain yang dipertimbangkan yang tidak berkompromi aksesibilitas. Karena tabel sepertinya tidak akan disukai dalam waktu dekat, mari kita lihat bagaimana tabel dapat dibuat di web pada tahun 2019.

Lebih banyak setelah melompat! Lanjutkan membaca di bawah ini

Opsi Hanya CSS

Jika dataset Anda tidak terlalu besar, dan fitur seperti pagination dan sorting tidak diperlukan, maka pertimbangkan opsi bebas JavaScript. Anda bisa mendapatkan beberapa hasil yang cukup bagus yang bekerja dengan baik pada keseluruhan ukuran layar tanpa menambah bobot perpustakaan besar.

Sayangnya, tanpa bantuan JavaScript untuk beberapa manipulasi DOM di bagian depan aksesibilitas, kami hanya memiliki beberapa opsi CSS saja. Tetapi untuk kumpulan data kecil, seringkali sudah cukup.

Opsi 1: Tidak Melakukan Apa-apa

Kami akan memulai dengan skenario upaya rendah. Jika data Anda cocok dengan tabel dengan hanya beberapa kolom dan banyak baris, maka tabel seperti itu cukup siap untuk seluler.

Tabel dengan beberapa kolom dan banyak baris ditampilkan di layar sempit dan lebar
Tabel dengan beberapa kolom dan banyak baris ditampilkan pada layar sempit dan lebar (Pratinjau besar)

Masalah yang Anda miliki mungkin adalah memiliki terlalu banyak ruang pada layar yang lebih lebar, jadi mungkin disarankan untuk "menutup" lebar maksimum tabel dengan max-width sambil membiarkannya menyusut seperlunya pada layar yang sempit.

Lihat Tabel Pena #1: Beberapa kolom, banyak baris oleh (Chen Hui Jing) di CodePen.

Lihat Tabel Pena #1: Beberapa kolom, banyak baris oleh (Chen Hui Jing) di CodePen.

Pola semacam ini berfungsi paling baik jika data Anda sendiri bukan baris dan baris teks. Jika mereka numerik, atau frase pendek, Anda mungkin bisa lolos dengan tidak melakukan banyak hal.

Opsi 2: Gaya Gulir

David Bushell menulis tekniknya untuk tabel responsif pada tahun 2012, yang melibatkan pemanggilan overflow dan memungkinkan pengguna untuk menggulir untuk melihat lebih banyak data. Orang dapat berargumen bahwa ini bukan solusi yang responsif, tetapi secara teknis, wadah merespons lebar viewport.

Gaya tabel sedemikian rupa sehingga pengguna tahu ada lebih banyak data di scroll.
Saat menata tabel, izinkan pengguna menggulir untuk melihat lebih banyak data. (Pratinjau besar)

Mari kita lihat overflow "dasar" terlebih dahulu. Bayangkan saya menggunakan kutipan udara di sekitar dasar, karena gaya untuk bayangan bergulir sama sekali tidak. Namun, dalam hal ini, "dasar" mengacu pada fakta bahwa tabel tidak berubah dengan cara apa pun.

Lihat Pena Tabel #3: Gaya gulir (dasar) oleh Chen Hui Jing di CodePen.

Lihat Pena Tabel #3: Gaya gulir (dasar) oleh Chen Hui Jing di CodePen.

Teknik melakukan scrolling shadow ini berasal dari Roma Komarov dan Lea Verou yang saling bertukar ide untuk menciptakan keajaiban. Ini bergantung pada penggunaan beberapa gradien (linier dan radial) sebagai gambar latar belakang pada elemen yang mengandung, dan menggunakan background-attachment: local untuk memposisikan latar belakang relatif terhadap isinya.

Yang menarik dari teknik ini adalah untuk browser yang tidak mendukung scrolling shadows, Anda masih dapat menggulir tabel seperti biasa. Itu tidak merusak tata letak sama sekali.

Opsi pengguliran lainnya adalah membalik header tabel dari konfigurasi baris ke konfigurasi kolom, sambil menerapkan pengguliran horizontal ke konten elemen <tbody> . Teknik ini memanfaatkan perilaku Flexbox untuk mengubah baris tabel menjadi kolom.

Lihat Pena Tabel #3: Menata gaya gulir (tajuk terbalik) oleh Chen Hui Jing di CodePen.

Lihat Pena Tabel #3: Menata gaya gulir (tajuk terbalik) oleh Chen Hui Jing di CodePen.

Dengan menerapkan display: flex ke tabel, itu membuat <thead> dan <tbody> keduanya menjadi anak-anak flex, yang secara default diletakkan bersebelahan pada garis flex yang sama.

Kami juga membuat elemen <tbody> menjadi wadah fleksibel, sehingga membuat semua elemen <tr> di dalamnya menjadi anak-anak fleksibel yang diletakkan dalam satu garis fleksibel juga. Terakhir, setiap sel tabel harus memiliki tampilan yang disetel untuk block alih-alih table-cell default.

Keuntungan dari teknik ini adalah bahwa header selalu terlihat, seperti efek header tetap, sehingga pengguna tidak kehilangan konteks saat mereka menggulir kolom data. Satu hal yang perlu diperhatikan adalah bahwa teknik ini menghasilkan perbedaan urutan visual dan sumber, dan ini membuat segalanya sedikit tidak intuitif.

Taburkan Pada Beberapa JavaScript

Seperti disebutkan sebelumnya, opsi tata letak yang melibatkan morphing tabel dengan memodifikasi nilai display terkadang memiliki implikasi negatif untuk aksesibilitas, yang memerlukan beberapa manipulasi DOM kecil untuk diperbaiki.

Selain itu, ada sejumlah tips pengalaman pengguna dalam mendesain tabel data dari Andrew Coyle, termasuk fitur seperti pagination, sorting, filtering, dan sebagainya (fitur yang memang memerlukan beberapa JavaScript untuk diaktifkan).

Jika Anda bekerja dengan kumpulan data yang relatif lebih sederhana, mungkin Anda ingin menulis fungsi Anda sendiri untuk beberapa fitur ini.

Baris Ke Blok, Dengan Perbaikan Aksesibilitas

Sejauh yang saya tahu, teknik tabel data responsif ini muncul dari artikel CSS-Tricks "Tabel Data Responsif" oleh Chris Coyier pada tahun 2011. Sejak itu telah diadaptasi dan diperluas oleh banyak orang lain.

Inti dari teknik ini adalah memanfaatkan kueri media untuk mengalihkan properti tampilan elemen tabel dan turunannya untuk block pada area pandang yang sempit.

Baris tabel menjadi blok bertumpuk individu pada viewports sempit
Menciutkan baris menjadi blok (Pratinjau besar)

Pada layar sempit, header tabel disembunyikan secara visual, tetapi masih ada di pohon aksesibilitas. Dengan menerapkan atribut data ke sel tabel, kita kemudian dapat menampilkan label untuk data melalui CSS, sambil menjaga konten label dalam HTML. Silakan merujuk ke CodePen di bawah ini untuk mengetahui tampilan mark-up dan gaya:

Lihat Tabel Pena #2: Baris ke blok oleh Chen Hui Jing di CodePen.

Lihat Tabel Pena #2: Baris ke blok oleh Chen Hui Jing di CodePen.

Metode asli menerapkan lebar pada elemen semu yang menampilkan teks label, tetapi itu berarti Anda perlu mengetahui jumlah ruang yang dibutuhkan label Anda untuk memulai. Contoh di atas menggunakan pendekatan yang sedikit berbeda, di mana label dan data masing-masing berada di sisi berlawanan dari blok yang memuatnya.

Kami dapat mencapai efek seperti itu melalui margin otomatis dalam konteks pemformatan fleksibel. Jika kita mengatur properti tampilan untuk setiap elemen <td> menjadi fleksibel, karena elemen semu menghasilkan kotak seolah-olah mereka adalah anak langsung dari elemen asalnya, mereka menjadi anak fleksibel dari <td> .

Setelah itu, ini adalah masalah pengaturan margin-right: auto pada elemen semu untuk mendorong konten sel ke ujung sel yang paling ujung.

Pendekatan lain melakukan tata letak viewport sempit menggunakan kombinasi Grid dan display: contents . Harap dicatat bahwa display: contents di browser pendukung memiliki masalah dengan aksesibilitas saat ini, dan metode ini tidak boleh digunakan dalam produksi sampai bug tersebut diperbaiki.

Tapi mungkin Anda membaca ini setelah bug tersebut diselesaikan, dalam hal ini, inilah opsi tata letak alternatif.

Lihat Tabel Pena #2: Baris ke blok (alt) oleh Chen Hui Jing di CodePen.

Lihat Tabel Pena #2: Baris ke blok (alt) oleh Chen Hui Jing di CodePen.

Setiap elemen <tr> diatur untuk display: grid , dan setiap elemen <td> diatur untuk display: contents . Hanya anak-anak langsung dari wadah kisi yang berpartisipasi dalam konteks pemformatan kisi; dalam hal ini, ini adalah elemen <td> .

Ketika display: contents diterapkan ke <td> , itu akan "diganti" oleh isinya, dalam hal ini, elemen pseudo dan <span> di dalam <td> menjadi anak-anak grid sebagai gantinya.

Yang saya sukai dari pendekatan ini adalah kemampuan untuk menggunakan max-content untuk mengukur kolom elemen semu, memastikan bahwa kolom akan selalu menjadi lebar label terpanjang, tanpa kita harus menetapkan nilai lebar secara manual.

Di masa mendatang, ketika nilai ukuran min-content , max-content dan fit-content (dicakup oleh CSS Intrinsic & Extrinsic Sizing Module Level 3) didukung sebagai nilai width dan height umum, kita akan memiliki lebih banyak opsi untuk meletakkan hal-hal keluar.

Kelemahan dari pendekatan ini adalah Anda membutuhkan <span> atau <p> tambahan di sekitar konten di sel tabel Anda jika belum memilikinya, jika tidak, tidak akan ada cara untuk menerapkan gaya padanya.

Paginasi Sederhana

Contoh ini menunjukkan implementasi pagination dasar yang dimodifikasi dari CodePen ini oleh Gjore Milevski menjadi paginasi pada baris tabel, bukan div. Ini adalah perpanjangan dari contoh "gaya gulir" yang dibahas di bagian sebelumnya.

Lihat Tabel Pena #4: Penomoran halaman sederhana oleh Chen Hui Jing di CodePen.

Lihat Tabel Pena #4: Penomoran halaman sederhana oleh Chen Hui Jing di CodePen.

Dari perspektif tata letak, Flexbox sangat berguna untuk memposisikan elemen pagination di berbagai ukuran viewport. Desain proyek yang berbeda akan memiliki persyaratan yang berbeda, tetapi keserbagunaan Flexbox akan memungkinkan Anda untuk memenuhi perbedaan ini.

Dalam hal ini, pagination dipusatkan pada halaman dan di atas tabel. Kontrol untuk menavigasi mundur dan maju ditempatkan di kedua sisi indikator halaman pada layar yang lebih lebar, tetapi keempatnya muncul di atas indikator halaman pada layar sempit.

Kita dapat melakukan ini dengan memanfaatkan properti order . Pengurutan ulang konten secara visual harus selalu dilakukan dengan pertimbangan karena properti ini tidak mengubah urutan sumber — hanya tampilannya di layar.

Penyortiran Sederhana

Contoh ini menunjukkan implementasi pengurutan dasar yang dimodifikasi dari cuplikan kode ini oleh Peter Noble untuk memenuhi teks dan angka:

Lihat Pena #Tabel 5: Penyortiran sederhana oleh Chen Hui Jing di CodePen.

Lihat Pena #Tabel 5: Penyortiran sederhana oleh Chen Hui Jing di CodePen.

Akan berguna untuk memiliki semacam indikator kolom mana yang saat ini sedang diurutkan dan dalam urutan apa. Kita dapat melakukannya dengan penambahan kelas CSS yang kemudian dapat ditata sesuai keinginan Anda. Dalam hal ini, simbol indikator adalah elemen semu yang diaktifkan saat header target diklik.

Pencarian Sederhana

Contoh ini adalah fungsi pemfilteran dasar yang mengulangi semua konten tekstual dari setiap sel tabel dan menerapkan kelas CSS untuk menyembunyikan semua baris yang tidak cocok dengan bidang input pencarian.

Lihat Tabel Pena #6: Pemfilteran sederhana oleh Chen Hui Jing di CodePen.

Lihat Tabel Pena #6: Pemfilteran sederhana oleh Chen Hui Jing di CodePen.

Implementasi seperti itu relatif naif, dan jika kasus penggunaan Anda membutuhkannya, mungkin masuk akal untuk mencari per kolom sebagai gantinya. Dalam skenario itu, mungkin ide yang baik untuk memiliki setiap bidang input sebagai bagian dari tabel di kolom masing-masing.

Biarkan Perpustakaan Menanganinya

Cuplikan JavaScript di atas berfungsi untuk menunjukkan bagaimana tabel dengan jumlah data yang lebih besar dapat ditingkatkan untuk membuat hidup lebih mudah bagi pengguna tabel tersebut. Tetapi dengan kumpulan data yang sangat besar, mungkin masuk akal untuk menggunakan pustaka yang ada untuk mengelola tabel besar Anda.

Pola pengalih kolom adalah pola di mana kolom yang tidak penting disembunyikan di layar yang lebih kecil. Biasanya, saya bukan penggemar menyembunyikan konten hanya karena viewport sempit, tetapi pendekatan ini oleh Maggie Costello Wachs dari Filament Group menyelesaikan masalah saya dengan menyediakan menu drop-down yang memungkinkan pengguna untuk mengaktifkan kembali kolom tersembunyi ke melihat.

Artikel di atas diterbitkan kembali pada tahun 2011, tetapi Filament Group telah mengembangkan rangkaian lengkap plugin tabel responsif yang dikenal sebagai Tablesaw, yang mencakup fitur seperti penyortiran, pemilihan baris, internasionalisasi, dan sebagainya.

Fitur toggle kolom di TableSaw juga tidak lagi bergantung pada jQuery, tidak seperti contoh dari artikel aslinya. Tablesaw adalah satu-satunya perpustakaan yang saya temukan yang tidak memiliki ketergantungan pada jQuery saat ini.

Membungkus

Ada banyak sekali pola desain tabel di luar sana, dan pendekatan mana yang Anda pilih sangat bergantung pada jenis data yang Anda miliki dan audiens target untuk data tersebut. Pada akhirnya, tabel adalah metode untuk organisasi dan penyajian data. Penting untuk mengetahui informasi mana yang paling penting bagi pengguna Anda dan memutuskan pendekatan yang paling sesuai dengan kebutuhan mereka.

Bacaan lebih lanjut

  • “Tabel Responsif Khusus CSS,” David Bushell
  • “Tabel yang Dapat Diakses, Sederhana, dan Responsif,” Davide Rizzo, Trik-CSS
  • “Tata Letak Meja Responsif,” Matt Smith
  • “Pola Responsif: Tabel,” Brad Frost
  • “Hei, Masih Boleh Menggunakan Meja,” Adrian Roselli
  • “Tabel, Properti Tampilan CSS, dan ARIA,” Adrian Roselli
  • “Tabel Data,” Heydon Pickering