Szaktanácsadás akadálymentes honlap készítéséhez

Űrlapmezők akadálymentes címkézése

Vitathatatlan tény, hogy az űrlapok központi szerepet töltenek be korunk weboldalain, hiszen nélkülük nem lehet regisztrálni, vásárolni, hozzászólni, bankolni, keresni. Amennyiben egy webes űrlap nem akadálymentes, akkor ezeket a feladatokat sok felhasználó csak nagyon körülményesen vagy egyáltalán nem képes elvégezni. Több tényezőtől függ az, hogy egy űrlap akadálymentes vagy sem. Ezek közül most csak a legegyszerűbbet, az űrlapmezők címkézését járom körül.

Mire szolgál az űrlapmező címke?

Az űrlapmezőhöz tartozó címke nagyon egyszerű feladatra hivatott. Megadja a felhasználónak, hogy az adott űrlapmezőbe mit kell beírnia, mit kell kiválasztania, illetve a kijelölős űrlapmezők esetén mit jelent az adott opció kijelölése.

Sok fejlesztő azt gondolja, hogy elegendő a címkét vizuálisan valamilyen irányban az űrlapmező közelében elhelyeznie, és így a címke és az űrlapmező összetartozása világos lesz a felhasználó számára. Azon túl, hogy ez a UX (felhasználói élmény) kutatások alapján a látó felhasználók esetén sem mindig igaz, a vak felhasználók számára végképp nem az.

Miért? Mert esetükben a vizuális összetartozás érzékelése hiányzik. Számukra erősebb kapcsolatra (szaknyelven: a képernyőolvasó program által algoritmikusan meghatározható kapcsolatra) van szükség az űrlapmező és a hozzá tartozó címke között. Ez azt jelenti, hogy ha a vak felhasználó egy adott billentyűparancs segítségével közvetlenül az űrlapmezőre navigál, akkor a képernyőolvasó program képes legyen önmagától meghatározni és felolvasni, hogy az adott űrlapmezőhöz milyen címke tartozik.

Űrlapmező definiálása label jelölőelemmel

A HTML nyelvben a label jelölőelem segítségével lehet szemantikusan megjelölni az űrlapmező címkéjét. Például így:

<label>Név:</label>
<input type="text" name="nev" />

Önmagában a label jelölőelem ilyen formájú használata azonban még nem elégséges a címke és az űrlapmező kapcsolatának egyértelmű kifejezésére. Ha ugyanis a felhasználó az űrlapmezőre lép, akkor a képernyőolvasó program csak ennyit fog felolvasni: Szerkesztőmező. Ilyen esetben kénytelen a vak felhasználó önmagától, pusztán a logikai képességeire hagyatkozva „körbejárni” az űrlapmezőt, hogy a hozzá tartozó címkét megkeresse, pontosabban kikövetkeztesse. Ebben sajnos az sem segít, ha a címke egyébként label jelölőelemmel van ellátva.

Csak csendben jegyzem meg, hogy az egyik legelterjedtebb képernyőolvasó program, a JAWS újabb verziói már képesek intelligens módon kikövetkeztetni, hogy mi lehet a címke. De ez a következtetés nem mindig pontos. Éppen ezért jobb és biztonságosabb, ha mi magunk tesszük egyértelművé a kapcsolatot. Ráadásul nem szabad akadályok elé állítani azokat a felhasználókat sem, akik más képernyőolvasót használnak.

A címke és az űrlapmező összekapcsolása

A címke és az űrlapmező kapcsolatát kétféleképpen lehet egyértelművé tenni.

Címkébe ágyazott űrlapmező

Az egyik megoldást viszonylag kevesen alkalmazzák (beleértve magamat is), holott a HTML nyelvben már régóta szerepel. Ilyenkor a label elembe ágyazzuk be az űrlapmezőt, azaz szülő-gyerek viszonyt hozunk létre köztük:

<label>Név: <input type="text" name="nev" /></label>

Ez a kapcsolat egyértelmű a böngészőprogram és rajta keresztül a képernyőolvasó program számára is. Vagyis a képernyőolvasó az űrlapmezőre lépve elvileg ezt fogja felolvasni: Név szerkesztőmező. Azért csak elvileg, mert jelenleg nem mindegyik képernyőolvasó képes ezt megtenni, és emiatt nem alkalmazzuk sűrűn ezt a megoldást.

