Lietuvių

Atraskite prieinamas ir patogias kortelių sąsajas. Išmokite geriausių klaviatūros navigacijos, ARIA vaidmenų ir patikimo fokuso valdymo praktikų pasaulinei auditorijai.

Kortelių sąsajų įvaldymas: išsami klaviatūros navigacijos ir fokuso valdymo analizė

Kortelėmis pagrįstos sąsajos yra šiuolaikinio interneto dizaino pagrindas. Nuo produktų puslapių ir vartotojų prietaisų skydelių iki sudėtingų interneto programų jos suteikia elegantišką sprendimą turiniui organizuoti ir vartotojo sąsajai supaprastinti. Nors iš pirmo žvilgsnio jos gali atrodyti paprastos, norint sukurti tikrai veiksmingą ir prieinamą kortelių komponentą, reikia gerai išmanyti navigaciją klaviatūra ir kruopštų fokuso valdymą. Prastai įdiegta kortelių sąsaja gali tapti neįveikiama kliūtimi vartotojams, kurie naudojasi klaviatūra ar pagalbinėmis technologijomis, ir veiksmingai užkirsti jiems kelią prie jūsų turinio.

Šis išsamus vadovas skirtas interneto kūrėjams, UI/UX dizaineriams ir prieinamumo šalininkams, kurie nori žengti toliau nei pagrindai. Išnagrinėsime tarptautiniu mastu pripažintus klaviatūros sąveikos modelius, esminį ARIA (Prieinamų raiškiojo interneto programų) vaidmenį teikiant semantinį kontekstą ir subtilias fokuso valdymo technikas, kurios sukuria sklandžią ir intuityvią vartotojo patirtį visiems, nepriklausomai nuo jų buvimo vietos ar sąveikos su internetu būdo.

Kortelių sąsajos anatomija: pagrindiniai komponentai

Prieš gilinantis į mechaniką, būtina nustatyti bendrą terminiją, pagrįstą WAI-ARIA kūrimo praktikomis. Standartinį kortelių komponentą sudaro trys pagrindiniai elementai:

Šios struktūros supratimas yra pirmas žingsnis kuriant komponentą, kuris yra ne tik vizualiai vientisas, bet ir semantiškai suprantamas pagalbinėms technologijoms, tokioms kaip ekrano skaitytuvai.

Nepriekaištingos navigacijos klaviatūra principai

Regiančiam pelės vartotojui sąveika su kortelėmis yra paprasta: spustelite kortelę, kurią norite matyti. Vartotojams, naudojantiems tik klaviatūrą, patirtis turi būti tokia pat intuityvi. WAI-ARIA kūrimo praktikos pateikia tvirtą, standartizuotą klaviatūros sąveikos modelį, kurio tikisi pagalbinių technologijų vartotojai.

Naršymas kortelių sąraše (`role="tablist"`)

Pagrindinė sąveika vyksta kortelių sąraše. Tikslas – leisti vartotojams efektyviai naršyti ir pasirinkti korteles, nereikalaujant pereiti per kiekvieną interaktyvų elementą puslapyje.

Aktyvavimo modeliai: automatinis ir rankinis

Kai vartotojas naršo tarp kortelių naudodamas rodyklių klavišus, kada turėtų būti rodomas atitinkamas skydelis? Yra du standartiniai modeliai:

Aktyvavimo modelio pasirinkimas turėtų būti pagrįstas jūsų sąsajos turiniu ir kontekstu. Kad ir kurį pasirinktumėte, būkite nuoseklūs visoje savo programoje.

Fokuso valdymo įvaldymas: nepastebimas patogumo herojus

Efektyvus fokuso valdymas yra tai, kas skiria griozdišką sąsają nuo sklandžios. Tai reiškia programinį vartotojo fokuso valdymą, užtikrinantį logišką ir nuspėjamą kelią per komponentą.

Klajojančio `tabindex` technika

