Sadece düğme kullanın
(gomakethings.com)- Web arayüzlerinde
yerinekullanmak, erişilebilirlik ve işlevsellik açısından doğru tercihtir - ``, ekran okuyucular tarafından etkileşimli bir öğe olarak algılanmaz ve klavye odağına ya da
Enter,Spacebargirişlerine tepki vermez [role="button"]veya[tabindex="0"]öznitelikleri eklense bile odak sırası hataları ve klavye olayı işleme sorunları devam eder- Bu sorunları çözmek için birden fazla event listener ve koşul eklemek gereksiz karmaşıklık yaratır
- ``, erişilebilirlik, odak ve klavye girdisi işleme özelliklerini varsayılan olarak sunar; bu yüzden basit ve standart çözümdür
Yanlış yaklaşım: `` ile düğme yapmak
- React veya HTMX kullananlar arasında `` biçiminde modal açma gibi etkileşimleri gerçekleştirme örnekleri yaygındır
- Örnek kod:
Open Modal
- Örnek kod:
- Bu yaklaşımın sorunları
- Ekran okuyucular ilgili öğeyi etkileşimli bir öğe olarak algılamaz
- Klavyeyle odağa geçilemez
- Yalnızca
clickolayı çalışır;EnterveyaSpacebargirişlerine tepki vermez
Erişilebilirlik “düzeltme” girişimlerinin sınırları
[role="button"]özniteliğini eklemek ekran okuyucu algılama sorununu çözer, ancak odaklanabilirlik ve klavye girdisi işleme sorunları hâlâ kalır[tabindex="0"]eklenerek odaklanabilir hâle getirilebilir, ancak odak sırasının bozulması veya beklenmedik geçişlerin yaşanması riski vardır- Klavye girdisini işlemek için
keydownolayını global olarak (document) kaydetmek veEnterveya' '(space) tuşunu algılayarak odaktaki öğeyi bulup çalıştırmak gerekirdocument.addEventListener('keydown', (event) => { if (event.key !== 'Enter' && event.key !== ' ') return; const notRealBtn = document.activeElement.closest('[onclick]'); if (!notRealBtn) return; // 실행 코드 }); - Sonuçta bu, `` öğesinin zaten varsayılan olarak sunduğu işlevleri karmaşık şekilde yeniden uygulamak anlamına gelir
`` öğesinin sunduğu varsayılan işlevler
- `` öğesi aşağıdakileri otomatik olarak destekler
- örtük rol (
[role="button"]) - otomatik odaklanabilirlik
- odak durumundayken
EnterveSpacebargirişlerindeclickolayını tetikleme
- örtük rol (
- Aynı davranışı
ile uygulamak için **birden fazla öznitelik ve script gerekir**, ancakile bu tek satırda çözülebilirOpen Modal
Sonuç: en iyisi sadelik
- ``, erişilebilirlik standartlarını karşılarken kod miktarını azaltmanın en basit yoludur
- Gereksiz olay işleme veya öznitelik eklemeleri olmadan standart HTML öğeleri kullanmak, bakım kolaylığı ve verimlilik açısından avantaj sağlar
- “Tembel geliştiriciler doğru öğeyi kullanmalı” mesajıyla, gereksiz karmaşıklıktan kaçınan ve varsayılan işlevlerden yararlanan geliştirme alışkanlıklarının önemi vurgulanır
7 yorum
Çok iyi bir yazı. Metnin özü, "HTML etiketlerini anlamlı şekilde kullanalım." diye özetlenebilir. Tıklama olayını
div(veya başka bir) etiketiyle sağlıyorsak, bunun eskiden düzenitableetiketiyle kurduğumuz dönemden hiçbir farkı olmadığını düşünüyorum.Elbette
aria-*niteliklerini eklemek bunu daha açık hale getirebilir, ama o kadar uğraşacağına doğrudan uygun etiketi kullanmak daha iyi lolNostalji oldu lol
background,border,outline,appearance,-webkit-appearance,cursorGeçersiz kılmam gereken varsayılan stil sayfası çok fazla :(
İşte bu yüzden CSS Reset var.
Bizdeki resmi kurum siteleri `` etiketini çok kullanıyor gibi...
Hacker News görüşleri
Şikayetlerimden biri, web sitelerinin gezinmeyi
onclickişleyicisi ile uygulaması Sadece `` etiketi kullansanız yeni sekmede açma, erişilebilirlik araçlarıyla entegrasyon, sağ tık menüsü gibi her şey otomatik olarak düzgün çalışır Eğer mesele gezinmeyse JavaScript çorbası yerine bağlantı kullanmak gerekironClickile yapılmıştı Fiilen bağlantı olan öğelerin bile tamamı tıklama işleyicisiyle ele alınıyordu, bunu hiç anlamıyorumÇoğu butonda
type="button"açıkça belirtilmeli Varsayılan değersubmitolduğu için formun içindeyse otomatik gönderim yapar Muhtemelen bazı geliştiriciler bunu bilmediği için `` kullanıyorile aynıdır vebundan farklı değildirkullanırsanız `type="submit"` sorunundan kaçınabilirsinizbaştan boş gelir, bu yüzden sadece ihtiyaç duyduğunuz işlevleri eklersiniz ve sonradan değiştirmesi de kolay olur Buna karşılık `` için varsayılan davranışı anlamak adına belgelere bakmanız gerekir Sonuçta mesele açık kontrol ile yerleşik özellikler arasındaki tercih meselesidirKeşke yazı, “o amaç için üretilmiş HTML öğesini olduğu gibi kullanalım” yönünde genişletilseydi Birçok SPA geliştiricisi HTML öğelerinin anlamını iyi bilmediği için her seferinde tekerleği yeniden icat ediyor
Günümüzde ekranda tıklanabilir alan bulmak için oraya buraya basan bir nesil oluştu 10 yıl önce biri bağlantı sürüklemeyi metin seçiminden daha önemli hâle getirdi ve artık metin seçmek neredeyse imkânsız Bunu düzeltmek için belki de tarayıcıyı fork etmek gerekir
Chrome’un varsayılan stil sayfasında
button {align-items: flex-start}olduğu için flexbox boyutlandırma hatası yüzünden uzun süre uğraştım Yine de mümkün olduğunca doğru HTML öğelerini kullanmaya çalışıyorum ama küçük yan projelerde bazen `` daha rahat olabiliyorappearance: noneözelliği buton stilini sıfırlamak için faydalı Ben.unbuttonifydiye bir sınıf yapıyorum; böylece buton gibi davranıp farklı görünebiliyorMümkün olduğunca öğeleri asıl amaçlarına uygun şekilde kullanmak gerekir
Butonlarla ilgili iki şikayetim var Biri, eninde sonunda stillerini baştan vermek zorunda olmanız, diğeri de butonları iç içe koyamayacağınıza dair uyarı Bu pratikte oldukça sık karşımıza çıkıyor
LLM’ler bu tür hatalı kalıpları sık sık üretiyor Tarayıcının varsayılan özelliklerini yok sayıp gereğinden karmaşık uygulamalar çıkarıyorlar Ben Claude’a bu tarz kodları sadeleştirmesini sık sık söylüyorum TypeScript’te de hata işleme biçimini tuhaflaştırma eğilimleri var
Ben mümkün olduğunca varsayılan olarak buton kullanıyorum Ama gerçekte bağlantı gibi davranması gereken durumlarda `` etiketi kullanıyorum
Neden `` kullanalım diyenler çıktığını merak etmiştim