Összekapcsolás for attribútumon keresztül

A másik összekapcsolási mód azonban helyesen működik az ismert képernyőolvasókban. Ehhez első lépésben egyedi azonosítót, azaz id attribútumot adunk az űrlapmezőnek, majd a hozzá tartozó címke (label elem) for attribútumához ugyanezt az id értéket (azonosítót) írjuk be. Ez azt jelenti, hogy a label definiáltan az adott id azonosítóval ellátott űrlapmező címkéje lesz.

<label for="nev">Név:</label>
<input id="nev" type="text" name="nev" />

A felolvasóprogram ezt Név szerkesztőmező vagy Név kettőspont szerkesztőmező formában olvassa fel.

Az így összekapcsolt label és input elem a kódban tetszőleges sorrendben és egymástól távol is elhelyezkedhet. Például egy jelölőnégyzet esetén a címke általában a jelölőnégyzet után következik, ami az értelemszerű felolvasási sorrendet abszolút nem befolyásolja. Vagyis Vegetáriánus menüt kérek jelölőnégyzet. Nincs bejelölve szöveget hallja a felhasználó, ha az alábbi kódhoz ér a képernyőolvasó program:

<input id="vega" name="vega" type="checkbox" />
<label for="vega">Vegetáriánus menüt kérek</label>

Időnként megzavarja a fejlesztőket, hogy az űrlapmező id és name attribútuma között milyen viszony van. A két attribútumnak nincs köze egymáshoz, így értékük lehet egyforma és különböző is. Általában egyszerűbb, ha a két érték egyforma.

Ez alól azonban van egy nagyon fontos kivétel, amire fontos odafigyelni. Összetartozó rádiógombok esetén az egyes rádiógomboknak egyedi id attribútumot kell adnunk, miközben a name attribútumuknak mindenképpen egyformának kell lenni. Ugyanis az űrlapon belül a rádiógombok összetartozását a name attribútum azonosítja, míg az egyes opciókat az id. Utóbbi a label for attribútuma szempontjából fontos.

Az alábbi kódrészletben három szín közül választhat a felhasználó. A három rádiógombnak egyforma értékű a name attribútuma, de az id attribútumuk eltérő. Így mindegyikhez egyértelműen hozzákapcsolható egy saját címke.

<input type="radio" id="szin1" name="szin" value="p" />
<label for="szin1">Piros</label>
<input type="radio" id="szin2" name="szin" value="z" />
<label for="szin2">Zöld</label>
<input type="radio" id="szin3" name="szin" value="k" />
<label for="szin3">Kék</label>

A címke mint kattintható felület

Nem mellékesen akár a beágyazásos, akár a for attribútumos megoldást alkalmazzuk, egy másik előnyt is kínálunk a felhasználóknak. Nevezetesen, ha a címke és az űrlapmező kapcsolata világosan definiált, akkor a böngészőprogramok a címkét kattintható felületként kezelik.

Miért előnyös ez? Mert például a kijelölős űrlapmezők esetén nem kell az egérkurzorral pontosan eltalálni a jellemzően kicsi jelölőnégyzetet vagy rádiógombot, hanem a címkére kattintva is bejelölhetjük a mezőt. Ez elsősorban azok számára jelent könnyebbséget, akik koruk vagy valamilyen képességzavaruk miatt az egeret nehezen kezelik. De ez a megoldás mindenkinek, aki egeret vagy érintőképernyőt használ, megnövelt felhasználói élményt biztosít.

Vizuálisan rejtett űrlapcímke

A weboldalak keresőfunkcióját jellemzően olyan űrlappal oldjuk meg, amiben mindössze egy űrlapmező és egy „Keresés” feliratú gomb található. Ilyenkor a látó felhasználó számára viszonylag egyértelmű lehet, hogy az űrlapmezőbe a keresendő szót vagy kifejezést tudja beírni, hiszen vizuálisan az űrlapmező mellett közvetlenül elhelyezett gomb felirata áttételesen a címke szerepét is betölti.

A képernyőolvasó program felhasználói számára azonban a keresőmező funkciója már nem egyértelmű, mivel hozzárendelt címke hiányában az egy sima szerkesztőmezőként kerül felolvasásra. Számukra tehát kell egy olyan címke, ami a fent ismertetett megoldással hozzá van kapcsolva a keresőmezőhöz. Ugyanakkor jogosan felmerül, hogy ennek a címkének nem indokolt a vizuális megjelenése.

