3.2. fejezet¶
A fejezet anyaga¶
További CSS szelektorok¶
A 2. fejezetben megismerkedtünk a legalapvetőbb CSS szelektorokkal (elem szelektor, class szelektor, id szelektor, univerzális szelektor). Ebben a részben néhány további kijelölőtípusról fogunk tanulni.
Megjegyzés
A gyakorlaton csak a gyakrabban használt szelektorokat tárgyaljuk. Ezeken kívül vannak még további CSS szelektorok is, amelyeknek a részletes listáját megtalálhatjuk itt.
Szelektorok csoportosítása¶
Amikor több szelektorra is ugyanazok a formázások vonatkoznak, akkor a szelektorokat vesszővel elválasztva soroljuk fel egymás után.
Példa: Az összes <h1> és <h2> objektum, valamint a class="warning" attribútummal rendelkező elemek piros betűszínűvé tétele
1 2 3 | |
Kijelölés kapcsolat alapján¶
CSS-ben használunk olyan szelektorokat is, amelyek egymáshoz való viszonyaik, kapcsolataik alapján jelölnek ki elemeket:
E1 E2: minden olyanE2elemet kijelöl, amely egyE1-ben találhatóE1 > E2minden olyanE2-t kijelöl, amelynek szülőjeE1(szülő-gyerek kapcsolat alatt továbbra is közvetlen tartalmazást értünk)E1 ~ E2: minden olyanE2-t kijelöl, amelyE1-nek testvére ésE1után következik a kódbanE1 + E2: minden olyanE2-t kijelöl, amelyE1-nek testvére és közvetlenülE1után következik a kódban.
Példa: A body p szelektor kijelöli az összes olyan bekezdést, amely a <body>-ban található. A body > p azokat a bekezdéseket jelöli ki, amelyek közvetlenül a <body>-ba vannak beágyazva
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |

Példa: A p ~ p szelektor kijelöl minden olyan bekezdést, amely egy másik bekezdés testvére és valahol a másik bekezdés után található a kódban. A p + p szelektornál még azt is megköveteljük, hogy közvetlenül (azaz rögtön) a másik bekezdés után szerepeljen az elem
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |

A kapcsolat alapján történő kijelölésre használhatunk még úgynevezett pseudo-class-okat is, a szelektor:pseudoclass szintaxissal. Ez a szintaxis a szelektor által kijelölt elemek közül kiválaszt minden olyant, amelyre pseudoclass teljesül.
Nézzünk néhány példát pseudo-class-okra, a teljesség igénye nélkül!
E1:first-child: minden olyanE1-et kijelöl, ami a szülőjének legelső gyerekeE1:nth-child(n): minden olyanE1-et kijelöl, ami a szülőjénekn-edik gyerekeE1:last-child: minden olyanE1-et kijelöl, ami a szülőjének az utolsó gyerekeE1:first-of-type: minden olyanE1-et kijelöl, ami az azonos (E1) típusú testvérei közül a legelsőE1:nth-of-type(n): minden olyanE1-et kijelöl, ami az azonos (E1) típusú testvérei közül azn-edikE1:last-of-type: minden olyanE1-et kijelöl, ami az azonos (E1) típusú testvérei közül az utolsó
Példa: Egy táblázat formázása pseudo-class-ok használatával
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |

Kijelölés attribútum alapján¶
A HTML elemeket attribútumaik alapján is ki tudjuk jelölni CSS-ben. A két legalapvetőbb szelektortípus erre a célra:
E1[attr]: kijelöli az összes olyanE1-et, amely rendelkezik azattrattribútummalE1[attr="val"]: kijelöli az összes olyanE1-et, amelynekattrattribútumának értékeval.
Példa: Az a[target] szelektor kijelöl minden olyan hivatkozást, amely rendelkezik a target attribútummal. Az a[target="_blank"] azokat a hivatkozásokat jelöli ki, amelyek target attribútumának értéke _blank.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |

