Focus and: active arasındaki fark nedir?


Yanıtlar:


413

:focusve :activeiki farklı eyalettir.

  • :focus öğenin girdiyi almak için seçili olduğu durumu ve
  • :active öğesi, öğenin şu anda kullanıcı tarafından etkinleştirildiği durumu gösterir.

Diyelim ki elimizde bir tane var <button>. <button>Başlamak için herhangi bir devlet olmayacaktır. Sadece var. Eğer Tab"odak" vermek için kullanırsak <button>, şimdi :focusdurumuna girer . Daha sonra tıklarsanız (veya tuşuna basarsanız space), düğmenin ( :active) durumuna girmesini sağlarsınız.

Bir öğeyi tıklayarak bu notta, üzerinde, o da o yanılsama yetiştirerek, hangi odak vermek :focusve :activeaynıdır. Aynı değiller. Tıklandığında düğme :focus:activedurumu.

Bir örnek:

<style type="text/css">
  button { font-weight: normal; color: black; }
  button:focus { color: red; }
  button:active { font-weight: bold; }
</style>
  
<button>
  When clicked, my text turns red AND bold!<br />
  But not when focused only,<br />
 where my text just turns red
</button>

düzenleme: jsfiddle


2
Ayrıca document.activeElement, IE8 bir istisna atabileceğinden, bir denek yakalamasında olması gerekmesine rağmen , kafa karıştırıcı olarak adlandırılmış özelliği kullanarak odaklanmış öğeyi alabileceğinizi unutmayın . Ve tarayıcıların eski sürümlerinin şunları yapabileceğini unutmayın: etkin ve: farklı odaklanma. function activeElement() { try { return document.activeElement; /* can get exeption in IE8 */ } catch(e) { } }
robocat

6
Burada örneğinize ait bir JSFiddle oluşturdum: jsfiddle.net/NCwvj Kromda test (v24) Düğmeye tıklamanın yalnızca :activedevleti çağırdığını fark ettim
Zaki Aziz

3
Nit: odak sırası ve etkin: yoksa: HTML düğmesinin durumunu etkiler: etkin: odak durumu - Koyma: sonra etkin durum: odak, sekme ve isabet alanına bastığımda etkin değişiklikleri alıyorum. Eğer: odak sonsa asla aktif durumu göremiyorum.
Matt Gaunt

@GauntFace, Hangi tarayıcıyı kullanıyorsunuz? Chrome'da sizin focusve activebeyanınızın sırası önemli değildir. Sadece birbirleriyle çeliştiklerinde önemlidir örneğin ( color:redve color:bluesonuncusu kazanır).
Pacerier

İlgili soru ve cevap, buna dayanmaktadır: stackoverflow.com/a/48597351/5587480 . Benim açımdan, anlaşılması çok kolay
john cj

59
:active       Adds a style to an element that is activated
:focus        Adds a style to an element that has keyboard input focus
:hover        Adds a style to an element when you mouse over it
:lang         Adds a style to an element with a specific lang attribute
:link         Adds a style to an unvisited link
:visited      Adds a style to a visited link

Kaynak: CSS Sözde sınıfları


10
İlgili olsa da, bu soruya cevap vermiyor
Gregor Weber

6
@GregorWeber tanımları göstererek farkı ortaya koyuyor
Kamil Kiełczewski

1
Muhtemelen bunu biliyorsunuzdur, ancak bunları bu sırayla tanımlarsanız visited, "ziyaretleri" diğer sahte sınıfları geçersiz kılacağından, fareyle üzerine gelindiğinde veya tıklandığında bağlantılar değişmez. LVHFA çoğu insanın çoğu durumda kullanmak isteyeceği emirdir. Neden dahil ettiğinizden emin değilim lang...
Mentalist

22

Dört vaka var.

  1. Varsayılan olarak, hem etkin hem de odak kapalıdır.
  2. Odaklanabilir öğeler arasında geçiş yapmak için sekme yaptığınızda , bunlar girilir (etkin olmadan).:focus
  3. Ne zaman tıklayın bir üzerinde olmayan odaklanabilir eleman , girdiği :active(odak olmadan).
  4. Ne zaman tıklayın bir üzerinde odaklanabilir elemanı girdiği :active:focus(aktif ve eş zamanlı olarak odak).

Misal:

<div>
  I cannot be focused.
</div>

<div tabindex="0">
  I am focusable.
</div>

div:focus {
  background: green;
}

div:active {
  color: orange;
}

div:focus:active {
  font-weight: bold;
}

Sayfa yüklendiğinde her ikisi de 1. durumdadır. Sekme tuşuna bastığınızda ikinci bölmeyi odaklayacak ve durum 2'yi sergileyeceksiniz. İlk div'i tıkladığınızda 3. vakayı görüyorsunuz. İkinci div'ı tıkladığınızda 4. vakayı görüyorsunuz .