Ennek a helyzetnek az egyik megoldása az lehet, ha a label elemet a HTML elemek akadálymentes elrejtése című cikkemben leírt módon úgy rejtjük el, hogy az ne legyen látható, de maradjon hallható. Például így:

<label for="kereso" class="vizualisanrejtett">Keresés:</label>
<input id="kereso" type="text" name="kereso" />
<input type="submit" value="Keresés" />

A title attribútum mint címke?

Az iménti problémára egy másik megoldás lehet az is, ha a keresőmezőhöz mégsem társítunk label elemet, hanem felhasználjuk az input mezőhöz is hozzárendelhető title nevű attribútumot. Ugyanis ilyen esetben a title attribútum értékét is felolvassák a képernyőolvasó programok:

<input type="text" name="kereso" title="Keresés" />
<input type="submit" value="Keresés" />

Sajnos abban már eltérő viselkedést mutatnak a képernyőolvasók, hogy ha egy űrlapmezőhöz label elem és title attribútum is tartozik, akkor mit olvasnak fel. Van olyan, amelyik a kettő közül csak az egyik, de van olyan is, amelyik mindkettő értékét felolvassa.

Sok fejlesztő a title attribútumot jellemzően azért használja, mert bizonyos böngészőprogramokban ha a felhasználó az egérkurzort az adott elem fölé viszi, és néhány pillanatig ott is hagyja, akkor a title értéke úgynevezett súgóbuborék formájában jelenik meg. Arra azonban figyelni kell, hogy ezt a lehetőséget csak azok tudják elérni, akik egeret használnak. Akik kizárólag billentyűzetet vagy érintőképernyőt, azok nem. Ebből az következik, hogy önmagában a title elemet, mint címkét használni csak nagyon körültekintően szabad.

Címkézés WAI-ARIA segítségével

Az űrlapmezők címkézésére érdekes lehetőségeket nyújt az újkeletű WAI-ARIA technológia is, bár a fenti lehetőségeket nem feltétlenül helyettesíti vagy váltja le.

Az egyik ilyen az aria-labelledby attribútum. Ez összekapcsolási elvében nagyon hasonlít a label jelölőelem for attribútumára, csak ellenkező irányú. Vagyis nem a címke definiálja, hogy hozzá melyik űrlapmező tartozik, hanem az űrlapmező definiálja a címkéjét az aria-labelledby attribútum segítségével. Az összekapcsolás alapja itt is az id attribútum, de itt a címkéé. Ami igazán érdekes, hogy címkeként bármilyen jelölőelem szóba jöhet, nem csak label. A következő példában egy id attribútummal ellátott span elem tölti be a címke szerepét:

<span id="nevcimke">Név:</span>
<input type="text" name="nev" aria-labelledby="nevcimke" />

A WAI-ARIA szabványtervezet elméletileg azt sem zárja ki, hogy az aria-labelledby attribútum szóközökkel elválasztva több id attribútumértéket tartalmazzon. Ezzel elérhető, hogy szükség esetén az űrlapmezőhöz több különálló címke kapcsolódjon.

A másik kapcsolódó WAI-ARIA attribútum az aria-label, ami leginkább a title segítségével definiált címkéhez hasonlít. Vagyis a címke szövegét az űrlapmező aria-label attribútumában adjuk meg. Alkalmazása akkor megfontolandó, ha a címkét vizuálisan még súgóbuborék formájában sem akarjuk megjeleníteni, de a képernyőolvasóval fel akarjuk olvastatni. A keresőmezős példa így oldható meg aria-label segítségével:

<input type="text" name="kereso" aria-label="Keresés" />
<input type="submit" value="Keresés" />

Az aria-labelledby és az aria-label attribútum a WAI-ARIA-t támogató modern böngészőprogramoknál és képernyőolvasóknál jól működik. A régebbieknél azonban nem, így érdemes a cikk elején ismertetett, natív HTML alapú címkézés alkalmazását folytatni.

Használható-e a placeholder attribútum űrlapcímkeként?

Ezzel a kérdéssel egy külön cikkben foglalkozom.