Bootstrap 5.0 ile erişilebilir bir site kurmak mümkündür, ama bunu kendiliğinden yapmaz: belgelere göre sonucun büyük kısmı sizin yazdığınız HTML'e, eklediğiniz stillere ve betiklere bağlıdır. Bootstrap'in size verdiği araçlar şunlardır: görsel olarak gizlenen ama ekran okuyuculara açık kalan .visually-hidden sınıfı, klavyeyle odaklanınca görünen .visually-hidden-focusable sınıfı, azaltılmış hareket tercihine uyan geçişler ve bileşen belgelerinde tek tek gösterilen ARIA öznitelikleri.
Bu yazı Bootstrap'in erişilebilirlik sayfasını, visually hidden yardımcısını ve bileşen sayfalarına dağılmış erişilebilirlik notlarını bir araya getiriyor. ARIA rollerinin ve özniteliklerinin genel anlamı Bootstrap'e özgü değildir; onları ARIA nedir yazısında, HTML semantiğini HTML öğrenme rehberinde bulabilirsiniz. Anlatım Bootstrap 5.0 belgelerine ve v5.0.2 kaynak koduna dayanır; sonraki 5.x sürümleri yeni özellikler ekledi, güncel sürüm için getbootstrap.com'a bakın.
Bootstrap neyi sağlar, neyi size bırakır?

Belgeler erişilebilirlik sayfasına bir sınır çizerek başlar: Bootstrap ile yapılmış bir projenin genel erişilebilirliği büyük ölçüde yazarın işaretlemesine, ek stillerine ve betiklerine bağlıdır. Bunlar doğru uygulandığında WCAG 2.1 (A, AA, AAA düzeyleri), Section 508 ve benzeri standartları karşılayan siteler kurmak mümkün olmalıdır. Yani Bootstrap'i kullanmak bir standarda uyum garantisi değildir; doğru kullanmak bu uyumu mümkün kılar.
Yapısal işaretleme tarafında Bootstrap'in stilleri çok farklı HTML yapılarına uygulanabilir. Belgelerdeki örnekler hem Bootstrap'in kullanımını hem de uygun semantik işaretlemeyi göstermeyi amaçlar. Etkileşimli bileşenler, yani modal pencereler, açılır menüler ve tooltip'ler, dokunmatik ekran, fare ve klavye kullanıcıları için tasarlanmıştır ve ilgili WAI-ARIA rolleri ile öznitelikleri sayesinde ekran okuyucularla da anlaşılabilir olmalıdır. Ancak bileşenler bilerek genel tutulduğu için, bileşeninizin gerçek işlevini doğru anlatmak üzere ek ARIA öznitelikleri ve JavaScript davranışı eklemeniz gerekebilir. Belgeler bunu genellikle ilgili bileşen sayfasında belirtir; aşağıdaki tabloda bu notları topladık.
Renk kontrastı ve renkle anlam aktarmak
Belgeler varsayılan paletle ilgili açık bir uyarı içerir: buton, uyarı ve form doğrulama göstergeleri gibi yerlerde kullanılan bazı renk kombinasyonları, özellikle açık zeminde, WCAG 2.1'in metin için önerdiği 4.5:1 ve metin dışı öğeler için önerdiği 3:1 kontrast oranının altında kalabilir. Belgeler bu yüzden kendi renk kullanımınızı test etmenizi ve gerekirse varsayılan renkleri elle değiştirip genişletmenizi önerir. Tema renklerini Sass ile değiştirmek theme colors yazısının konusu.
Renkle ilgili ikinci kural birçok bileşen sayfasında tekrar eder: alert, badge, buton, kart, liste grubu, tablo ve renk yardımcıları sayfalarında aynı not bulunur. Renk yalnızca görsel bir işarettir ve ekran okuyucu kullanıcılarına aktarılmaz. Rengin taşıdığı bilgi ya görünür metinden açıkça anlaşılmalı ya da .visually-hidden ile gizlenmiş ek metin gibi başka bir yolla verilmelidir. Örneğin kırmızı bir .alert-danger kutusunda "Hata" sözcüğü görünür olarak yazıyorsa ek bir şey gerekmez.
Azaltılmış hareket: prefers-reduced-motion
Bootstrap, kullanıcının tarayıcı ya da işletim sistemi düzeyinde azaltılmış hareket tercihini belirtmesine imkân veren prefers-reduced-motion medya özelliğini destekler. Belgelere göre bu tercihi destekleyen ortamlarda Bootstrap'teki CSS geçişlerinin çoğu kapatılır; örneğin modal açılıp kapanırken ya da carousel kayarken. Spinner gibi anlam taşıyan animasyonlar ise kapatılmaz, yavaşlatılır. Derlenmiş CSS bunu doğrular: spinner'ların normal animasyon süresi 0.75s iken @media (prefers-reduced-motion: reduce) bloğunda animation-duration: 1.5s olur. Form alanlarının, switch'lerin ve floating label'ların geçişleri de aynı sorguyla transition: none alır.
Ters yönde de bir davranış var: tercihi destekleyen ve kullanıcının azaltılmış hareket istemediği (no-preference) tarayıcılarda Bootstrap scroll-behavior özelliğiyle yumuşak kaydırmayı açar; derlenmiş dosyada bu, :root için scroll-behavior: smooth kuralıdır. Kendi Sass derlemenizde bu medya sorgularının üretimini $enable-reduced-motion değişkeni yönetir ve varsayılan olarak açıktır (Sass seçenekleri). Medya sorgularının sözdizimi için CSS media query yazısına bakabilirsiniz.
Formlarda erişilebilir ad

