Programming the World Wide Web |
Fejezet3 |
<< CSS - Egymásbaágyazható stíluslapok |
HTML elemek pozíciójának megadása
A HTML 4.0 specifiáció megjelenése előtt a felhasználónak kevés beleszólása volt a HTML elemek elhelyezésébe, ezek ugyanis ugyanúgy követik egymást, mint
ahogy a szöveg egy szövegszerkesztőben: egymás után töltik fel a sorokat.
Táblázatok segítségével próbálták valamennyire befolyásolni az elrendezést, de ez egyrészt eléggé rugalmatlan megoldás, másrészt a táblázat megjelenítése viszonylag lassú.
A CSS nyújtotta pozíció-megadási lehetőségek szerencsére megoldották ezt a problémát.
A pozíciót a top
, bottom
, left
, right
tulajdonságok segítségével adhatjuk meg, melyek meghatározzák a távolságot egy bizonyos viszonyítási ponthoz képest (negatív értéket is megadhatunk).
Előbb azonban a pozicionálás módját kell meghatároznunk a position
tulajdonság segítségével. Ennek lehetséges értékei: static
(ez az alapértelmezett érték),
fixed
, relative
, absolute
.
A nem statikus módon pozicionált elemeknek nem csupán a helyzetét adhatjuk meg, hanem ennek változtatásával mozgathatjuk is őket JavaScript segítségével.
Statikus pozicionálás
A statikus pozíció az alapértelmezett (a position
tulajdonság alapértelmezett értéke static
). Ez annyit jelent, hogy az illető elem „normális” pozícióját
nem befolyásolhatjuk a top
, bottom
, left
, right
tulajdonságok megadásával, ott foglal helyet, ahol éppen következik a többi elem sorában.
Fix pozicionálás
Fix pozicionálás (position:fixed;
) esetén az elhelyezés a böngészőablakhoz lesz viszonyítva (a görgetés sem befolyásolja az elhelyezést). A top
tulajdonsággal például a böngészőablak
tetejéhez képest mért távolságot adhatjuk meg. Ugyanígy megadhatjuk az aljához képest mért távolságot a bottom
tulajdonsággal, illetve a bal vagy a jobb széléhez mért távolságot (a left
vagy right
tulajdonságot használva).
A fix pozicionálással megadott HTML elem ki van emelve a többi, statikus módon elhelyezett elem rendszeréből (ennek angol megnevezése normal flow), vagyis a többi elem úgy lesz
elhelyezve, mintha a fix módon pozicionált elem nem is létezne. Emiatt megtörténhet, hogy a fix módon elhelyezett elem elfed más HTML elemeket, esetleg azok görgetéskor becsúszhatnak alá, ami zavaró is lehet. Erre vigyáznunk kell.
Megjegyzés: Az IE7 és IE8 csak akkor támogatja a fixed
értéket, ha a !DOCTYPE
meg van adva a dokumentum elején.
Relatív pozicionálás
A relatív módon pozicionált elem (position:relative;
) helyzetét a saját normál elhelyezéséhez képest adhatjuk meg a top
, bottom
, stb. tulajdonságokkal.
Az ilyen elem mozgatható (pl. JavaScript kód segítségével), átfedhet más elemeket, a „normál helye” azonban fenn van tartva továbbra is (ki van hagyva számára a hely, ahol normál módon el kéne helyezkednie).
Az ilyen elem gyakorta konténerként szolgál abszolút módon pozicionált elemek számára. Hasznos lehet olyan esetekben, amikor a kívánt elem nem pontosan ott jelenik meg, ahol mi szeretnénk: ezzel a módszerrel errébb-arrább taszíthatjuk a megfelelő top
, bottom
, stb. tulajdonságo(ka)t használva.
Abszolút pozicionálás
Az abszolút módon pozicionált elem (position:absolute;
) helyzete az első olyan szülőeleméhez viszonyított, mely nem statikus. Amennyiben nincs ilyen nem-statikus elembe ágyazva, akkor a html
elem az a blokk, amelyhez a viszonyítás történik (más szóval a dokumentum elejéhez képest adjuk meg a pozíciót).
Az abszolút módon pozicionált elemek ki vannak ragadva a statikus módon elhelyezett elemek normál elhelyezkedésének rendszeréből, azaz a többi elem úgy viselkedik, mintha az illető abszolút módon elhelyezett elem nem is létezne.
Egymást átfedő elemek: z-index
A fentebb leírt pozicionálás eredményeképpen egyes elemek átfedhetik egymást. Ebben az esetben a z-index
az a tulajdonság, amelynek segítségével befolyásolhatjuk, hogy milyen sorrendben kerüljenek egymásra az egymást átfedő elemek (melyik legyen a másik előtt vagy mögött).
A z-index
értéke egész szám. Nagyobb z-index
-el rendelkező elem fentebb helyezkedik el, azaz a kisebb z-index
-ű elemek előtt foglal helyet.
Megjegyzés: amennyiben két elem átfedi egymást, és nem adtuk meg a z-index
értékét, a HTML kódban utóbb elhelyezett elem kerül a korábban elhelyezett fölé.
Float/clear
A float
tulajdonság segítségével jobb vagy baloldalra tolhatunk egy elemet. A float
tulajdonság értéke ennek megfelelően left
, right
vagy none
(alapértelmezett) lehet.
A jobrra vagy balra csúsztatott elem után következő elemek e köré fognak rendeződni. Tipikusan szöveg, illetve kép(ek) egymás mellé rendezése szokás használni a float
tulajdonságot, de arra is használhatjuk, hogy
a weboldal tartalmát részekre bontsuk, és ezeket megfelelőképpen elhelyezzük, anélkül, hogy táblázatot használnánk. Ezt mutatja be a példák között szereplő 4_float_pl.htm állomány.
Megjegyzés: Az abszolút módon pozicionált elemek a float
tulajdonságot figyelmen kívül hagyják.
Amennyiben meg szeretnénk szüntetni a float
tulajdonság hatását (nem akarjuk, hogy további elemek köré rendeződjenek), ezt a clear
tulajdonság segítségével tehetjük meg. Lehetséges értékei:
right
, left
vagy both
.
Konfliktushelyzetek kezelése
Az egyes stílusjegyek különböző forrásból származhatnak: megadhatja őket maga a szerző (inline módon, belső vagy külső stíluslapként), lehet az a böngésző alapértelmezett stílusa, ugyanakkor egyes böngészők lehetővé teszik a felhasználó számára, hogy bizonyos stílusjegyeket maga állítson be
(például ha valaki rövidlátó, meghatározhat egy minimális betűméretet). Kérdés, hogy konfliktushelyzet esetén (a szerző által különböző szinteken megadott stílusjegyek prioritási sorrendjén túl) milyen kritériumok döntik el, hogy melyik beállítás legyen figyelembe véve a megjelenítésnél.
A továbbiakban a konfliktus feloldására használt algoritmusnak az alapelveit ismertetjük.
A stílusjegyek forrásán kívül van még egy befolyásoló tényező: a stílusjegy fontossága. Ez kétféle lehet minden stílusjegy esetén: normál vagy fontos. A CSS stílusállomány szerzője fontossá tehet egy adott stílusjegyet az alábbi szintaxissal:
p.right {align: right !important;}
A fentieket figyelembe véve a HTML elemek megjelenítéséhez használt virtuális stílus úgy jön létre, hogy előbb össze lesznek gyűjtve a különböző forrásokból származó stílusjegyek, és amennyiben konfliktushelyzet adódik, az alábbi prioritási sorrend lesz a döntő:
- a felhasználó fontos beállításai (legnagyobb prioritás)
- a szerző fontos beállításai
- a szerző normál beállításai
- felhasználó normál beállításai
- böngészőből származó beállítások
Megtörténhet, hogy marad továbbra is fennálló konfliktus. Ebben az esetben a használt szelektor specifikussága a mérvadó. A sorrend (a prioritás csökkenő sorrendjében):
- id szelektor
- stílusosztály illetve pszeudo-szelektorok
- kontextussal megadott szelektorok (minél több elemtípus szerepel, annál specifikusabbnak számít)
- univerzális szelektor (* - minden elemre vonatkozik)
Amennyiben továbbra is konfliktus állna fenn, úgy a későbbi felülírja a korábban definiált stílusjegyet.