Kijelölés állapot alapján¶
A CSS arra is biztosít lehetőséget, hogy állapotuk alapján jelöljünk ki HTML elemeket. Az ilyen kijelöléseket pseudo-class-ok segítségével fogjuk megvalósítani.
Az állapot alapján történő kijelölésre talán a legszemléletesebb példa a hivatkozások (linkek) állapotai. Egy hivatkozásnak összesen 4 állapota lehet, amelyekre a következőképpen hivatkozhatunk CSS-ben:
:link: még nem kerestük fel a hivatkozott célt:visited: már felkerestük a hivatkozott célt:hover: a kurzor a hivatkozás fölött áll:active: a hivatkozás aktív (amikor rákattintunk).
Figyelem
Ahhoz, hogy a fenti szelektorok mindegyike hatásos legyen...
- ...a
:hover-nek a:linkés:visitedután kell szerepelnie - ...az
:active-nak a:hoverután kell szerepelnie a kódban.
Példa: Hivatkozások formázása állapot alapján (A kód működése kipróbálható itt)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
A fenti pseudo-class-ok közül a :hover és az :active nem csak hivatkozásokra, hanem minden HTML objektumra használható.
Egyéb CSS formázások¶
A text-decoration tulajdonság¶
Észrevehettük, hogy a hivatkozásokat (linkeket) a böngészők általában kék betűszínnel, aláhúzva jelenítik meg. Ezt persze bármikor ízlésünkre szabhatjuk: a színt átállíthatjuk, illetve a link dekorációját (az aláhúzást) is szabályozhatjuk a text-decoration CSS tulajdonsággal.
A text-decoration-nek rendre 3 paramétert adhatunk meg:
- a szövegdekoráció fajtáját (kötelező megadni):
- lehetséges értékek:
underline(aláhúzott),overline(vonal az elem fölött),line-through(áthúzott),none(nincs vonal),initial(alapértelmezett érték)
- lehetséges értékek:
- a vonal stílusát (opcionális):
- lehetséges értékek:
solid(folytonos),dashed(szaggatott),dotted(pontozott),wavy(hullámos)
- lehetséges értékek:
- a vonal színét (opcionális).
A text-decoration tulajdonság egyébként nem csak hivatkozásokra, hanem tetszőleges szövegelemre is alkalmazható.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |

Listák formázása¶
Az előző fejezetben megismerkedtünk a rendezetlen és rendezett listákkal. Az alábbi táblázatban összefoglaljuk a listákkal kapcsolatos fontosabb CSS formázásokat.
| CSS tulajdonság neve | Szerepe | A tulajdonság értéke |
|---|---|---|
list-style-type |
listajel módosítása | - Rendezetlen listák esetén: disc (teli karika), circle (üres karika), square (teli négyzet), none (nincs listajel) - Rendezett listák esetén: decimal (arab szám), lower-roman/upper-roman (római szám), lower-alpha/upper-alpha (kisbetű/nagybetű), none (nincs listajel) |
list-style-image |
kép beállítása listajelként | A kép elérési útvonalát az url('elérési_útvonal') segítségével adjuk meg |
list-style-position |
felsorolásjelek pozíciójának beállítása | - outside: a felsorolás függőleges vonalába a felsorolt tartalom kerül - inside: a felsorolás függőleges vonalába a listajelek kerülnek |
Táblázatok formázása¶
A HTML táblázatokra, azok soraira és celláira is használhatók a korábban tanult háttér- és szövegformázások, valamint a térközre, margóra és szegélyre vonatkozó utasítások.
A táblázatnak és annak celláinak a már jól ismert border tulajdonsággal adhatunk szegélyt. Alapértelmezett módon a táblázat szegélyei és a cellák szegélyei el vannak választva egymástól, ezért úgy tűnhet, mintha a táblázatban mindenhol dupla szegélyek lennének. A border-collapse: collapse utasítással ezek a szegélyek összevonhatók.
A táblázatnak a szokásos módon megadhatjuk a szélességét és magasságát (width és height tulajdonságok), valamint a vízszintes margók értékének auto-ra állításával vízszintesen középre igazíthatjuk a táblázatot az oldalon belül.
Ha egy táblázat rendelkezik címmel (amit a <caption> taggel adunk meg), akkor ez a cím alapértelmezett módon a táblázat fölött jelenik meg. A caption-side: bottom utasítással viszont áthelyezhető a táblázat alá.
A vertical-align: middle utasítással egy táblázatcella tartalmát függőlegesen középre igazíthatjuk. A tartalom vízszintes igazítására a korábban tanult text-align tulajdonságot használjuk.
Példa: Egy táblázat formázása
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | |

A CSS öröklődés¶
CSS-ben létezik öröklődés, ami azt jelenti, hogy egy objektum bizonyos CSS tulajdonságait örökölhetik az objektum gyerekei. Ennek köszönhetően bizonyos tulajdonságokat elegendő csak egyszer definiálnunk a szülő objektumra, és ekkor a gyerekek is automatikusan megöröklik ezeket.
Fontos megjegyezni viszont, hogy nem minden CSS tulajdonság örökölődik! Az alábbi táblázat összefoglalja a fontosabb öröklődő, illetve nem öröklődő tulajdonságokat.
| Öröklődő CSS tulajdonságok | Nem öröklődő CSS tulajdonságok |
|---|---|
color, font-family, font-size, font-weight, list-style, text-align, text-indent, text-transform, visibility, white-space, word-space, letter-spacing, line-height, ... |
background, border, display, float, width, height, margin, outline, overflow, padding, position, text-decoration, vertical-align, z-index, ... |
Amennyiben egy nem öröklődő CSS tulajdonságot mégis örököltetni szeretnénk, akkor ezt az inherit speciális értékkel tehetjük meg.
Példa: A font-family és color tulajdonságok automatikusan öröklődnek, viszont a border már nem. Ha a szegélyt is örököltetni szeretnénk, használjuk az inherit kulcsszót!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |

