hidden ve inert iki ayrı global özniteliktir ve farklı sorunları çözer. Kısa cevap şudur: hidden öğeyi şu anda ilgisiz sayar ve tarayıcı onu hiç göstermez; hidden="until-found" içeriği gizler ama sayfada arama ve bağlantı ile bulunmasına izin verir. inert ise öğeyi gizlemez, onu ve tüm alt öğelerini etkileşimsiz yapar: tıklanmaz, odak almaz, düzenlenemez ve yardımcı teknolojilere sunulmaz.
Bu yazıda hidden özniteliğinin değerlerini, "hidden until found" durumunu ve beforematch olayını, inert özniteliğinin tam etkisini, modal pencerelerle ilişkisini ve bu ikisinin aria-hidden, disabled ve <input type="hidden"> ile farkını MDN belgelerine göre açıklıyoruz. Diğer global öznitelikler için global öznitelikler yazısına bakabilirsiniz.
inert özniteliği: görünür ama etkileşimsiz
inert mantıksal bir özniteliktir ve öğeyi ve düz ağaçtaki (flat tree) tüm alt öğelerini inert yapar. Bağlantılar, düğmeler ve form denetimleri gibi normalde etkileşimli öğeler dahil, bölümün tamamı odak alamaz ve tıklanamaz hâle gelir. MDN'ye göre inert öğeler ve alt öğeleri:
- Tıklandığında
clickolayı almaz. - Odaklanamaz ve
focusolayı tetiklenmez; sekme sırasından çıkar. - Tarayıcının sayfada bul özelliğinde aranamaz, içerikleri eşleşmez.
- İçindeki metin seçilemez.
- Normalde düzenlenebilen içerik, örneğin metin
<input>alanları vecontenteditabletaşıyan öğeler, düzenlenemez. - Erişilebilirlik ağacından çıkarıldığı için yardımcı teknolojilere görünmez.
<div>
<label for="dugme1">Düğme 1</label>
<button id="dugme1">Etkin düğme</button>
</div>
<div inert>
<label for="dugme2">Düğme 2</label>
<button id="dugme2">Inert düğme</button>
</div>İkinci <div> ekranda görünmeye devam eder ama içindeki düğmeye tıklanamaz, Tab ile ulaşılamaz. Aynı durumu JavaScript ile HTMLElement.inert özelliğiyle, CSS tarafında ise interactivity özelliğiyle de oluşturmak mümkündür.
inert ve modal dialog
showModal() ile açılan modal dialog öğeleri inertlikten kaçar: atalarından inertliği devralmazlar, ancak üzerlerine açıkça inert yazılırsa inert olabilirler. Başka hiçbir öğe inertlikten kaçamaz. Modal pencere açıkken pencere dışındaki her şeyin inert olması gerekir ve showModal() kullanıldığında bunu tarayıcı sağlar; bu yüzden modal pencere için sayfanın geri kalanına elle inert eklemeniz gerekmez.
Tek bir denetim için disabled daha uygundur
inert her öğeye eklenebilse de genellikle içerik bölümleri için kullanılır. Tek bir denetimi etkisiz kılmak istiyorsanız MDN disabled özniteliğini ve CSS :disabled stillerini önerir. disabled bir düğmenin basılmasını ve odaklanmasını engeller; form gönderiminde de devre dışı alanlar gönderilmez. Ayrıntılar button ve form doğrulama yazılarında.
Adım adım örnek: oturum açınca görünen bölüm
MDN'nin hidden için verdiği tipik senaryo, kullanıcı oturum açmadan kullanılamayacak sayfa bölümleridir. Bir hesap sayfası düşünelim: oturum açma formu başlangıçta görünür, hesap paneli gizlidir. Oturum açılınca form gizlenir, panel gösterilir.
<section id="giris">
<h2>Oturum açın</h2>
<form action="/giris" method="post">
<label for="kullanici">Kullanıcı adı</label>
<input type="text" id="kullanici" name="kullanici">
<button type="submit">Giriş</button>
</form>
</section>
<section id="panel" hidden>
<h2>Hesap paneli</h2>
<p>Son siparişleriniz burada listelenir.</p>
</section>Burada hidden doğru araçtır, çünkü panel oturum açılana kadar sayfa için gerçekten ilgisizdir. Panelin içeriği ekran okuyuculara da sunulmaz; bu da istenen davranıştır. inert bu senaryo için uygun olmazdı: panel görünür kalır ama kullanılamaz, ayrıca görsel bir işaret yoksa kullanıcı neden tıklayamadığını anlamaz. aria-hidden ise paneli yalnızca yardımcı teknolojilerden gizler ve gören kullanıcıya her şeyi gösterirdi; iki grup için farklı sayfalar ortaya çıkardı.
Bir ayrıntıya dikkat edin: gizli paneldeki bir formun alanları yine de gönderime katılır ve içindeki bir betik yine çalışır. Bu yüzden hidden bir erişim denetimi değildir. Kullanıcının görmemesi gereken veri sayfaya hiç yazılmamalı, sunucu tarafında korunmalıdır.
JavaScript ile göster ve gizle
Öznitelikler JavaScript tarafında aynı adlı özelliklere yansır. element.hidden = false öğeyi gösterir, true gizler; MDN'nin düğme örneğinde bir uyarı paragrafı bu yolla açılıp kapatılır. element.inert = true bir bölümü etkileşimsiz yapar.
const uyari = document.querySelector(".uyari");
uyari.hidden = false; // uyarı görünür olur
const panel = document.querySelector("#yan-panel");
panel.inert = true; // panel tıklanamaz ve odak alamazSık yapılan hatalar