Bir öğenin odaklanabilir olup olmadığı başka bir sorudur . Çoğu varsayılan olarak değildir. Ama, varsaymak güvenlidir <a>, <input>, <textarea>varsayılan olarak odaklanabilir.


Elemanların nasıl olabileceğini, :activeancak nasıl olabileceğini gösterdiğin için teşekkürler :focus. Bu, diğer cevapların ele almadığı konusunda kafam karıştı.
B-Stewart

6

: odak, bir elemanın girişi kabul edebildiği durumdur - giriş kutusundaki imleç veya sekmeli bir bağlantı.

: active öğesi, bir öğenin kullanıcı tarafından etkinleştirildiği zamandır - kullanıcının fare düğmesine basması ve serbest bırakması arasındaki süredir.


2
Selam! "Şu anda tıklanan" için bir durum var mı? Gezinme menüsünde üç bağlantı olduğunu varsayalım, bağlantıyı "açık" durumdayken belirli bir rengi nasıl koruyabilirsiniz? kullanıcıya şu anda nerede olduğunu göstermek için. as: active yalnızca bağlantı (bu örnekte) tıklatıldığı sürece çalışır, ancak fare düğmesi bırakıldığında tekrar değişir.
Kizer Yakuza

0

Aktif kullanıcı o noktayı etkinleştirdiğinde (fare tıklaması gibi, alandan alana sekme kullanırsak, aktif stilde herhangi bir işaret yoktur. Belki daha fazla zamana ihtiyaç duyarsanız, sadece o noktaya tıklamayı deneyin) nokta aktive edilir. Bunu dene :

<style type="text/css">
  input { font-weight: normal; color: black; }
  input:focus { color: green; outline: 1px solid green; }
  input:active { color: red; outline: 1px solid red; }
</style>

<input type="text"/>
<input type="text"/>

-3

Odak yalnızca klavye girişi ile verilebilir, ancak bir Öğe hem fare hem de klavye tarafından etkinleştirilebilir.

Kullanılacaksa: bir bağlantıya odaklanılırsa, stil kuralı yalnızca klavyede bir bottona basıldığında uygulanır.


1
:focusböyle çalışmaz. Şu anda yazdığım metin alanı bir düğmeye tıkladığım için odakta. Ayrıca, odak noktasını tıklatarak ve tekrar içine alarak kaybedebilir ve geri yükleyebilir. Sadece bir saniye içinde, sağdaki Yorum Ekle düğmesine tıklayarak odaklanacağım. Tüm bunlar klavye girişi olmadan odaklanmaya neden olur.
Joel Mellon

Bir bağlantıya odaklanamıyorsanız, bunun nedeni, bir bağlantıyı bağlantıya koymadıkça veya bir tabindex özniteliği eklemediğiniz sürece odaklanamamasıdır. Ancak div veya giriş gibi DOM öğelerine odaklanabilirsiniz.
Alex

-5

"Odaklama" kullanıldığında klavye kullanıcılarına, fare kullanıcılarının fareyle üzerine geldiklerinde aldıkları etki aynı olur. Internet Explorer'da aynı etkiyi elde etmek için "etkin" gerekir.

Gerçek şu ki, bu durumlar tüm kullanıcılar için olması gerektiği gibi çalışmıyor. Üç seçicinin tümünü kullanmamak, fiziksel olarak fare kullanamayan birçok klavye kullanıcısı için erişilebilirlik sorunları oluşturur. Sizi #nomouse yarışmasına davet ediyorum (nomouse dot org).


1
: vurgulu ve: odak aynı şey değildir. : vurgulu belirli bir durumdur ve: odak belirli bir durumdur. Onları eşitlemek biraz kafa karıştırıcı ve yanıltıcı.
Garry Polley

1
Uzmanlığınızdan şüphe etmiyorum. Ben işaret etmeye çalışıyorum: hover ve: active aynı şey değildir. Web'e yeni başlayanlar ve erişilebilirlik şu şekilde basitleştirildiğinde kafa karıştırıcı: hover yaklaşık olarak eşittir: klavye kullanımı için aktiftir. Cevabı takdir ediyorum, ama belki biraz daha derinlik yardımcı olur?
Garry Polley

Tabii ki aynı şey değiller! Yaklaşık olarak aynı olduklarını söylemedim. (Lütfen gönderilerimi tekrar okuyun.) Aynı görevi gerçekleştirmek için fare kullanma ile klavye kullanma arasındaki farktan bahsediyorum. Her iki kullanıcıya da aynı deneyimi sunmak için hepsini kullanmanız gerektiğini söylüyorum. Aksi takdirde, klavye yalnızca fiziksel olarak fare kullanamayan kullanıcılar bir sayfada nerede sekme yaptıklarını görmekte zorluk çekerler. Bu, sayfada gezinirken bu kişiler için bir erişilebilirlik sorunu oluşturur.
AMG
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.