A CSS rangsor¶
Felmerülhet a kérdés, hogy ha egy objektumra több, egymásnak ellentmondó CSS formázást adunk ki (pl. egy bekezdés színét kékre, majd később pirosra szeretnénk állítani), akkor ezek közül vajon melyik stílus lesz érvényes.
Pontosan erre ad választ a CSS rangsor, amely különböző prioritásértékeket rendel az egyes formázásokhoz, és ezek alapján dönti el, hogy végül melyik formázás fog érvényesülni. A prioritások a következőképpen alakulnak (legerősebbtől a leggyengébbig):
!importantkulcsszóval megadott formázások- inline CSS (a tagek
styleattribútumaként adjuk meg) - id szelektorral megadott formázások
- class szelektorral vagy attribútum alapján történő kijelöléssel megadott formázások
- elem szelektorral megadott formázások.
Példa: Az alábbi kódban az első bekezdés piros (hiszen a #first id szelektor erősebb, mint a .blue class szelektor), a második kék (hiszen az inline CSS erősebb, mint az id szelektor), a harmadik pedig narancssárga betűszínű lesz (hiszen az !important kulcsszóval megadott formázás a legerősebb)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |

Megjegyzés
A felhasználó által !important kulcsszóval definiált formázások erősebbek, mint a webfejlesztők által ugyanezzel a kulcsszóval megadott stílusok. Ugyanakkor a felhasználó által definiált egyéb stílusok önmagukban nem erősebbek, mint a webfejlesztők által definiáltak.
Az összetett szelektoroknál - tehát azoknál a szelektoroknál, amelyek több részszelektorból épülnek fel - a részszelektorok prioritásai összeadódnak. Az így kapott összeg lesz a teljes szelektor prioritása.
Példa
Legyen az elem szelektor prioritása 1, a class szelektor prioritása 10, az id szelektoré pedig 100. Ekkor a #main .container div p összetett szelektor prioritása: 100+10+1+1 = 112.
Ha az eddigi szabályok alapján nem dőlt el a rangsor, akkor a kódban később szereplő formázás lesz az érvényes.
Helyzetmegadás¶
Egy weboldal elrendezésének kialakításakor gyakran előfordul, hogy meg akarjuk változtatni bizonyos objektumok alapértelmezett pozícióját. Erre szolgál CSS-ben a pozicionálás és helyzetmegadás.
A position tulajdonság¶
A HTML objektumok pozícióját a position CSS tulajdonsággal adhatjuk meg. Értékei:
static: a normál szövegfolyamban lévő hely, a pozicionálásoknak nincs hatása (alapértelmezett)relative: a normál szövegfolyambeli helyéhez képest elmozdítja az elemet a kért mértékbenabsolute: a legközelebbi, nem static helyzetű ősobjektum belső széléhez (vagy ilyen ős hiányában a viewport széléhez) képest pozicionálfixed: az elem gördítéskor is rögzített helyen marad.
Az elemek függőleges pozicionálására a top és bottom, míg vízszintes pozicionálásra a left és right CSS tulajdonságokat használhatjuk. A static módon pozicionált elemek esetén ezeknek az utasításoknak nincs hatása!
Példa: A position tulajdonság használata (A kód működése kipróbálható itt)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
A fenti példa magyarázata:
- Az
absolutemódon pozicionált, "Első" feliratú elem az őt beágyazó legközelebbi, nemstatic(hanem jelen esetbenrelative) helyzetű elem (ez most aclass="container"attribútumú<div>) jobb felső sarkához igazodik. - A "Második" feliratú elem alapértelmezés szerint
statichelyzetű, így a pozicionálásnak nincs hatása. - A
fixedhelyzetű, "Harmadik" feliratú elem gördítéskor is rögzített helyen marad.
Tipp
Manapság gyakran szokták használni a sticky kulcsszót is elemek pozicionálása során. Erről itt olvashatunk részletesebben.
Úsztatás¶
A float CSS tulajdonsággal lehetőségünk van elemek úsztatására. Ekkor az úsztatott elemet a tartalom a másik irányból körbefutja (tehát például ha balra úsztatunk egy elemet, akkor jobbról fogja őt körbefutni a tartalom). A tulajdonság lehetséges értékei: left (balra úsztatás), right (jobbra úsztatás), none (nincs úsztatás).
Példa: Egy kép balra úsztatása (A felhasznált kép forrása)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |

Ha meg szeretnénk akadályozni egy objektum körül egy másik, úsztatott objektum elhelyezését, akkor ezt a clear CSS tulajdonsággal tudjuk megtenni. Lehetséges értékei: left (balról nem lehet úsztatott elem), right (jobbról nem lehet úsztatott elem), both (sem balról, sem jobbról nem lehet úsztatott elem), none (balról és jobbról is lehet úsztatott elem).