Formlar erişilebilirlik hatalarının en sık görüldüğü yerdir. Belgelerin kuralı açık: her form kontrolünün amacını yardımcı teknolojilere aktaran uygun bir erişilebilir adı olmalı. En basit yol bir <label> öğesidir; butonlarda ise <button> içine yeterince açıklayıcı metin yazmaktır. Görünür etiket koyamadığınız durumlar için belgeler şu yolları sayar:
.visually-hiddenile gizlenmiş bir<label>,- etiket görevi görebilecek mevcut bir öğeyi
aria-labelledbyile göstermek, - bir
titleözniteliği vermek, - adı doğrudan
aria-labelile belirlemek.
Bunların hiçbiri yoksa yardımcı teknolojiler input ve textarea öğelerinde son çare olarak placeholder metnine başvurabilir. Ancak belgeler, görsel olarak gizli içeriğin, aria-label değerinin ve alan dolunca kaybolan placeholder'ın yardımcı teknoloji kullanıcılarına yarasa da görünür etiket olmamasının bazı kullanıcılar için sorun olabileceğini hatırlatır; hem erişilebilirlik hem kullanılabilirlik için en iyisi bir tür görünür etikettir. Alanın altındaki yardım metni aria-describedby ile bağlanmalı, istemci tarafı doğrulama stillerinin ise şu an erişilebilir olmadığını unutmamalısınız (form doğrulama).
<form class="row g-2 align-items-center">
<div class="col-auto">
<label for="siteArama" class="visually-hidden">Sitede ara</label>
<input type="search" class="form-control" id="siteArama" placeholder="Ara...">
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary">Ara</button>
</div>
</form>Bileşenlerde ARIA: belgelerin notları
Aşağıdaki tablo bileşen sayfalarındaki erişilebilirlik notlarını özetler. Bazılarını Bootstrap'in JavaScript kodu kendisi ekler, bazılarını sizin yazmanız gerekir; tablodaki "kim ekler" sütunu bu ayrımı gösterir.
| Bileşen | Belgelerin istediği | Kim ekler |
|---|---|---|
| Alert | role="alert" | siz |
| Spinner | role="status" ve içinde visually-hidden bir Loading metni | siz |
| Progress | progress-bar üzerinde role="progressbar", aria-valuenow, aria-valuemin, aria-valuemax | siz |
| Buton olarak a | sayfa içi işlev tetikliyorsa role="button"; devre dışıysa aria-disabled="true" ve tabindex="-1" | siz |
| Button group / toolbar | role="group" veya role="toolbar" ve aria-label | siz |
| Close button | aria-label="Close" gibi bir ad | siz |
| Collapse / accordion | tetikleyicide aria-expanded ve aria-controls; buton değilse role="button" | siz başlangıç değerini yazarsınız, eklenti aria-expanded değerini değiştirir |
| Dropdown | gerçek ARIA menüsü gerekiyorsa role ve aria öznitelikleri | siz (Bootstrap eklemez); ok tuşları ve ESC desteği eklentide |
| Modal / offcanvas | aria-labelledby ile başlığa bağlantı | siz; role="dialog" JavaScript ile eklenir |
| Nav / tabs | etkin bağlantıda aria-current; dinamik sekmelerde tablist, tab, tabpanel rolleri | siz; dinamik sekmede aria-selected eklentiden gelir |
| Breadcrumb | nav üzerinde aria-label, son öğede aria-current="page" | siz |
| Pagination | nav sarmalayıcı ve amacını anlatan aria-label | siz |
| Toast | aria-live bölgesi, aria-atomic="true", içeriğe göre role="alert" veya role="status" | siz |
Tablodaki bazı notların ayrıntısı önemli. Collapse için belgeler, tetikleyici başlangıçta kapalıysa aria-expanded="false", .show ile açık başlıyorsa "true" yazmanızı ister; sonrasında eklenti bu değeri kendisi günceller. Bootstrap'in collapse uygulaması WAI-ARIA akordeon desenindeki isteğe bağlı klavye etkileşimlerini kapsamaz. Toast için canlı bölgenin toast oluşturulmadan önce sayfada bulunması gerekir; ikisini aynı anda üretip eklerseniz genellikle duyurulmaz. Form hataları gibi süreç için önemli bilgiler toast yerine alert ile verilmelidir. Tooltip ve popover yalnızca geleneksel olarak klavyeyle odaklanabilen etkileşimli öğelere, yani bağlantılara ve form kontrollerine eklenmeli ve tek tetikleyici olarak fareyle üzerine gelme kullanılmamalıdır. Bileşen ayrıntıları accordion ve collapse, toast, tooltip ve popover ve modal yazılarında.
Dropdown notu da ayrıca açıklanmayı hak ediyor. WAI-ARIA standardı gerçek bir role="menu" bileşeni tanımlar, ama bu uygulama benzeri, eylem tetikleyen menüler içindir ve içinde yalnızca menü öğeleri bulunabilir. Bootstrap'in açılır menüleri ise içine arama alanı ya da giriş formu bile konabilecek kadar genel tasarlandığı için bu rolleri ne bekler ne de kendisi ekler. Gerçek bir ARIA menüsü kuruyorsanız gereken öznitelikleri siz yazarsınız; Bootstrap yine de öğeler arasında ok tuşlarıyla gezinmeyi ve ESC ile kapatmayı destekler.
<div class="spinner-border" role="status">
<span class="visually-hidden">Yükleniyor...</span>
</div>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Anasayfa</a></li>
<li class="breadcrumb-item active" aria-current="page">Ayarlar</li>
</ol>
</nav>
<div class="btn-group" role="group" aria-label="Metin hizalama">
<button type="button" class="btn btn-outline-secondary">Sola</button>
<button type="button" class="btn btn-outline-secondary">Ortaya</button>
</div>Sık yapılan hatalar
- visually-hidden-focusable ile visually-hidden'ı birlikte yazmak: Atlama bağlantısı odakta da gizli kalır.
- Okunması gereken metni invisible ile gizlemek: Belgelere göre
.invisibleiçeriği ekran okuyuculardan da saklar; yalnızca gözden gizlenecek metin için.visually-hiddenkullanın. - Anlamı yalnızca renkle vermek: Kırmızı ya da yeşil tek başına bilgi taşımaz; görünür veya gizli bir metin ekleyin.
- Varsayılan renklerin kontrastına güvenmek: Belgeler bazı kombinasyonların önerilen oranların altında kalabileceğini söyler; kendi renklerinizi test edin.
- Etiketsiz alan: Placeholder ad yerine geçmez; en azından gizli bir etiket ya da
aria-labelverin. - role="dialog" eklemeye çalışmak: Modal ve offcanvas için bunu Bootstrap'in JavaScript'i ekler; sizin göreviniz
aria-labelledbyyazmaktır. - Görsel sekmelere tab rolleri vermek: Belgelere göre
.nav-tabsile biçimlenmiş sıradan bir gezinme çubuğurole="tablist"almamalıdır; bu roller yalnızca dinamik sekmeli arayüzler içindir.
Sık Sorulan Sorular
Bootstrap 5 sr-only yerine ne kullanılır?
.visually-hidden. Odaklanınca görünmesi gereken öğeler için .sr-only-focusable yerine tek başına .visually-hidden-focusable kullanılır.
Bootstrap kullanan bir site otomatik olarak WCAG uyumlu mu?
Hayır. Belgelere göre erişilebilirlik büyük ölçüde sizin işaretlemenize, stillerinize ve betiklerinize bağlıdır; doğru uygulandığında WCAG 2.1 gibi standartları karşılamak mümkün olmalıdır.
Animasyonları tamamen kapatabilir miyim?
Kullanıcı azaltılmış hareket tercih ettiğinde Bootstrap geçişlerin çoğunu zaten kapatır. Kendi derlemenizde $enable-reduced-motion değişkeni bu medya sorgularının üretilip üretilmeyeceğini belirler; bileşen bazında seçenekler ilgili bileşen sayfalarında anlatılır.
Hangi araçlarla test etmeliyim?
Belgelerin erişilebilirlik sayfası ek kaynaklar arasında WCAG 2.1 metnini, The A11Y Project'i, MDN erişilebilirlik belgelerini ve Color Contrast Analyser, Microsoft Accessibility Insights, Deque Axe gibi test araçlarını listeler.
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: Bootstrap öğrenme rehberi · ARIA nedir · Form control · Form doğrulama · Sass seçenekleri · HTML öğrenme rehberi
