Temukan bagaimana detail dan elemen ringkasan yang sangat berguna bekerja, dan di mana tempat untuk menggunakannya.
Widget pengungkapan adalah kontrol antarmuka pengguna yang menyembunyikan dan menampilkan konten. Jika Anda membaca ini di web.dev, dan lebar area pandang kurang dari 106 ems, dengan mengklik tombol "Di halaman ini" di atas paragraf ini mengungkapkan daftar isi untuk bagian ini. Jika Anda tidak melihatnya, perbesar browser untuk melihat navigasi daftar isi pada halaman ini sebagai widget pengungkapan.
Antarmuka pengguna grafis Akordeon adalah serangkaian rangkaian yang ditumpuk secara vertikal widget pengungkapan. Kasus penggunaan umum untuk UI akordeon adalah halaman Pertanyaan Umum (FAQ) di banyak situs. FAQ akordeon berisi daftar pertanyaan yang terlihat; mengeklik pertanyaan akan memperluas, atau "mengungkap", jawaban atas pertanyaan itu.
jQuery telah menyertakan pola UI akordeon setidaknya sejak tahun 2009. Versi asli tanpa JavaScript
solusi akordeon mencakup menjadikan setiap pertanyaan FAQ menjadi <label>
diikuti dengan tanda centang yang diberi label, lalu menampilkan <div>
jika tanda centang dicentang. CSS akan terlihat seperti ini:
#FAQ [type="checkbox"] + div.answer {
/* all the answer styles */
display: none;
}
#FAQ [type="checkbox"]:checked + div.answer {
display: block;
}
Mengapa perlu sejarah? Widget pengungkapan, seperti akordeon, tanpa JavaScript atau hack kontrol formulir, merupakan game yang relatif baru
tambahan; <details>
dan <summary>
baru didukung sepenuhnya di semua {i>browser<i} modern sejak Januari 2020. Anda sekarang dapat membuat fungsi, meskipun lebih sedikit
daripada widget pengungkapan yang menarik yang hanya menggunakan HTML semantik. Anda hanya memerlukan elemen <details>
dan <summary>
: keduanya merupakan cara bawaan untuk menangani
memperluas dan menciutkan konten. Saat pengguna mengklik atau mengetuk <summary>
, atau melepaskan tombol Enter saat
<summary>
memiliki fokus, konten dari tombol <details>
induk menjadi terlihat.
Seperti semua konten semantik, Anda dapat meningkatkan kualitas fitur dan tampilan default secara bertahap. Dalam hal ini, sedikit CSS telah ditambahkan, tetapi tidak ada yang lain:
Perlu diketahui bahwa Codepen ini tidak berisi JavaScript.
Mengalihkan visibilitas: atribut open
Elemen <details>
adalah penampung widget pengungkapan. <summary>
adalah ringkasan atau legenda untuk <details>
induknya. Tujuan
ringkasan selalu ditampilkan, bertindak sebagai tombol yang mengalihkan tampilan konten induk lainnya. Berinteraksi
dengan <summary>
akan mengalihkan tampilan saudara ringkasan yang diberi label sendiri dengan mengalihkan <details>
' atribut open
elemen.
Atribut open
adalah atribut boolean. Jika ada, apa pun nilai atau ketiadaannya, ini menunjukkan bahwa semua <details>
konten ditampilkan kepada pengguna. Jika atribut open
tidak ada, hanya konten <summary>
yang ditampilkan.
Karena atribut open
ditambahkan dan dihapus secara otomatis saat pengguna berinteraksi dengan kontrol, atribut tersebut dapat digunakan di CSS untuk
menata gaya elemen secara berbeda
berdasarkan statusnya.
Anda dapat membuat akordeon dengan daftar beberapa elemen <details>
, masing-masing dengan turunan <summary>
. Menghapus atribut open
di HTML Anda berarti <details>
semuanya akan diciutkan, atau ditutup, hanya dengan judul ringkasan yang terlihat saat halaman dimuat;
setiap judul menjadi pembuka untuk seluruh konten dalam <details>
induk. Jika Anda menyertakan atribut open
di HTML, <details>
akan merender diperluas, dengan konten yang terlihat, saat halaman dimuat.
Konten tersembunyi dalam status diciutkan dapat ditelusuri di beberapa browser, tetapi tidak di browser lain, meskipun konten yang diciutkan bukan bagian dari DOM. Jika Anda melakukan penelusuran di Edge atau Chrome, detail yang berisi istilah penelusuran akan diperluas untuk ditampilkan kemunculannya. Perilaku ini tidak direplikasi di Firefox atau Safari.
<summary>
harus merupakan turunan pertama elemen <details>
, yang mewakili ringkasan, teks, atau legenda untuk sisanya
dari konten elemen <details>
induk tempatnya disarangkan. Konten elemen <summary>
dapat berupa judul apa pun
konten, teks biasa, atau HTML yang dapat digunakan dalam sebuah paragraf.
Mengalihkan penanda ringkasan
Di dua Codepens sebelumnya, Anda akan memperhatikan panah pada bagian inline-start
ringkasan. Widget pengungkapan biasanya ditampilkan di layar menggunakan segitiga kecil yang berputar (atau berputar)
untuk menunjukkan status terbuka/tertutup, dengan label di samping segitiga. Konten elemen <summary>
memberi label pada widget pengungkapan.
Panah berputar di atas setiap bagian adalah ::marker
yang ditetapkan pada
elemen <summary>
. Seperti item daftar, elemen <summary>
mendukung list-style
properti singkat dan properti longgarnya, termasuk list-style-type
.
Anda dapat menata gaya segitiga pengungkapan dengan CSS, termasuk mengubah penanda yang digunakan dari segitiga menjadi jenis butir lainnya, termasuk
gambar dengan list-style-image
.
Untuk menerapkan gaya lain, gunakan pemilih yang mirip dengan details summary::marker
. Tujuan
elemen semu ::marker
hanya menerima gaya dalam jumlah terbatas. Menghapus
::marker
dan menggantinya dengan ::before
yang lebih mudah ditata gayanya
praktik yang umum, dengan gaya CSS mengubah gaya konten yang dihasilkan sedikit berdasarkan ada atau tidaknya
dari atribut buka. Anda dapat menghapus ikon widget pengungkapan dengan menyetel list-style: none
atau menyetel konten
penanda ke none
, tetapi selalu sertakan indikator visual untuk memberi tahu pengguna yang dapat melihat bahwa konten ringkasan adalah tombol
yang akan menampilkan dan menyembunyikan
konten setelah aktivasi.
details summary::before {
/* all the styles */
}
details[open] summary::before {
/* changes applied when open only */
}
Contoh ini menghapus penanda default, dan menambahkan konten yang dihasilkan untuk membuat +
saat detail ditutup dan -
ketika detailnya terbuka.
Jika Anda ingin blok detail terbuka secara default, sertakan atribut open
pada tag <details>
pembuka. Anda juga dapat menambahkan ruang
di antara setiap dialog dan mentransisikan rotasi penanda yang dibuat dengan konten yang dihasilkan untuk meningkatkan tampilannya:
Cara penanganan error
Jika Anda tidak menyertakan <summary>
, browser akan membuatnya untuk Anda: dengan penanda dan kata "detail". Ringkasan ini
adalah bagian dari shadow root, sehingga gaya ringkasan CSS penulis tidak akan diterapkan. Sayangnya, Safari tidak menyertakan
detailnya dalam urutan fokus keyboard.
Jika Anda menyertakan <summary>
, tetapi bukan elemen pertama di <details>
, browser akan tetap menampilkan ringkasan
sebagaimana mestinya. Ringkasan ini juga tidak akan gagal jika Anda menyertakan tautan, label, atau elemen interaktif lainnya dalam ringkasan, tetapi {i>browser<i}
menangani konten interaktif dalam konten interaktif secara berbeda. Misalnya, jika Anda menyertakan tautan dalam ringkasan, beberapa browser
akan menambahkan ringkasan dan tautan ke urutan tab {i>default<i}, tetapi {i>browser<i} lain tidak akan berfokus pada tautan secara {i>default<i}.
Jika Anda mengklik <label>
yang disarangkan di dalam <summary>
, beberapa browser akan memberikan fokus pada kontrol formulir terkait; browser lain
akan memberikan fokus pada kontrol formulir dan mengalihkan <details>
menjadi terbuka atau tertutup.
Antarmuka HTMLDetailsElement
Seperti semua elemen HTML, HTMLDetailsElement
mewarisi semua
properti, metode, dan peristiwa dari HTMLElement
, lalu menambahkan
Properti instance open
dan toggle
peristiwa. Properti HTMLDetailsElement.open
adalah boolean
yang mencerminkan atribut HTML open
, yang menunjukkan
apakah konten elemen (tidak termasuk <summary>
) akan ditampilkan kepada pengguna atau tidak. Peristiwa tombol diaktifkan
saat elemen <details>
dialihkan menjadi terbuka atau tertutup. Anda dapat memproses peristiwa ini menggunakan addEventListener()
.
Jika Anda ingin menulis skrip untuk menutup detail yang dibuka saat pengguna membuka detail lainnya, hapus atribut buka
menggunakan removeAttribute("open")
:
Ini adalah satu-satunya contoh yang menggunakan JavaScript. Anda mungkin tidak memerlukan JavaScript kecuali untuk fungsi penutupan server membuka widget pengungkapan.
Ingat, <details>
dan <summary>
dapat memiliki banyak gaya dan bahkan dapat digunakan untuk membuat tips alat.
Namun, jika Anda akan menggunakan elemen semantik ini untuk kasus penggunaan ketika semantik native tidak cocok, selalu pastikan Anda mempertahankan aksesibilitas.
Sebagian besar HTML dapat diakses secara default. Tugas kami sebagai developer adalah memastikan konten kami tetap dapat diakses.
Menguji pemahaman Anda
Uji pengetahuan Anda tentang detail dan ringkasan.
<summary>
harus menjadi turunan pertama dari elemen yang mana?
<fieldset>
<p>
<details>