Stil odağı

Odak göstergesi (genellikle "odak halkası" ile belirtilir), o anda bir öğedir. Fare kullanamayan kullanıcılar için bu gösterge son derece önemlidir, çünkü onların fare işaretçisini kullanın.

Tarayıcının varsayılan odak göstergesi tasarımınızla çakışıyorsa yeniden biçimlendirilmesini sağlayın. Klavye kullanıcılarınızı da göz önünde bulundurmayı unutmayın.

Odak göstergesinin her zaman gösterilmesi için :focus kullanın

:focus Sözde sınıf, girişten bağımsız olarak bir öğe üzerine odaklanıldığında uygulanır cihaz (fare, klavye, ekran kalemi vb.) veya odaklamak için kullanılan yöntem. Örneğin, aşağıdaki <div>, odaklanılabilir hale getiren bir tabindex içeriyor. Ayrıca :focus durumu için özel stil:

div[tabindex="0"]:focus {
  outline: 4px dashed orange;
}

Üzerine tıklama için fare veya klavye ile tıklama yapmanızdan bağımsız olarak, <div> her zaman aynı görünür.

Maalesef tarayıcılar, odağı uygulama şekliyle tutarlı olmayabilir. Ya da odaklanma durumu, tarayıcıya ve işletim sistemine bağlı olabilir. bahsedeceğim.

Örneğin, aşağıdaki <button>, :focus için özel bir stile de sahiptir durumu.

button:focus {
  outline: 4px dashed orange;
}

macOS'teki Chrome'da fareyle <button> simgesini tıklarsanız özel odak stili. Ancak, macOS'teki Safari'de <button> simgesini tıklayın. Bunun nedeni, Safari'de, öğeye tıkladığınızda odak algılanmıyor.

Odaklanma davranışı tutarsız olduğundan biraz test gerektirebilir. dikkat edin.

Odak göstergesini seçmeli olarak göstermek için :focus-visible tuşunu kullanın

Yeni :focus-visible sözde sınıf, bir öğeye odaklanıldığında ve tarayıcı, bir odak göstergesi görüntülemenin bu soruna ilişkin kullanıcı için faydalı olabilir. Özellikle, kullanıcı etkileşiminin klavyeden yapıldığını ve tuşa basıldığında bir meta, ALT / OPTION, veya CONTROL tuşu, ardından :focus-visible eşleşir.

Aşağıdaki örnekte yer alan düğme, seçmeli olarak bir odak göstergesi gösterir. Eğer fareyle üzerine gelmeyi tercih ederseniz, sonuçlar ilk klavyeyi kullanabilirsiniz.

button:focus-visible {
  outline: 4px dashed orange;
}

Odaklanılan bir öğenin üst öğesinin stilini belirlemek için :focus-within kullanma

İlgili içeriği oluşturmak için kullanılan :focus-within sözde sınıf, bir öğeye, bir öğenin kendisi bir öğe aldığında uygulanır odaklanılmasını sağlayabilirsiniz.

Sayfanın bir bölgesini vurgulamak için kullanılabilir. o alana ilgi gösterebilir. Örneğin, aşağıdaki form hem formun kendisi seçildiğinde ve ayrıca formdaki radyo düğmelerinden biri seçili.

form:focus-within {
  background: #ffecb3;
}

Odak göstergesi ne zaman görüntülenir?

Kendinize şu soruyu sormak iyi bir genel kuraldır: "Projenizi sürerken bu kontrolü tıkladıysanız bir klavye görüntülemesini bekler miydiniz?"

Yanıt "evet" ise kontrol düğmesinde büyük olasılıkla her zaman göstergesine (odaklanmak için kullanılan giriş cihazından bağımsız olarak) bakmalısınız. Buna iyi bir örnek <input type="text"> öğesi. Kullanıcının girdiyi öğesi (giriş öğesinin orijinal olarak nasıl alındığından bağımsız olarak) bu nedenle her zaman bir odak göstergesi görüntülemek yararlı olur.

Yanıtınız “hayır” ise kontrol düğmesi, belirli bir alanın yerine göstergesidir. <button> öğesi iyi bir örnektir. Kullanıcı, düğmeyi tıklayarak bir fare veya dokunmatik ekran varsa, işlem tamamlanmıştır ve odak göstergesi gerekir. Bununla birlikte, kullanıcı klavyeyle geziniyorsa klavyeyi kullanmak faydalıdır. kullanıcının uygulamayı kullanmak isteyip istemediğine karar verebilmesi için bir odak göstergesi ENTER veya SPACE tuşlarını kullanarak denetimi tıklayın.

outline: none kullanmaktan kaçının

Tarayıcıların bir odak göstergesinin ne zaman çizileceğine kafa karıştırıcı olabilir. Bir <button> öğesinin görünümünü CSS ile değiştirme veya bir tabindex öğesi, tarayıcının varsayılan odaklama halkası davranışının harekete geçin.

Çok yaygın karşılaşılan bir karşıt kalıp, aşağıdakiler gibi CSS kullanarak odak göstergesini kaldırmaktır:

/* Don't do this!!! */
:focus {
  outline: none;
}

Bu sorunu çözmek için daha iyi bir yöntem olarak :focus ve :focus-visible çoklu dolgusu. Aşağıdaki ilk kod bloğunda bu altındaki örnek uygulama, çoklu dolgu çalışır ve altındaki örnek uygulama, bir düğmedeki odak göstergesini değiştirmek için çoklu dolguyu kullanın.

/*
  This will hide the focus indicator if the element receives focus via the
  mouse, but it will still show up on keyboard focus.
*/
.js-focus-visible :focus:not(.focus-visible) {
  outline: none;
}

/*
  Optionally: Define a strong focus indicator for keyboard focus.
  If you choose to skip this step, then the browser's default focus
  indicator will be displayed instead.
*/
.js-focus-visible .focus-visible {
  
}