details ve summary ile açılır kapanır içerik
İçeriği <details> ile sar ve en başa bir <summary> koy. Summary görünür kalır; geri kalan her şey okur ona tıklayana kadar gizlidir:
Açmak için soruya, kapatmak için yeniden tıkla. Tarayıcı üçgen işareti ekler, summary'yi odaklanabilir yapar, onu Enter ya da Space ile açıp kapatır ve ekran okuyuculara açık mı kapalı mı olduğunu söyler. Hiç JavaScript yok.
<summary> yazmazsan tarayıcı onun yerine varsayılan bir etiket gösterir (İngilizcede "Details").
Varsayılan olarak açık
Boolean open özelliği içeriği baştan gösterir. Okur açıp kapattıkça tarayıcı open özelliğini ekler ve kaldırır, bu yüzden stil vermek için de tutamak odur:
Açık kutunun details[open] seçicisinden gelen mavi bir kenarlığı var. "Returns" bölümünü aç, o da maviye döner; ikisi aynı anda açık olabilir.
Akordeon: aynı anda yalnızca biri açık
Birkaç <details> elementine aynı name değerini ver, tekli bir grup olurlar: birini açmak diğerlerini kapatır. Bu eskiden JavaScript gerektirirdi, şimdi güncel Chrome, Edge, Firefox ve Safari'de yalnızca özellikle çalışır:
İkinci soruyu aç, ilki kapanır. name özelliklerini kaldır, yeniden birbirinden bağımsız açılırlar. Tekli bir akordeon okurun karşılaştırmak isteyebileceği içeriği gizler, bu yüzden bölümler birbirinin alternatifi olduğunda onu, insanlar birkaçını açık isteyebileceğinde de düz <details> kullan.
İşarete stil vermek
Üçgen, summary üzerindeki bir liste işaretidir. list-style: none onu kaldırır (::-webkit-details-marker kuralı Safari'yi kapsar), bir sözde element de kendi göstergeni çizebilir:
Artı işareti bölüm açıldığında 45 derece dönerek bir çarpıya dönüşür. Buradaki :focus-visible çerçevesi gibi görünür bir odak stili bırak: varsayılan işareti kaldırdığında klavye kullananların güvendiği şey odak halkasıdır.
toggle olayı ve open özelliği
JavaScript details.open değerini okuyup ayarlayabilir ve toggle olayı, bir tıklama, bir tuş ya da bir script'ten kaynaklansın, her değişiklikten sonra tetiklenir:
"Expand all" ikisine de open ayarlar, günlük de son toggle olayını gösterir. Olay kabarcıklanmaz (bubble), bu yüzden bir üst element yerine her <details> elementini ayrı dinle.
summary içine neler girer
Bir summary metin, satır içi elementler ya da bölüm başlığı sayfanın ana hattına aitse bir başlık barındırır:
<details>
<summary><h3>Refund policy</h3></summary>
<p>...</p>
</details>
<summary> içinde link, buton ve form alanlarından kaçın: summary zaten bir kontroldür, bu yüzden içindeki bir kontrolü gözden kaçırmak ya da yanlışlıkla ona basmak kolaydır ve ekran okuyucular iç içe kontrolleri kötü duyurur. Etkileşimli içeriği onun yerine <details> gövdesine koy.
Sık yapılan hatalar
- Bir
<div>ve JavaScript ile aç kapa yapmak.<details>tıklamaları, tuşları ve ekran okuyucu durumunu zaten yönetir. Özel bir aç kapa gerçekten gerektiğindearia-expandedolan bir button kullan. <summary>elementini ilk sıra dışında bir yere koymak.<details>elementinin ilk çocuğu olmalı.- İşareti yerine bir şey koymadan gizlemek. Okurlara summary'nin açıldığına dair, yukarıdaki artı işareti gibi bir işaret ver.
- İçeriği gizlemek için
displaykullanmak. Onun yerineopendeğerini değiştir; içeriği zorla görünür ya da gizli yapan CSS tarayıcının durumuyla çatışır. - İnsanların karşılaştırdığı içerik için tekli gruplar.
namedeğerini yalnızca aynı anda tek bir açık bölümün mantıklı olduğu durumlarda kullan.
Sıkça Sorulan Sorular
HTML'de details ve summary ne işe yarar?
<details> bir açma kapama bileşeni oluşturur: açılıp kapanabilen bir bölüm. İlk çocuğu olan <summary> her zaman görünen etikettir; ona tıklamak (ya da odaktayken Enter veya Space'e basmak) <details> içindeki diğer her şeyi gösterir ya da gizler.
Bir details elementini varsayılan olarak nasıl açık yaparım?
Boolean open özelliğini ekle: <details open>. Kullanıcı açıp kapattıkça tarayıcı bu özelliği ekler ve kaldırır, böylece CSS details[open] seçicisine stil verebilir.
Yalnızca bir bölümün açık olduğu bir akordeonu nasıl yaparım?
Gruptaki her <details> elementine aynı name özelliğini ver, örneğin name="faq". Birini açmak, JavaScript olmadan o gruptaki diğerlerini kapatır.
Bir details summary'deki oku nasıl kaldırır ya da değiştiririm?
summary üzerine list-style: none ayarla ve Safari için summary::-webkit-details-marker { display: none; } ekle. Sonra kendi göstergeni, örneğin summary::after ile çiz ve onu details[open] summary::after ile değiştir.
Bir details elementinin açıldığını algılayabilir miyim?
Evet. <details> elementinde toggle olayını dinle ve open özelliğini oku. JavaScript'te details.open = true ayarlamak onu açar.