nav ile bir gezinme çubuğu
Menünü <nav> ile sar ve linkleri bir listeye koy. Flexbox listeyi yatay bir çubuğa çevirir:
list-style: none ve padding: 0 madde işaretlerini ve girintiyi kaldırır. Her linkteki display: block, padding'inin çubukta gerçek yer kaplamasını sağlar, böylece padding'li kutunun tamamı tıklama hedefi olur. display: flex satırını sil, aynı menü dikey bir listeye dönüşür; bir kenar çubuğu menüsü de böyle görünür.
<nav> kendisi hiçbir şeye benzemez. Görevi anlamdır: ekran okuyucular onu bir navigation landmark'ı olarak sunar, böylece kullanıcı tek bir tuşla menüye ya da onun ötesine atlayabilir.
Geçerli sayfayı işaretle
Gösterilen sayfanın linkine aria-current="page" ekle. Ekran okuyuculara "buradasın" der ve CSS'e linki vurgulamak için bir tutamak verir:
aria-current="page" değerini başka bir linke taşı, vurgu onu takip eder. Bir .active class'ı yerine özelliğe stil vermek görünümü ve erişilebilirliği senkronize tutar: biri olmadan diğerine sahip olamazsın.
Bir sayfada birkaç nav: label'lar ve breadcrumb
Bir sayfanın her biri kendi <nav> elementinde bir ana menüsü, bir breadcrumb'ı ve bir içindekiler tablosu olabilir. Her birine bir aria-label ver, böylece bir ekran okuyucu üç aynı "navigation" girişi yerine "Breadcrumb navigation" duyurur:
Breadcrumb'lar sıra önemli olduğu için sıralı bir <ol> listesi kullanır. Eğik çizgiler CSS ::before ile gelir, bu yüzden ekran okuyucular her öğenin arasında "slash" okumaz. Son öğe geçerli sayfadır ve link değildir.
Bir içindekiler tablosu
Aynı sayfanın bölümlerine giden linklerden oluşan bir liste de gezinmedir. #id linkleri o id'ye sahip elemente atlar; önizlemede dene:
Burada label, aria-labelledby ile görünür bir başlıktan gelir; başlık zaten ekrandayken bu, aria-label kullanmaktan daha iyidir.
Mobil menü açma kapama butonu
Dar ekranlarda menüler genellikle bir butonun arkasına gizlenir. aria-expanded olan gerçek bir <button> kullan ve linkleri <nav> içinde tut:
aria-expanded bir ekran okuyucuya menünün açık olup olmadığını söyler, hidden özelliği de liste kapalıyken onu hem ekrandan hem de erişilebilirlik ağacından kaldırır. Geniş ekranlarda listeyi bir media query ile gösterir ve butonu gizlersin.
Sık yapılan hatalar
- Her link grubunu
<nav>ile sarmak. Onu ana menü, breadcrumb, sayfalama ve içindekiler tabloları için kullan. Metin içindeki linkler gezinme blokları değildir. - Bir
<div>ile yapılmış menü butonu. Klavyeyle odaklanamaz ya da basılamaz.<button>kullan. - Label'sız birkaç nav. Birbirinden ayırt edilebilsinler diye her birine
aria-labelya daaria-labelledbyekle. - Geçerli linki yalnızca renklendirmek.
aria-current="page"ekle; renk tek başına duyurulmaz ve herkes tarafından görülemeyebilir. - Yayındaki sitede
href="#"olan linkler. Bir demoda sorun değildir, ama gerçek menü öğelerinin yeni sekmede açıldıklarında da çalışmaları için gerçek URL'lere ihtiyacı vardır.hrefdeğerlerinin nasıl çalıştığını link verme sayfası anlatıyor.
Sıkça Sorulan Sorular
HTML'de nav etiketi nedir?
<nav>, site menüsü, içindekiler tablosu ya da breadcrumb gibi başlıca gezinme linklerinden oluşan bir bloğu saran semantik bir elementtir. Ekran okuyucular onu bir navigation landmark'ı olarak listeler, böylece kullanıcılar doğrudan ona atlayabilir.
nav içindeki linkler bir listede mi olmalı?
Yaygın ve iyi bir kalıptır: <li> öğelerinden oluşan bir <ul>, ekran okuyucuların menüde kaç link olduğunu duyurmasını sağlar. Doğrudan <nav> içindeki düz linkler de geçerlidir, örneğin yan yana iki ya da üç link için.
Her link grubu için bir nav elementi gerekir mi?
Hayır. <nav> elementini yalnızca başlıca gezinme blokları için kullan. Bir paragraftaki birkaç link ya da footer'daki kısa bir yasal linkler listesi buna ihtiyaç duymaz; çok fazla nav landmark'ı da her birini bulmayı zorlaştırır.
Yatay bir gezinme çubuğu nasıl yapılır?
Linkleri <nav> içindeki bir <ul> içine koy, sonra listeye display: flex; list-style: none; padding: 0; ve bir gap ver. Flexbox öğeleri yan yana dizer.
Bir navbar'da geçerli sayfa nasıl gösterilir?
Kullanıcının bulunduğu sayfanın linkine aria-current="page" ekle ve ona [aria-current="page"] seçicisiyle stil ver. Ekran okuyucular da onu böylece geçerli sayfa olarak duyurur.
Bir sayfada birden fazla nav olabilir mi?
Evet, örneğin bir ana menü, bir breadcrumb ve bir içindekiler tablosu. Ekran okuyucu kullananlar onları ayırt edebilsin diye her birine "Main" ya da "Breadcrumb" gibi farklı bir aria-label ver.