Geçerli web bileşenleri teknik özelliklerini kullanarak bir liste kutusu parçası uygulamak istiyorum. Ayrıca, ortaya çıkan liste kutusu ARIA standardına uygun olmalıdır. temizlik ve kapsülleme amaçları doğrultusundaÖzel öğeler ve erişilebilirlik
<x-listbox>
<x-option>Option 1</x-option>
<x-option>Option 2</x-option>
</x-listbox>
, her şey gölge dom'daki oluşturulması gereken: olarak listbox widget'ı başlatmasını olarak basit olmalıdır. Bu widget'ı uygulamak için, iki özel öğe, <x-listbox>
ve <x-option>
kayıtlıdır. <x-listbox>
gölgesi dom en üst düzey elemanı için Amacıyla role=listbox
ve aria-activedescendent
erişilebilirlik özelliklerini (bunlar uygulama ayrıntıları oldukları için <x-listbox>
öğe üzerinde bu özelliklerini istemiyoruz.)
taşıyan <div>
olduğunu Çalışmak için aria-activedescendent
, seçenek öğelerinde bir ids gerekir. Kimliklerin doğrudan <x-option>
öğelerine eklenmesi iki nedenden ötürü işe yaramaz: Öncelikle, liste kutusu widget'ını kullanan belgenin kimlik ad alanını kirletir. İkincisi ve hatta daha da önemlisi, ids, gölge sınırlarının (gölge domunun bir amacı olan) üzerinde çalışmaz, bu yüzden seçeneklerin kimlikleriözniteliğine sahip <div>
ile aynı gölge dom içinde yaşamak zorundadır. Bunun için
bir çözelti, bir kimlik konabilir üzerinde (bu gölge dom ait) bir <div>
ile <x-listbox>
gölgesi dom içinde olarak oluşturulacak her <x-option>
çevreleyecek şekilde olacaktır.
Soruma şudur: Bu gitmek için doğru yol ve özel öğe ve gölge dom web apis kullanarak nasıl uygulanır?
Bu, erişilebilirlik açısından işe yarayacak olsa da, kapsülleme hedeflerime aykırıdır (çünkü sağlanan HTML'nin parçası olmayan belirli bir öğe, ışık DOM'de görünecektir). İkincisi, eğer daha karmaşık bir widget'la (örneğin, bazı metinlerden daha fazlasını içeren bir liste kutusu) aynı şeyi denediysem, seçme elemanını, özel yapım aria uyumlu bir pencere ile değiştirmem gerekecekti, ki bu sadece benim x-listbox'ımı ikiye katlamak için – Marc