22. Általános tárolók — a div és a span elemek
- Előző leírás — Kevéssé ismert szemantikus elemek
- Következő leírás — Több lap létrehozása navigációs menüvel
- Tartalomjegyzék
Bevezető
Ebben a leírásban be fogom mutatni, hogyan és mikor használatod a HTML-ben azt a két elemet, amelyek nem a tartalom leírására szolgálnak. A div
és a span
elemek ugyanis semmilyen jelentést nem rendelnek ahhoz a tartalomhoz, amit közrefognak, hanem egy általános módszert biztosítanak ahhoz, hogy a tartalmat olyan saját struktúrába vagy csoportokba rendezd, amelyre nincs más, odavaló HTML elem. Az ilyen csoportokat aztán CSS-ből stílusozhatod és JavaScripttel módosíthatod is. Habár a div
önmagában nem tartalmaz szemantikus jelentést a dokumentumban, mégis tekinthetjük úgy, mint egy strukturált felosztást elősegítő jelölést, a megfelelő szemantikus osztály- vagy azonosító névvel együtt.
Ezeket a tageket csak „végső esetben” használjuk, amikor már semmilyen más HTML elemet nem tudunk felhasználni, mivel ezek az elemek már semmilyen plusz információt nem hordoznak például a kisegítő technológiák, keresőmotorok számára.
A leírás felépítése a következő:
- Szemantikailag semleges
- Inline kontra blokk
- Példa a tartalom felosztására
- Extra információk
- Kapaszkodók a JavaScriptekhez és CSS-hez
- div-itis
- Helytelen szemantika
- Összefoglaló
- Tesztkérdések
Szemantikailag semleges
A HTML elemek legnagyobb része azért van, hogy leírjon valamilyen tartalmat, például képeket, listákat, címsorokat, vagy hogy segítsen a dokumentum felépítésében, a fejléc (head
), a törzs (body
), a külső hivatkozások (link
) vagy a metaadatok (meta
) definiálásában. A HTML specifikáció a következőt írja:
Adiv
és aspan
elemek, ellentétben azid
és aclass
attribútumokkal, egy sokkal általánosabb mechanizmus nyújtanak a dokumentumok strukturálására.
Ezekre az elemekre úgy tekinthetünk, mint a HTML állványaira. Lehetőséget adnak arra, hogy csoportosítsd a tartalmat, hogy extra információkat definiálhass a tartalmak körül, amelyeket aztán kapaszkodóként szolgálnak a JavaScript és CSS használatakor. Viszont nem adnak semmilyen új szemantikai jelentést a dokumentumhoz, sem a jelölésen belül, sem kívül.
Inline kontra blokk
Ahogy már korábban tanultuk, a blokk szintű elemek olyan elemek, amelyek segítenek a dokumentum strukturálásában. A div
element — ami a division, vagyis a felosztás rövidítése — egy blokk szintű általános tároló elem. Normál esetben arra használhatjuk, hogy más blokk szintű elemeket fogjon közre, egy csoportba rendezve azokat (a következő szakaszban bővebben is fogunk erről beszélni). Arra is használható, hogy összegyűjtsön egy adag inline elemet és/vagy szöveget, amelyek egyébként logikailag nem tartoznak egy közös blokk szintű elem alá, de ezt csak végső esetben használjuk.
A span
az inline, vagyis szövegen belüli általános tároló elem. Segíthet abban, hogy a dokumentum struktúráját felépítsük, de általában arra használjuk, hogy összefogjon más inline elemeket és/vagy szövegeket, kivéve a blokk szintű elemeket.
A kettő közötti különbség első ránézésre eléggé elenyészőnek tűnhet. Ami alapján elsősorban különbséget tehetünk közöttük, az a tartalom típusa, valamint hogy hogyan jelenne meg, ha stílusozás nélkül írnánk le őket. A div
elemet egy csoport blokk szintű elem köré szoktuk tenni — például összefoglalhatunk egy címsort és egy hivatkozáslistát, hogy készítsünk belőlük egy navigációs menüt. A span
ezzel szemben inkább a csoport inline elemet és (elsősorban) egyszerű szöveges részeket fog közre. A kulcsszó mindkét esetben a „csoport”: ha egy div
csak egyetlen blokk szintű elemet fog közre, vagy a span
egyetlen inline elemet, akkor fölösleges a használatuk. Nézd meg például, hogy használjuk a div
és a span
elemeket az alábbi egyszerű kódban:
<body> <div id="foTartalom"> <h1>A lap címe</h1> <p>Ez az első bekezdés a példa lapunkon.</p> <img src="pelda.gif" alt="Ez csak egy példa kép, semmi különleges"> <p>Ez a második bekezdés a példa lapunkon. Nagyon hasonló az elsőhöz, csak itt van egy <span id="specialisFigyelmeztetes">speciális figyelmeztetés, amit meg akarunk színezni és a kicsit megnövelni CSS-sel</span>. Ez nem a normál kiemelés, inkább stílusozás, szóval az <em> és a <strong> nem a legmegfelelőbbek.</p> </div> </body>
Mostantól a div
és span
elemekben található tartalmat elérheted az id
attribútumaik segítségével, és speciális stílusozást és pozicionálást adhatsz nekik CSS-ben.
Példa a tartalom felosztására
Ha megnézed az interneten található lapok forrását, találhatsz egy csokor olyan div
elemet, amelyeknek mind hasonló neveik vannak a class
vagy id
attribútumaikban, például header (fejléc), footer (lábléc), content (tartalom), sidebar (oldalsáv), és így tovább.
A class
és id
attribútumaid nevei legyenek szemantikusak, vagyis elsősorban a közrefogott tartalom jelentésére, funkciójára vonatkozzon, ne pedig a vizuális megjelenésére. Például az oldalsav
és a figyelmeztetes
jó osztálynevek, míg a pirosbalsav
és a kekvillogoszoveg
már nem. Mi van akkor, ha az oldalsávod színét egy későbbi időpontban át szeretnéd állítani pirosról kékre, vagy áttennéd balról jobbra? Mi van akkor, ha a figyelmeztetéseket mostantól zöld aláhúzottként akarod megjeleníteni a villogó kék helyett?
Ezek a felosztások jól átláthatóvá teszik a struktúrát a lap készítésekor, de még fontosabb, hogy amikor később megnézzük a HTML kódot, nagy segítséget nyújtanak abban, hogy melyik rész mire szolgál. Egy jól felosztott lap önmagát magyarázza.
Ahhoz, hogy ez érthetőbb legyen, nézzük meg egy valódi weboldal felosztását — mégpedig a dev.opera.com oldalét. Ne felejtsd el, hogy az alábbi példakód egyáltalán nem tartalmaz hasznos tartalmat, leszámítva azt a néhány elemet, amelyik szükséges az oldal struktúrájának bemutatásához. Csak arra koncentráltunk, hogy felépítsük az adott oldal struktúráját, div
elemeket felhasználva. A kódban olvasd el figyelmesen a HTML kommenteket — ezekben magyarázom meg az oldal struktúráját. Miközben végigolvasod a kódot, nyisd meg a dev.opera.com oldalt egy másik fülön vagy ablakban, így azonnal láthatod a felépített struktúraelemeket élesben is.
<body> <!-- Legelőször van egy wrapper div, ami közrefogja a teljes lapot, ezen keresztül pontosabban befolyásolhatjuk a teljes lapot --> <div id="wrap"> <!-- Ez a rendezetlen lista tartalmazza a hivatkozásokat az Opera különböző oldalaira, amelyeket a lap legfelső részében láthatsz --> <ul id="sitenav" class="hidemobile"> ... </ul> ... <!-- Ez egy keresőmező - a kereső, amit a lap jobb felső részében láthatsz --> <form action="/search/" method="get" id="search"> <div> ... </div> </form> <!-- Ez a rendezetlen lista tartalmazza a fő navigációs menüjét az oldalnak - a vízszintes menüsávot, amelyet a főcím képe alatt láthatsz --> <ul id="menu"> ... </ul> <!-- Ezek az egymásbaágyazott div-ek adják meg a belépődoboz struktúráját, ahol megadhatod a felhasználóvedet és a jelszavadat a belépéshez az oldalra. Ezt csak akkor látod, ha nem vagy belépve --> <div id="loginbox"> <div id="login"> ... </div> </div> <!-- Ezekbe az egymásbaágyazott div-ekbe kerül a lap valódi tartalma - a cikkek rövid tartalma, amelyek a lap fő tartalmát adják --> <div id="content2"> <div id="main"> ... <div class="major"> ... </div> <div class="major"> ... </div> ... </div> </div> <!-- Ez a div tartalmazza a lap oldalsávját - a cikkek kategóriáit, az utolsó hozzászólásokat, stb --> <div id="side"> ... </div> <!-- Ez a div tartalmazza a láblécet, ahol láthatod a copyright megjegyzést, valamint mindenféle hivatkozásokat --> <div id="footer"> ... </div> <!-- A lap vége - itt zárjuk be az első wrapper div-et --> </div> </body>
Extra információk
Néhány tartalom olyan extra információkat tartalmaz, amelyeket a különböző kliens eszközök fel tudnak használni. Az ilyen információkat valamilyen attribútummal lehet leírni. A span
elem gyakran a legjobb megoldás az ilyen információk befűzésére, amint azt az alábbiakban bemutatjuk.
Egy jó példa az az eset, amikor valamilyen más nyelvű szövegrész jelenik meg a dokumentumban. Például:
<p><q>Plus ça change, plus c'est la même chose</q> — mondta.</p>
Bár a fő dokumentum nyelve magyar, az idézet valójában francia. Ezt a lang
attribútum használatával adhatjuk meg:
<p><q lang='fr'>Plus ça change, plus c'est la même chose</q> — mondta.</p>
Ebben az esetben könnyen meg tudtuk jelölni az eltérő nyelvet, mivel az egy idézetben jelent meg, így a q
elem éppen megfelelt az idegen nyelvű tartalom közrezárására. Vannak viszont olyan esetek, amikor nem találunk egyetlen olyan elemet sem, amelyik megfelelő lenne, így kénytelenek vagyunk használni a div
vagy a span
elemeket. Például:
<p>A képernyő-felolvasó a francia chat (macska) szót mindaddig hibásan fogja felolvasni, amíg helyesen meg nem jelöljük a szó nyelvét.</p>
Ebben a példában a chat szó megjelenésekor valahogyan jelezni kellene a dokumentumban, hogy a képernyő-felolvasó más nyelvet használjon a kiolvasására. Ebben az esetben egy span
elemmel a szó körül nagyon egyszerűen érhetjük el ezt, mivel semmilyen más HTML elemet nem tudunk használni helyette. Mivel csak egyetlen szóról van szó egy hosszabb szövegen belül, így inline, szövegen belüli elemre van szükség. A példát így lehetne átírni helyesen:
<p>A képernyő-felolvasó a francia <span lang='fr'>chat</span> (macska) szót mindaddig hibásan fogja felolvasni, amíg helyesen meg nem jelöljük a szót.</p>
Ugyanezt a technikát használják a microformatok esetében is, az adattípusok egyforma jelölésére a weblapokon belül. A microformatokról sokkal többet is megtudhatsz a dev.opera.com haladó HTML cikkeiből.
Kapaszkodók a JavaScriptekhez és CSS-hez
Már beszéltünk arról, hogyan használhatod a div
és a span
elemeken az id
és a class
attribútumokat arra, hogy ezeken keresztül CSS-ből közvetlenül stílusozhasd és pozicionálhasd a dokumentum bizonyos részeit. Pontosan ugyanígy kell eljárnod ahhoz, hogy JavaScripttel is elérhesd ezeket a részeket.
Ha egy bizonyos elemet megkeresni vagy módosítani szeretnél JavaScripttel, akkor az általános módszer szerint rendelj az elemhez egy id
azonosítót, majd használd a getElementById
függvényt a lekéréséhez. A JavaScriptről a tanfolyam későbbi részeiben lesz szó bővebben.
div-itis
Érdemes megemlíteni még egy gyakran előforduló problémát, amelyre „div-itis” névvel szoktak hivatkozni a webfejlesztők.
Bár nagyon egyszerű a div
és a span
elemek stílusozása, ezt a módszert lehetőség szerint kerülni kell. A legtöbb esetben a stílusozást vagy a JavaScript funkcionalitást a már létező elemekhez is hozzá lehet rendelni a dokumentumban. Az általános tárolók használata csak végső megoldásként merülhet fel — a legjobb, ha a weblapot megpróbáljuk csak a szemantikus elemek felhasználásával megírni, és a tárolókat csak akkor alkalmazzuk, amikor már nincs más lehetőség.
Helytelen szemantika
Ebben a részben néhány olyan HTML jelölésekkel kapcsolatos gyakori félreértést szeretnék bemutatni, amelyeket érdemes elkerülni, ha csak lehetséges.
Általános „bekezdések”
Néha csábító lehet egyszerűen egy p
elembe tenni egy szöveget (bekezdésnek jelölve), de ez nem mindig helyes. Ahogy már korábban is említettem a szöveges részek megjelölése leírásban:
Ha csak néhány szóról van szó, vagy nem egy teljes mondatról, akkor ezeket nem kell feltétlenül paragrafusként megjelölnöd.
Egy div
vagy span
elem (a környezet függvényében) sokkal inkább megfelelő az olyan szöveges tartalmak szétválasztására, amelyek között nincs más HTML elemmel leírható kapcsolat.
Prezentációs elemek
Az interneten fellelhető tanácsok között van egy, amelyik egyértelműen káros, mégpedig a rövid, megjelenítő elemek, mint a b
vagy az i
használata általános tárolóként a span
elem helyett. Általában két indokot hoznak fel a módszer mellett:
- Ezek az elemek három byte-tal rövidebbek, így sávszélességet lehet spórolni a HTML és a CSS esetében is.
- Az elemeket csak vizuális megjelenítésre használjuk, így a a „prezentációs” elemek használata ilyen esetekben megengedhető.
Az első pont az igaz, de a megspórolt mennyiség túlnyomórészt jelentéktelen (kivéve ha irdatlan mennyiségű vizuális effektust használsz), különösen a mai modern tömörítő módszerek mellett, amelyeket a webes kiszolgálók alkalmaznak a dokumentumokon a böngészőhöz való átküldés előtt. Ezek sokkal rövidebbé teszik a dokumentumokat, mint bármilyen kézileg alkalmazott trükk.
A második pont arra utal, hogy nem értették meg pontosan a prezentációs elemek jelentését a HTML-lel kapcsolatban. A prezentációs elemek azt jelölik, hogy a tartalmuk hogyan néz ki (tehát egyszerűen annyit, hogy „ez a szöveg félkövér”). Nem jelentenek viszont kapaszkodókat a bennük található szövegrészek stílusozásához.
Ha egy rövid szövegrészt egy bekezdésen belül stílusozni vagy JavaScripttel módosítani kell, és nincs hozzá illő szemantikus elem, ami közrefoghatná, akkor az egyetlen helyes elem, amit használhatunk, az a span
.
Összefoglaló
Ezzel véget is ér a bemutatónk a div
és a span
elemekről — mostanra már jobban megértheted, hogy mire szolgálnak, és megfelelő helyeken tudod használni őket. A későbbi, CSS-ről szóló leírásokban még lesz róluk szó a lapszerkezetek készítése és más felhasználási módok között is.
Tesztkérdések
- Mi a különbség a
div
és aspan
között? - Nevezd meg a fenti elemek 2 felhasználási módját a weblapokon.
- Nézd meg az egyik kedvenc weboldalad forráskódját. Figyeld meg a felépítését. Sok
div
ésspan
elemet használ hozzá? Látsz helytelen felhasználási módokat rajtuk? Hogyan lehetne jobban megoldani?
- Előző leírás — Kevéssé ismert szemantikus elemek
- Következő leírás — Több lap létrehozása navigációs menüvel
- Tartalomjegyzék
A szerzőről
Fotó: Andy Budd.
Mark Norman Francis már azelőtt az internettel foglalkozott, hogy a web megszületett volna. Jelenleg a Yahoo!-nál a világ legnagyobb weboldalán dolgozik mint kezelőfelület-tervező, új módszereket és kódolási szabályokat dolgoz ki, valamint nemzetközi támogatást nyújt a minőségi webfejlesztéshez.
A Yahoo! előtt a Formula One Management, a Purple Interactive és a City University vállalatoknál dolgozott különböző minőségben, többek között mint webfejlesztő, CGI programozó és rendszertervező. A http://marknormanfrancis.com/ oldalon blogol.
This article is licensed under a Creative Commons Attribution, Non Commercial - Share Alike 2.5 license.
Comments
The forum archive of this article is still available on My Opera.