Klajojantis `tabindex` yra klaviatūros navigacijos pagrindas komponentuose, tokiuose kaip kortelių sąrašai. Tikslas – kad visas valdiklis veiktų kaip viena `Tab` stotelė.

Štai kaip tai veikia:

  1. Šiuo metu aktyviam kortelės elementui suteikiamas `tabindex="0"`. Tai padaro jį natūralios `Tab` sekos dalimi ir leidžia jam gauti fokusą, kai vartotojas patenka į komponentą.
  2. Visiems kitiems neaktyviems kortelių elementams suteikiamas `tabindex="-1"`. Tai pašalina juos iš natūralios `Tab` sekos, todėl vartotojui nereikia spausti `Tab` per kiekvieną iš jų. Juos vis dar galima fokusuoti programiškai, ką mes ir darome naviguodami rodyklių klavišais.

Kai vartotojas paspaudžia rodyklės klavišą, norėdamas pereiti nuo kortelės A prie kortelės B:

Ši technika užtikrina, kad nesvarbu, kiek kortelių yra sąraše, komponentas visada užima tik vieną poziciją bendroje puslapio `Tab` sekoje.

Fokusas kortelių skydeliuose

Kai kortelė yra aktyvi, kur toliau keliauja fokusas? Tikimasi, kad paspaudus `Tab` ant aktyvaus kortelės elemento, fokusas pereis į pirmąjį fokusuojamą elementą *viduje* atitinkamo kortelės skydelio. Jei kortelės skydelyje nėra fokusuojamų elementų, paspaudus `Tab` fokusas turėtų pereiti į kitą fokusuojamą elementą puslapyje *po* kortelių sąrašo.

Panašiai, kai vartotojas yra susifokusavęs ant paskutinio fokusuojamo elemento kortelės skydelyje, paspaudus `Tab` fokusas turėtų išeiti iš skydelio į kitą fokusuojamą elementą puslapyje. Paspaudus `Shift + Tab` ant pirmojo fokusuojamo elemento skydelyje, fokusas turėtų grįžti į aktyvų kortelės elementą.

Venkite fokuso spąstų: Kortelių sąsaja nėra modalinis langas. Vartotojai visada turėtų galėti naršyti į kortelių komponentą ir jo skydelius bei iš jų naudodami `Tab` klavišą. Neįkalinkite fokuso komponente, nes tai gali klaidinti ir varginti.

ARIA vaidmuo: semantikos perdavimas pagalbinėms technologijoms

Be ARIA, kortelių sąsaja, sukurta su `

` elementais, ekrano skaitytuvui yra tik bendrinių konteinerių rinkinys. ARIA suteikia esminę semantinę informaciją, kuri leidžia pagalbinėms technologijoms suprasti komponento paskirtį ir būseną.