- CSS ile
displayveriphiddenözniteliğinin neden çalışmadığını merak etmek.displaydeğeri gizli durumu geçersiz kılar. hidden="false"yazarak öğeyi göstermeye çalışmak. Geçersiz değer de gizli durum demektir; göstermek için özniteliği tamamen kaldırın.- Gizli bir formdaki alanların gönderilmeyeceğini sanmak.
hidden="until-found"öğesini satır içi bir öğeye vermek; arama onu açamaz.- Bir bölümü
inertyapıp kullanıcıya hiçbir görsel işaret vermemek. - Odaklanabilir bir düğmeye
aria-hidden="true"eklemek; ekran okuyucu kullanıcısı adı olmayan bir öğeye odaklanır.
Sık Sorulan Sorular
hidden ile CSS display: none arasında fark var mı?
Görsel sonuç çoğu zaman aynıdır, çünkü tarayıcılar gizli durumu display: none ile uygulayabilir. Fark anlamdadır: hidden içeriğin şu anda ilgisiz olduğunu HTML düzeyinde söyler ve CSS yüklenmese de geçerlidir. Ancak CSS ile display değeri verilirse öznitelik etkisini kaybeder.
Gizli bir bölüme bağlantı verebilir miyim?
Düz hidden taşıyan bir bölüme görünen bir bağlantıdan href ile bağlantı vermek MDN'ye göre yanlıştır; içerik ilgili değilse bağlantısı da olmamalıdır. Bağlantı vermek istiyorsanız hidden="until-found" kullanın: bağlantıya tıklanınca tarayıcı beforematch olayını tetikler, özniteliği kaldırır ve bölüme kaydırır.
inert ile disabled arasında hangisini seçmeliyim?
Tek bir form denetimi için disabled, bir bölümün tamamı için inert uygundur. disabled yalnızca bu özniteliği destekleyen öğelerde (düğmeler ve form denetimleri) çalışır.
hidden="until-found" arama motorları için ne anlama gelir?
MDN bu konuda bir şey söylemez; belgede anlatılan davranış tarayıcının "Sayfada bul" özelliği ve parça gezintisiyle sınırlıdır. Bu yüzden arama motorlarıyla ilgili bir varsayım yapmayın.
Modal pencere açıkken arka plana inert eklemem gerekir mi?
Hayır. showModal() ile açılan bir <dialog> için tarayıcı pencere dışındaki içeriği kendiliğinden inert yapar. Kendi pencere bileşeninizi başka öğelerle yazıyorsanız bu davranışı inert ile sizin sağlamanız gerekir.
Marka adları sahiplerine aittir. Bu yazı bağımsız bir teknik rehberdir; adı geçen kuruluşlarla bayilik veya ortaklık ilişkisi bulunduğu anlamına gelmez.
İlgili içerikler: HTML öğrenme rehberi · global öznitelikler · details ve summary · dialog etiketi · tabindex ve klavye erişimi · ARIA nedir

