The CSS Podcast - 018: Focus
Web sayfanızda, kullanıcıyı web sitesinin ana içeriğine yönlendiren bir bağlantıyı tıklarsınız. Bunlara genellikle atlama bağlantıları veya ana sayfa bağlantıları denir. Bu bağlantı, sekme ve enter tuşları kullanılarak klavyeyle etkinleştirildiğinde ana içerik kapsayıcının etrafında bir odak halkası görünür. Bunun nedeni nedir?
Bunun nedeni, <main> öğesinin tabindex="-1" özellik değerine sahip olmasıdır. Bu da programatik olarak odaklanabileceği anlamına gelir.
Tarayıcı URL çubuğundaki #main-content, id ile eşleştiği için <main> hedeflendiğinde programlı odaklanma alır.
Bu gibi durumlarda odak stillerini kaldırmak cazip olsa da odağı uygun şekilde ve dikkatli bir şekilde ele almak, iyi ve erişilebilir bir kullanıcı deneyimi oluşturmanıza yardımcı olur.
Ayrıca, etkileşimlere ilgi çekici bir şeyler eklemek için de mükemmel bir yer olabilir.
Odak neden önemlidir?
Web geliştiricisi olarak, web sitelerini herkes için erişilebilir ve kapsayıcı hale getirmek sizin görevinizdir. CSS ile erişilebilir odak durumları oluşturmak bu sorumluluğun bir parçasıdır.
Odak stilleri, klavye veya anahtar kontrol gibi bir cihaz kullanan kullanıcıların web sitesinde gezinmesine ve web sitesiyle etkileşim kurmasına yardımcı olur. Bir öğe odaklanırsa ve görsel bir gösterge yoksa kullanıcı, odakta olan öğeyi kaybedebilir. Bu durum, yanlış bağlantının takip edilmesi gibi durumlarda gezinme sorunlarına ve istenmeyen davranışlara neden olabilir.
Öğelerin nasıl odaklanacağı
Belirli öğeler otomatik olarak odaklanılabilir. Bunlar, <a>, <button>, <input> ve <select> gibi etkileşimi ve girişi kabul eden öğelerdir.
Kısacası tüm form öğeleri, düğmeler ve bağlantılar.
Genellikle bir web sitesinin odaklanılabilir öğelerinde gezinmek için sayfada ileri gitmek üzere sekme tuşunu, geri gitmek için üst karakter + sekme tuşlarını kullanabilirsiniz.
Ayrıca, kullanıcı Tab tuşuna her bastığında veya odak, URL'de bir karma oluşturma değişikliğiyle ya da JavaScript etkinliğiyle değiştiğinde sekme dizini (öğelerin odaklanacağı sıra) özelliğini değiştirmenize olanak tanıyan tabindex adlı bir HTML özelliği de vardır.
Bir HTML öğesindeki tabindex 0 olarak ayarlanmışsa sekme tuşu aracılığıyla odak alabilir ve doküman kaynak sırasına göre tanımlanan genel sekme dizini dikkate alınır.
tabindex özelliğini -1 olarak ayarlarsanız yalnızca programatik olarak odaklanabilir. Yani yalnızca bir JavaScript etkinliği gerçekleştiğinde veya karma değeri değişikliği (öğenin URL'sindeki id ile eşleşen) gerçekleştiğinde odaklanabilir.
tabindex değerini 0'ten yüksek bir değere ayarlarsanız doküman kaynak sırasına göre tanımlanan küresel sekme dizininden kaldırılır.
Sekme sırası artık tabindex değerine göre tanımlanacak. Böylece, örneğin tabindex="1" içeren bir öğe, tabindex="2" içeren bir öğeden önce odağa alınacaktır.
Stil odak noktası
Bir öğe odağı aldığında varsayılan tarayıcı davranışı, bir odak halkası göstermek olur. Bu odak halkası, tarayıcı ve işletim sistemlerine göre değişiklik gösterir.
Bu davranış, sahte sınıflar dersinde bahsedilen :focus, :focus-within ve :focus-visible sahte sınıfları kullanarak CSS ile değiştirilebilir.
Bir öğenin varsayılan stiliyle kontrast oluşturan bir odaklanma stili belirlemek önemlidir.
Örneğin, yaygın bir yaklaşım outline mülkünü kullanmaktır.
a:focus {
outline: 2px solid slateblue;
}
outline mülkü, bir bağlantının metnine çok yakın görünebilir ancak öğenin doldurduğu geometrik boyutu etkilemeden ek görsel padding eklediği için outline-offset mülkü bu konuda yardımcı olabilir.
outline-offset için pozitif bir sayı değeri, dış çizgiyi dışa doğru iter. Negatif bir değer ise dış çizgiyi içe doğru çeker.
Şu anda bazı tarayıcılarda, öğeniz için border-radius ayarladıysanız ve outline kullanırsanız bu eşleşmez. Bu durumda dış çizginin köşeleri keskin olur.
Bu nedenle, box-shadow border-radius'u dikkate alarak şekle kırptığı için küçük bir bulanıklık yarıçapına sahip bir box-shadow kullanmak caziptir ancak bu stil Windows Yüksek Kontrast Modu'nda gösterilmez.
Bunun nedeni, Windows Yüksek Kontrast Modu'nun gölge uygulamaması ve kullanıcının tercih ettiği ayarları tercih etmek için genellikle arka plan resimlerini yoksamasıdır.
Özet olarak
Bir öğenin varsayılan durumuyla kontrast oluşturan bir odak durumu oluşturmak son derece önemlidir. Varsayılan tarayıcı stilleri bunu sizin için zaten yapar ancak bu davranışı değiştirmek isterseniz aşağıdakileri unutmayın:
- Klavye odağını alabilen bir öğede
outline: nonekullanmaktan kaçının. outlinestillerinibox-shadowile değiştirmekten kaçının. Windows Yüksek Kontrast Modu'nda gösterilmez.- HTML öğesinde
tabindexiçin yalnızca kesinlikle gerekli olduğunda pozitif bir değer ayarlayın. - Odak durumunun varsayılan duruma kıyasla çok net olduğundan emin olun.
Öğrendiklerinizi test etme
Odaklanma hakkındaki bilginizi test edin
Aşağıdakilerden hangisi otomatik olarak odaklanılabilir öğelerdir?
<a><p><button><input><output><select>Aşağıdaki giriş cihazlarından hangisi odağı ayarlayabilir?