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

A <dl> leíráslistáról

A <dl> jelölőelem, vagyis a leíráslista a HTML egyik őseleme, hiszen már a HTML DTD első vázlatában is felbukkant, majd ezt követően a HTML összes verziójában megtaláljuk. Valami miatt azonban mégis alulreprezentált, amit onnan gondolok, hogy én is viszonylag ritkán látom éles kódokban. Pedig alkalmazási lehetősége bőven lenne.

Ezt a jelölőelemet – amit időnként definíciós listaként is emlegetnek – jellemzően név-érték párok felsorolására használhatjuk. Vagyis olyan esetekben, amikor valamiről vagy valakiről nevesített adatokat, értékeket, tulajdonságokat szeretnénk elhelyezni a weboldalon.

Vegyük példaként azt, hogy egy online könyváruházban az alábbi módon szeretnénk megjeleníteni a könyv adatait:

Kiadó:
Magvető Kiadó
Oldalak száma:
540
Borító:
Keménytábla, védőborító
ISBN:
9789631435375
Kiadás éve:
2021

<div>-ekből barkácsolt adatlap

Nagyon gyakori, hogy a példánkhoz hasonló adatlapokat valami ilyesmi formában, jellemzően <div> jelölőelemekkel kódolják:

<div class="adatlap">
    <div class="adatlap--sor">
        <div class="adatlap--cimke">
            Kiadó:
        </div>
        <div class="adatlap--ertek">
            Magvető Kiadó
        </div>
    </div>
    <div class="adatlap--sor">
        <div class="adatlap--cimke">
            Oldalak száma:
        </div>
        <div class="adatlap--ertek">
            540
        </div>
    </div>

    <!-- ide jönnek a további tulajdonságok -->
</div>

Ez a megoldás gyakorlatilag soronkénti szövegegységeket hoz létre, mindenfajta szemantikai információ nélkül. Vagyis például képernyőolvasó programmal felolvastatva csak ez lesz hallható:

Kiadó

Magvető Kiadó

Oldalak száma

540

Erre sokan mondhatják azt is, hogy mi ezzel a gond, hiszen minden adat elhangzik? Persze, az adatok valóban hallhatóak, de a következők például már nem:

  • Nem hallható, hogy ez egy felsorolás, és az sem, hogy hány elemből áll.
  • Nem hallható, hogy hol kezdődik, és hol végződik a tulajdonságok felsorolása. Vajon egy elhangzó szövegrész még az adatlap része, vagy már egy teljesen másik blokkhoz tartozik?
  • Hallhatóan nem különböztethető meg, hogy melyik szöveg a tulajdonság neve, és melyik a tulajdonság értéke. Ez bizonyos esetekben akár komoly félreértésekhez is vezethet.

Ha azonban a példánkban szereplő adatlapot a <dl> jelölőelem segítségével kódoljuk, akkor elviekben az említett információkhoz is hozzájuthatnak a képernyőolvasós felhasználók. (Az elviekben kitételt azért hangsúlyozom, mert mindjárt látni fogjuk, hogy sajnos a gyakorlatban még nem ennyire rózsás a helyzet.)

A leíráslista definiálása

Kezdjük tehát azzal, hogy az adatlapunkat, vagyis a leíráslistánkat a <dl> jelölőelemmel definiáljuk:

<dl>
    
</dl>

Ha az adatlapunknak van címe is (pl. „A könyv adatai”), akkor azt mindenképpen a <dl> jelölőelem elé tegyük, mégpedig egy megfelelő címsor jelölőelemmel (pl. <h2> címsorral). Közvetlenül a <dl> elembe beágyazva ugyanis csak bizonyos elemek kerülhetnek, címsorok például nem.

Ezután jöhetnek a név-érték párok. <dt> jelölőelembe tesszük az adott tulajdonság nevét, és <dd> jelölőelembe az értékét:

<dl>
    <dt>Kiadó:</dt>
    <dd>Magvető Kiadó</dd>

    <dt>Oldalak száma:</dt>
    <dd>540</dd>

    <!-- ide jönnek a további tulajdonságok -->
</dl>

A név-érték pár nem minden esetben jelent 1:1 kapcsolatot. Akadhatnak olyan esetek is, amikor ugyanahhoz a tulajdonsághoz több érték is tartozik. Ezt egyszerűen úgy oldhatjuk meg, hogy a <dt> elem után több <dd> elemet definiálunk. Például a borítónál így:

<dt>Borító:</dt>
<dd>keménytábla</dd>
<dd>védőborító</dd>

A leíráslista előnyei az akadálymentesség szempontjából