Būtiniausi ARIA vaidmenys ir atributai

  • `role="tablist"`: Naudojamas ant elemento, kuriame yra kortelės. Jis praneša, „Tai yra kortelių sąrašas.“
  • `aria-label` arba `aria-labelledby`: Naudojamas ant `tablist` elemento, kad suteiktų prieinamą pavadinimą, pavyzdžiui, `aria-label="Turinio kategorijos"`.
  • `role="tab"`: Naudojamas ant kiekvieno atskiro kortelės valdymo elemento (dažnai `
  • `aria-selected="true"` arba `"false"`: Kritiškai svarbus būsenos atributas ant kiekvieno `role="tab"`. `"true"` rodo šiuo metu aktyvią kortelę, o `"false"` – neaktyvias. Ši būsena turi būti dinamiškai atnaujinama naudojant JavaScript.
  • `aria-controls="panel-id"`: Naudojamas ant kiekvieno `role="tab"`, jo reikšmė turėtų būti `id` to `tabpanel` elemento, kurį jis valdo. Tai sukuria programinę sąsają tarp valdiklio ir jo turinio.
  • `role="tabpanel"`: Naudojamas ant kiekvieno turinio skydelio elemento. Jis praneša, „Tai yra turinio skydelis, susijęs su kortele.“
  • `aria-labelledby="tab-id"`: Naudojamas ant kiekvieno `role="tabpanel"`, jo reikšmė turėtų būti `id` to `role="tab"` elemento, kuris jį valdo. Tai sukuria atvirkštinę asociaciją, padedančią pagalbinėms technologijoms suprasti, kuri kortelė žymi šį skydelį.

Neaktyvaus turinio slėpimas

Nepakanka vizualiai paslėpti neaktyvius kortelių skydelius. Jie taip pat turi būti paslėpti nuo pagalbinių technologijų. Efektyviausias būdas tai padaryti yra naudoti `hidden` atributą arba `display: none;` CSS taisyklę. Tai pašalina skydelio turinį iš prieinamumo medžio, neleidžiant ekrano skaitytuvui skelbti turinio, kuris šiuo metu nėra aktualus.

Praktinis įgyvendinimas: aukšto lygio pavyzdys

Panagrinėkime supaprastintą HTML struktūrą, kurioje įtraukti šie ARIA vaidmenys ir atributai.

HTML struktūra


<h2 id="tablist-label">Paskyros nustatymai</h2>
<div role="tablist" aria-labelledby="tablist-label">
  <button id="tab-1" type="button" role="tab" aria-selected="true" aria-controls="panel-1" tabindex="0">
    Profilis
  </button>
  <button id="tab-2" type="button" role="tab" aria-selected="false" aria-controls="panel-2" tabindex="-1">
    Slaptažodis
  </button>
  <button id="tab-3" type="button" role="tab" aria-selected="false" aria-controls="panel-3" tabindex="-1">
    Pranešimai
  </button>
</div>

<div id="panel-1" role="tabpanel" aria-labelledby="tab-1" tabindex="0">
  <p>Profilio skydelio turinys...</p>
</div>
<div id="panel-2" role="tabpanel" aria-labelledby="tab-2" tabindex="0" hidden>
  <p>Slaptažodžio skydelio turinys...</p>
</div>
<div id="panel-3" role="tabpanel" aria-labelledby="tab-3" tabindex="0" hidden>
  <p>Pranešimų skydelio turinys...</p>
</div>

JavaScript logika (pseudo kodas)

Jūsų JavaScript būtų atsakingas už klaviatūros įvykių klausymąsi `tablist` elemente ir atitinkamą atributų atnaujinimą.


const tablist = document.querySelector('[role="tablist"]');
const tabs = tablist.querySelectorAll('[role="tab"]');

tablist.addEventListener('keydown', (e) => {
  let currentTab = document.activeElement;
  let newTab;

  if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
    // Rasti kitą kortelę sekoje, prireikus pereinant į pradžią
    newTab = getNextTab(currentTab);
  } else if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
    // Rasti ankstesnę kortelę sekoje, prireikus pereinant į pabaigą
    newTab = getPreviousTab(currentTab);
  } else if (e.key === 'Home') {
    newTab = tabs[0];
  } else if (e.key === 'End') {
    newTab = tabs[tabs.length - 1];
  }

  if (newTab) {
    activateTab(newTab);
    e.preventDefault(); // Išvengti numatytojo naršyklės elgesio rodyklių klavišams
  }
});

function activateTab(tab) {
  // Deaktyvuoti visas kitas korteles
  tabs.forEach(t => {
    t.setAttribute('aria-selected', 'false');
    t.setAttribute('tabindex', '-1');
    document.getElementById(t.getAttribute('aria-controls')).hidden = true;
  });

  // Aktyvuoti naują kortelę
  tab.setAttribute('aria-selected', 'true');
  tab.setAttribute('tabindex', '0');
  document.getElementById(tab.getAttribute('aria-controls')).hidden = false;
  tab.focus();
}

Globalūs aspektai ir geriausios praktikos

Kuriant pasaulinei auditorijai, reikia mąstyti plačiau nei viena kalba ar kultūra. Kalbant apie kortelių sąsajas, svarbiausias aspektas yra teksto kryptis.

Kalbos, rašomos iš dešinės į kairę (RTL), palaikymas

Kalbomis, tokiomis kaip arabų, hebrajų ir persų, kurios skaitomos iš dešinės į kairę, klaviatūros navigacijos modelis turi būti atspindėtas. RTL kontekste:

  • `Dešinės rodyklės` klavišas turėtų perkelti fokusą į ankstesnę kortelę.
  • `Kairės rodyklės` klavišas turėtų perkelti fokusą į kitą kortelę.

Tai galima įgyvendinti JavaScript, nustatant dokumento kryptį (`dir="rtl"`) ir atitinkamai apverčiant kairės ir dešinės rodyklių klavišų logiką. Šis, atrodytų, nedidelis pakeitimas yra kritiškai svarbus siekiant suteikti intuityvią patirtį milijonams vartotojų visame pasaulyje.

Vizualus fokuso indikavimas

Nepakanka, kad fokusas būtų teisingai valdomas užkulisiuose; jis turi būti aiškiai matomas. Užtikrinkite, kad jūsų fokusuotos kortelės ir interaktyvūs elementai kortelių skydeliuose turėtų gerai matomą fokuso kontūrą (pvz., ryškų žiedą ar rėmelį). Venkite kontūrų šalinimo su `outline: none;`, nepateikdami tvirtesnės ir prieinamesnės alternatyvos. Tai yra labai svarbu visiems klaviatūros vartotojams, ypač tiems, kurie turi silpną regėjimą.

Išvada: kūrimas siekiant įtraukties ir patogumo

Tikrai prieinamos ir patogios kortelių sąsajos sukūrimas yra apgalvotas procesas. Tam reikia peržengti vizualinio dizaino ribas ir gilintis į komponento pagrindinę struktūrą, semantiką ir elgseną. Taikydami standartizuotus klaviatūros navigacijos modelius, teisingai įgyvendindami ARIA vaidmenis ir atributus bei tiksliai valdydami fokusą, galite sukurti sąsajas, kurios yra ne tik atitinkančios reikalavimus, bet ir iš tiesų intuityvios bei suteikiančios galių visiems vartotojams.

Atsiminkite šiuos pagrindinius principus:

  • Naudokite vieną `Tab` stotelę: pasitelkite klajojančio `tabindex` techniką, kad visą komponentą būtų galima naršyti rodyklių klavišais.
  • Bendraukite su ARIA: naudokite `role="tablist"`, `role="tab"` ir `role="tabpanel"` kartu su susijusiomis savybėmis (`aria-selected`, `aria-controls`), kad suteiktumėte semantinę prasmę.
  • Valdykite fokusą logiškai: užtikrinkite, kad fokusas nuspėjamai judėtų nuo kortelės prie skydelio ir iš komponento.
  • Tinkamai slėpkite neaktyvų turinį: naudokite `hidden` arba `display: none`, kad pašalintumėte neaktyvius skydelius iš prieinamumo medžio.
  • Testuokite kruopščiai: išbandykite savo įgyvendinimą naudodami tik klaviatūrą ir su įvairiais ekrano skaitytuvais (NVDA, JAWS, VoiceOver), kad įsitikintumėte, jog jis veikia taip, kaip tikėtasi, visiems.

Investuodami į šias detales, mes prisidedame prie įtraukesnio interneto – tokio, kuriame sudėtinga informacija yra prieinama visiems, nepriklausomai nuo to, kaip jie naršo skaitmeniniame pasaulyje.

Kortelių sąsajų įvaldymas: išsami klaviatūros navigacijos ir fokuso valdymo analizė | MLOG