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 olyanE2
elemet kijelöl, amely egyE1
-ben találhatóE1 > E2
minden 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 ésE1
után következik a kódbanE1 + E2
: minden olyanE2
-t kijelöl, amelyE1
-nek testvére és közvetlenülE1
utá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 azattr
attribútummalE1[attr="val"]
: kijelöli az összes olyanE1
-et, amelynekattr
attribú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:visited
után kell szerepelnie - ...az
:active
-nak a:hover
utá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):
!important
kulcsszóval megadott formázások- inline CSS (a tagek
style
attribú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
absolute
mó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
static
helyzetű, így a pozicionálásnak nincs hatása. - A
fixed
helyzetű, "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).