A div-es barkácsolással szemben a <dl>, <dt> és <dd> elemekre épülő szemantikus leíráslistát a böngészőprogramok sokkal „értelmesebben” tudják továbbítani a különböző kisegítő technológiák, így például a képernyőolvasó programok felé.

Vagyis elviekben feltételezhetjük a következőket:

  • Az adatlaphoz érve a képernyőolvasó program beolvashatja, hogy egy leíráslista következik.
  • Az adatlap végén vagy az adatlapot elhagyva a képernyőolvasó program beolvashatja, hogy a leíráslista végére ért a felhasználó.
  • A képernyőolvasó program beolvashatja, hogy hány darab név-érték pár vagy elem található a felsorolásban.
  • A képernyőolvasó program beolvashatja, hogy a felhasználó éppen a felsorolás hányadik név-érték párját vagy elemét hallja.
  • A képernyőolvasó program beolvashatja, hogy az adott szöveg a tulajdonság neve (a kifejezés), vagy a tulajdonság értéke (a leírás).

Hogyan hallatszik képernyőolvasóval?

Lássuk, hogy az elvi feltételezéseinkhez képes a gyakorlatban (a cikkem írásának idején) mi hallatszik a különböző képernyőolvasó programokban. (A sorok a képernyőolvasó kurzorával történő lépkedések után elhangzó szöveget reprezentálják.)

Definíciós lista, 2 elemű

Kiadó

Magvető Kiadó

Oldalak száma

540

Lista vége

JAWS for Windows 2021

Lista, 4 elemmel, Kiadó

Magvető Kiadó

Oldalak száma

540

Lista vége

NVDA 2021.1

Leíráslista 2 elem

Kiadó, 1/4

Magvető Kiadó, 2/4

Oldalak száma, 3/4

540, 4/4

Leíráslista vége

VoiceOver macOS 10.15.7

Kiadó, Leíráslista kezdete, Kifejezés

Magvető Kiadó, Leírás

Oldalak száma, Kifejezés

540, Leíráslista vége, Leírás

VoiceOver iOS15

Kiadó

Magvető Kiadó, Definíció

Oldalak száma

540, Definíció

TalkBack 9.1 Android

Ezekből az eredményekből megállapíthatjuk, hogy a <dl> leíráslista képernyőolvasós támogatottsága nagyon eltérő, és sajnos elmarad az elvárásainktól. De még így sokkal jobb, mint a div-es megoldás. Szóval bátran használjuk, és bízzunk abban, hogy a támogatottsága idővel javulni fog.

Vízszintes megjelenésű leíráslista

Sokan a hagyományos felsorolásoknál (<ul> és <ol> listáknál) is úgy gondolják, hogy a felsorolás csak függőleges irányban értelmezhető. Így ha meglátnak egy olyan képernyőtervet, amin egymás mellett lévő elemek vannak, akkor azt nem feltétlenül tekintik listaként.

Pedig a felsorolás csak egy logikai fogalom, ami megjelenésében függőleges és vízszintes is lehet. Gondoljunk például a honlap tetején vízszintesen megjelenő navigációs sávra, amiben a linkek egymás mellett vannak felsorolva.

A <dl> leíráslisták is lehetnek vízszintes megjelenésűek, bár ennek elég sokáig komoly kerékkötője volt, hogy a <dt> és <dd> elemek közösen nehézkesen voltak formázhatók, illetve pozicionálhatók.

A megoldást 2016-ban a WHATWG-féle HTML specifikáció módosítása, majd 2017-ben a HTML 5.2 hozta el. A HTML szabvány ezen verzióitól kezde a <dl> jelölőelemben a <dt>/<dd> párok <div> jelölőelemmel csoportosíthatók a CSS formázás, illetve a globális HTML attribútumok (pl. mikroadatok) definiálása céljából. Ez a <dl> jelölőelem szemantikáját semmilyen módon nem változtatja meg, így a képernyőolvasós felolvasást sem befolyásolja.

Lássunk egy példát a csoportosításra:

<dl>
    <div>
        <dt>Átvételi mód</dt>
        <dd>Házhozszállítással</dd>
    </div>
    <div>
        <dt>Szállítási cím</dt>
        <dd>
            Gipsz Jakab<br />
            1111 Budapest, Nevenincs utca 1.
        </dd>
    </div>
</dl>

Ez a leíráslista már könnyedén megformázható vízszintes (és ha kell, akkor persze függőleges) megjelenésűre is. Például így:

Átvételi mód
Házhozszállítás
Szállítási cím
Gipsz Jakab
1111 Budapest, Nevenincs utca 1.