HTML elemek akadálymentes elrejtése
A cikk témái:
Egyik korábbi cikkemben már foglalkoztam azzal a kérdéssel, hogy a weboldal megjelenése alatt nem csak a vizuális megjelenést értjük, hanem a hallható, sőt a tapintható megjelenést is. Ebből kiindulva könnyen belátható, hogy a megjelenés ellentéte, az elrejtés is ugyanilyen sokrétű. Nagyon nem mindegy, hogy a weboldal egyes elemeit melyik megjelenési forma elől akarjuk elrejteni.
Az elrejtések típusai
Alapvetően három típusú elrejtésről beszélhetünk:
- a weboldal adott HTML eleme a képernyőn vizuálisan nem jelenik meg, de a képernyőolvasó program felolvassa (ne legyen látható, de maradjon hallható)
- a weboldal adott HTML eleme a képernyőn vizuálisan nem jelenik meg, és a képernyőolvasó program sem olvassa fel (ne legyen látható, és ne is legyen hallható)
- a weboldal adott HTML eleme a képernyőn vizuálisan megjelenik, de a képernyőolvasó program nem olvassa fel (legyen látható, de ne legyen hallható)
Fontos, hogy az elrejtés minden esetben CSS segítségével történik meg. Így ha a felhasználó lekapcsolja a stíluslapot, az elrejtett elemek mindenképpen megjelennek vizuálisan és hallhatóan is, ami teljesen normális működés.
A tapintható megjelenést azért hagytam ki a felsorolásból, mert a tapintható megjelenést biztosító Braille-kijelzők jellemzően a képernyőolvasó programra hagyatkoznak. Így ha a képernyőolvasó program elől elrejtünk valamit, akkor az elrejtődik a tapinható megjelenés elől is. A cikk hátralévő részében ezért a tapintható elrejtést külön nem hangsúlyozom ki.
A display:none
és a visibility:hidden
nem (mindig) akadálymentes
Mielőtt egyesével végigveszem az elrejtések típusait fontos megemlítenem, hogy a fejlesztői közvélekedéssel ellentétben az elrejtés nem oldható meg egyszerűen egy display:none
vagy egy visibility:hidden
CSS deklarációval. Ugyanis ezek az adott elemet nem csak vizuálisan rejtik el, hanem hozzáférhetetlenné teszik a képernyőolvasó program számára is! Ez pedig csak akkor lehet megfelelő megoldás, ha pontosan ez a célunk. Minden más esetben komoly akadálymentességi problémát jelentenek.
Ne legyen látható, de maradjon hallható
A weboldal HTML kódjába akadálymentesítési célból sokszor olyan elemeket is elhelyezünk, amelyeket kifejezetten képernyőolvasó programot használó látássérült internetezőknek szánunk. Ezek az elemek általában a weboldalon történő navigációt, eligazodást segítik.
Például egy látó személy számára teljesen világos, hogy azon a weboldalon, amit éppen néz, melyik rész a navigációs menü. Egy látássérült felhasználónak azonban egyértelművé kell tenni, hogy hol kezdődik a navigációs menü, hiszen ő - a vizuális áttekinthetőségi lehetőség hiányában - csak a képernyőolvasó által felolvasott információkból értesülhet erről. Ezt például úgy oldhatjuk meg, ha beteszünk egy erre utaló címsort a navigációs menü listája elé:
<h2 class="vizualisanrejtett">Navigációs menü</h2>
<ul>
<li><a href="index.html">Főoldal</a></li>
<li><a href="termekeink.html">Termékeink</a></li>
<li><a href="kapcsolat.html">Kapcsolat</a></li>
</ul>
A példában a Navigációs menü
szövegű címsor a képernyőn teljesen feleslegesen jelenne meg, tehát vizuálisan el kell rejteni. Ugyanakkor az a célunk, hogy a képernyőolvasó program felolvassa. Ennek egyik ismert akadálymentes megoldása, ha a CSS kódban a vizualisanrejtett
nevű osztályra ilyen stílusdefiníciót adunk meg:
.vizualisanrejtett {
position: absolute;
left: -10000em;
top: auto;
width: 1px;
height: 1px;
overflow: hidden;
white-space: nowrap;
}
Néhányan felkaphatják a fejüket, hogy miért ennyire bonyolult ez a definíció?
Ahogyan azt a korábban jeleztem a display:none
vagy a visibility:hidden
definíciókat ebben az esetben nem alkalmazhatjuk, mert ezek nem csak vizuálisan, hanem hallhatóan is elrejtik az elemet.
Felmerülhetne, hogy az adott elem méretét a width
és a height
tulajdonságok segítségével nullázzuk le. Sajnos van olyan böngészőprogram, amelyik ebben az esetben is nem létezőnek titulálja az elemet, így a képernyőolvasó program sem szerez róla tudomást.
A fent ismertetett megoldás az elrejtést úgy oldja meg, hogy minimálisra méretezi, majd kimozgatja az elemet a képernyő látható területéről. Vagyis a látó felhasználók számára nem lesz látható, de a látássérültek a képernyőolvasó program által hozzáférhetnek.
Ugyanerre a rejtési típusra terjedőben van egy általam még kevésbé alkalmazott és tesztelt megoldás is, ami a CSS clip
nevű tulajdonságát használja fel:
.vizualisanrejtett {
position: absolute !important;
clip: rect(1px,1px,1px,1px);
width: 1px;
height: 1px;
border: 0;
padding: 0;
overflow: hidden;
white-space: nowrap;
}
Frissítés: minden jel szerint a clip tulajdonságot visszavonják a CSS szabványból. Helyére a jövőben a clip-path tulajdonság lép majd, amit azonban még nem igazán támogatnak a böngészőprogramok.
Bármelyiket is alkalmazzuk az eredmény gyakorlatilag ugyanaz lesz. Összetett felépítésű oldalak esetén előfordulhat, hogy az elrejtés zavart okozhat az oldal vizuális megjelenésében. Ekkor érdemes kipróbálni, hogy a két ismertetett megoldás közül a melyik a jobb.
A ne legyen látható, de maradjon hallható típusú rejtésnél arra mindenképpen fel kell hívnom a figyelmet, hogy ezt a rejtési formát nagyon körültekintően kell alkalmazni az úgynevezett átugró linkek esetén.
Ne legyen látható, és ne is legyen hallható
Ennek a teljes rejtésnek az a célja, hogy az adott elem a képernyőn se jelenjen meg, és a képernyőolvasó se olvassa fel. Erre a célra a display:none
CSS szabály tökéletesen megfelel:
.teljesenrejtett {
display: none;
}
HTML5-ben tulajdonképpen ugyanezt lehet elérni, ha a hidden
attribútumot használjuk.
Legyen látható, de ne legyen hallható
Ez az rejtési forma a legkevésbé tipikus, és véleményem szerint nagyon kevés esetben merülhet fel.
Az egyik ilyen lehet, amikor egy olyan kép kerül az img
jelölőelem segítségével a HTML kódba, aminek csak és kizárólag vizuális dizájn szerepe van. Azaz érdemben nem ábrázol olyan tartalmi információt, amit a képernyőolvasó programnak is át kell adni. A mai webfejlesztési módszertan szerint az ilyen dizájnelemeket alapvetően a CSS kódba kell elhelyezni.
Ha viszont valamilyen oknál fogva mégis arra kényszerülünk, hogy egy dizájnképet a HTML kódba tegyünk, akkor azt úgy rejthetjük el a képernyőolvasó program elől, hogy a kötelező alt
attribútumát üresen hagyjuk.
<img src="csillanas.jpg" alt="" />
Ezzel jelezzük a képernyőolvasó program számára, hogy a kép tartalmilag lényegtelen, azaz ne olvassa fel még a létezését se. De hangsúlyozom, hogy az alt
attribútum tényleg csak akkor maradjon üresen, ha a kép valóban tartalmilag lényegtelen. Minden más esetben legyen kitöltött. Sajnos az egyik leggyakoribb akadálymentességi hiba az indokolatlanul üresen hagyott, vagy a teljesen elhagyott alt
attribútum.
Tetszőleges HTML elem kizárólag hallható elrejtésre az ARIA szabvány aria-hidden
attribútuma is megoldást jelenthet. Például így:
<p aria-hidden="true">Ez a szöveg látható, de nem hallható</p>
A teljeség igényével megemlítem, hogy a CSS szabványban elvileg szerepel egy speak
nevű hangzásbeli tulajdonság. Ennek none
értéke a szabvány szerint pontosan azt jelentené, hogy az ilyen tulajdonságú elemet ne olvassa fel a képernyőolvasó. De ezt ma még egyetlen képernyőolvasó program sem implementálta.
És mit szól az elrejtéshez a Google?
Sokszor felteszik nekem a kérdést, hogy az akadálymentességi célból elhelyezett, de vizuálisan elrejtett elemek miatt a Google, illetve más keresőrendszerek nem fogják‑e megbüntetni az oldalt?
Először is az én véleményem szerint a weboldalakat elsősorban a felhasználók számára készítjük, vagyis az ő maradéktalan kiszolgálásuk a cél. A keresőoptimalizálás ugyan nagyon fontos, de ebből a szempontból csak másodlagos tényező.
Másodszor a Google van annyira intelligens, hogy képes kiszűrni a jó és a rossz szándékból elkövetett elrejtéseket. A Google fejlesztői is tisztában vannak az aktuális akadálymentesítési megoldásokkal, amire fényes bizonyíték maga a Google főoldala. Abban ugyanis van olyan elrejtett link, ami kifejezetten a képernyőolvasót használók miatt van elrejtve. Ráadásul ugyanazzal a módszerrel, ahogyan azt ebben a cikkben is leírtam.
Frissítés 2016.október: Egy fejlesztői fórumon feltett kérdésre a Google egyik alkalmazottja megerősítette, hogy a vizuálisan rejtett, de képernyőolvasóval elérhető szövegeket nem bünteti a Google.