:focus-visible
Pseudo-klase (također poznat kao „Fokus-naznačeno” pseudo-klase) je rodom CSS način da stilskih elemenata da:
- U fokusu su
- Treba vam vidljivi indikator za pokazivanje fokusa (više o tome kasnije)
:focus-visible
koristi se slično kao :focus
: za skretanje pozornosti na element koji trenutno ima fokus.
.element:focus-visible ( background-color: pink; /* Something to get the user's attention */ )
:focus-visible
dio je radnog nacrta CSS4 Selectors. Prije usvajanja, Mozilla je uvela :-moz-focusring
pseudo-klasu kako bi Firefoxu donio funkcionalnost prije formalne specifikacije.
Zašto trebamo: fokus vidljiv?
To već ne :focus
čini? Da, ali problema ima. Najjasnija ilustracija je gumb koji pokreće neki JavaScript. Zamislite vrtuljak slike s gumbima za prebacivanje između slika. Pretpostavimo da ste tabindex
gumbe dodali kako bi ih mogli odabrati tipkovnicom, ali kad mišem krenete testirati vrtuljak, oko vašeg prekrasnog gumba vidite ovaj obris:
![](5683416/_focus-visible_css-tricks_2.png.webp)
:focus
Nije da biste to željeli učiniti (zbog nedostupnosti), ali kako se toga riješiti? Postavljanjem :focus
pseudo-klase:
.next-image-button:focus ( outline: none; )
Sada vaš gumb izgleda sjajno kad je u fokusu, ali što se događa kada korisnik klikne na vaš gumb bez miša, već umjesto tipkovnice? Ne mogu vidjeti gdje su stavili karticu! To je problem jer sada ne postoji način na koji se može utvrditi koji je gumb usmjeren za radnje na tipkovnici:
![](5683416/_focus-visible_css-tricks_3.png.webp)
Postoji li način za uklanjanje plavog obrisa fokusa, ali i dalje pokazivanje fokusa koji je više u skladu s dizajnom web stranice? Svakako, možete uzeti svoj kolač i pojesti ga, zahvaljujući :focus-visible
!
:focus-visible
primjenjuje se samo kada zapravo želite vizualni indikator koji pomaže korisniku da vidi gdje je fokus. Drugim riječima, ne može sakriti obris kao što to :focus
može. (Pa, moglo bi tako što bi se uklopio u dizajn, ali svejedno.) U tom se smislu njih dvoje moraju koristiti zajedno. Dodajmo jedan na naš gumb:
.next-image-button:focus ( outline: none; ) .next-image-button:focus-visible ( outline: 3px solid blanchedalmond; /* That'll show 'em */ )
Sada, kada se tipkovnica koristi za prebacivanje na gumb, bit će vizualna indikacija fokusa:
![](5683416/_focus-visible_css-tricks_4.png.webp)
:focus-visible
čini fokus vidljivim!
Kako preglednici određuju kada je nešto vidljivo: fokus?
Preglednici dobivaju malo slobodnog prostora da odrede kada ovaj pseudo-selektor treba primijeniti na zadani element pomoću njihove vlastite heuristike. Prvo, pogledajmo radni nacrt CSS4, a zatim ćemo ga pokušati razbiti. Iz specifikacija:
- Ako je korisnik izrazio sklonost (na primjer putem sistemskih postavki ili postavki preglednika) da uvijek vidi vidljivi indikator fokusa, korisnički agent to bi trebao poštovati tako da: fokus-vidljivi uvijek odgovara aktivnom elementu, bez obzira na bilo koji drugi čimbenici. (Druga mogućnost može biti da korisnički agent prikaže vlastiti pokazatelj fokusa bez obzira na stilove autora.)
- Bilo koji element koji podržava unos s tipkovnice (poput ulaznog elementa ili bilo kojeg drugog elementa koji može pokrenuti da se virtualna tipkovnica prikaže u fokusu ako nije prisutna fizička tipkovnica) uvijek bi se trebao podudarati: fokus je vidljiv kada se fokusira.
- Ako korisnik komunicira sa stranicom putem tipkovnice, trenutno fokusirani element trebao bi se podudarati: focus-visible (tj. Upotreba tipkovnice može promijeniti mijenja li se ova pseudo-klasa čak i ako to ne utječe na: focus).
- Ako korisnik komunicira sa stranicom putem pokazivačkog uređaja, tako da se fokus premjesti na novi element koji ne podržava unos korisnika, novofokusirani element ne bi se trebao podudarati: fokus-vidljiv.
- Ako se aktivni element podudara: focus-visible, a skripta uzrokuje pomicanje fokusa negdje drugdje, novofokusirani element trebao bi se podudarati: focus-visible.
- Suprotno tome, ako se aktivni element ne podudara: focus-visible, a skripta uzrokuje pomicanje fokusa negdje drugdje, novofokusirani element ne bi se trebao podudarati: focus-visible.
Ako je to malo apstraktno, evo tumačenja:
Situacija | Primjenjuje li se: fokus-vidljivo? |
---|---|
Korisnik kaže da uvijek želi da fokus bude vidljiv putem postavke | Da |
Za funkcioniranje elementa potrebna je tipkovnica (poput teksta) | Da |
Korisnik se kreće pomoću tipkovnice | Da |
Korisnik se kreće pokazivačkim uređajem (poput miša ili prsta na dodirnom zaslonu) | Ne |
Skripta uzrokuje pomicanje fokusa s :focus-visible elementa na drugi element | Da |
Skripta uzrokuje pomicanje fokusa s neelementa :focus-visible na drugi element | Ne |
To ponavlja: Ovo su smjernice i preglednici će moći sami odlučiti o tome što je odabrano :focus-visible
. Možemo očekivati da će se očiti slučaj navigacije na tipkovnici rješavati na predvidljiv način, ali preglednici imaju mogućnost sami odrediti, kao i bilo koja druga značajka.
Podrška preglednika
Podaci o podršci preglednika potječu iz tvrtke Caniuse, koja sadrži više detalja. Broj označava da preglednik podržava značajku u toj verziji i novijoj.
Radna površina
Krom | Firefox | IE | Rub | Safari |
---|---|---|---|---|
86 | 4 * | Ne | 86 | Ne |
Mobitel / tablet
Android Chrome | Android Firefox | Android | iOS Safari |
---|---|---|---|
88 | 85 | 81 | Ne |
Dodatne informacije
- CSS Selektori 4 Specifikacija
- Ulaznica za Bugzilla # 1445482
- WebKit ulaznica # 185859
- Objašnjenje
:focus-visible
WICG polifil - Patrick H. Lauke opis i uporaba
:focus-visible
- Fokusiranje na države fokusa
Povezani selektori
Almanah 15. veljače 2021:usredotočenost
textarea:focus ( background: pink; )
: fokus-vidljivi fokus ![](5683416/_focus-visible_css-tricks.jpg.webp)
![](5683416/_focus-visible_css-tricks_2.jpg.webp)
![](5683416/_focus-visible_css-tricks_2.jpg.webp)