8.2. fejezet¶
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 | |

Note
Megfigyelhetjük a fenti táblázatban, hogy nagy általánosságban igaz, hogy a szöveggel kapcsolatos tulajdonságok öröklődnek. Ez alól persze vannak kivételek, de első megközelítésként ez egy jó irányelv lehet.
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.
További CSS szelektorok¶
Korábban 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 | |
Megjegyzés
Az nth-child, nth-of-type esetében meg lehet adni bonyolultabb kifejezéseket is (pl. nth-child(3n+1)),
illetve rövidítéseket is (pl. nth-child(odd), nth-child(even)).

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...
1 2 | |
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ó.