3. modul · CSS alapok · 16. lecke
Egy weboldal kilencven százaléka szöveg. Ha a szöveg jól olvasható, az oldal jónak tűnik — akkor is, ha egyébként egyszerű. Ebben a leckében megtanulod a színek megadását és a betűk beállítását: típus, méret, vastagság, sortáv, igazítás.
opacity tulajdonság.px, em és rem közti különbséget.Két tulajdonsággal kezdünk, és ezeket kezdők gyakran összekeverik:
| Tulajdonság | Mit színez? |
|---|---|
color | A szöveget (és alapból a keretet, ha annak nincs saját színe) |
background-color | Az elem hátterét — az egész dobozt, a szöveg mögött |
<p class="csak-szoveg">Csak a szöveg színes.</p> <p class="csak-hatter">Csak a háttér színes.</p> <p class="mindketto">Szöveg és háttér is.</p>
.csak-szoveg {
color: #be123c;
}
.csak-hatter {
background-color: #fde68a;
}
.mindketto {
color: white;
background-color: #be123c;
}
p blokkszintű elem (11. lecke) — a doboza
kitölti a rendelkezésre álló helyet.
Ha háttérszínt adsz meg, mindig gondold végig a szövegszínt is — és fordítva. Egy sötét háttér az alapértelmezett fekete szöveggel olvashatatlan. A kettő együtt határozza meg, hogy látszik-e a tartalom.
Ugyanazt a színt többféleképpen is leírhatod. Mind a négy jelölés teljesen egyenértékű — a böngésző ugyanazt a színt rajzolja belőlük.
| Jelölés | Példa | Mikor jó? |
|---|---|---|
| Név | crimson, white |
Gyors próbához. Kb. 140 név van, de a pontos árnyalatot nem te választod. |
| Hex | #dc143c |
A leggyakoribb. Ezt adják a tervezőprogramok és a színválasztók. |
| RGB | rgb(220 20 60) |
Ha átlátszóság is kell (3. pont), vagy számokkal gondolkodsz. |
| HSL | hsl(348 83.3% 47.1%) |
Ha árnyalatokat akarsz készíteni egy színből — ez a legemberibb jelölés. |
<p class="nev">név: crimson</p> <p class="hex">hex: #dc143c</p> <p class="rgb">rgb(220 20 60)</p> <p class="hsl">hsl(348 83.3% 47.1%)</p>
p {
color: white;
padding: 6px 10px;
margin: 4px 0;
}
.nev { background-color: crimson; }
.hex { background-color: #dc143c; }
.rgb { background-color: rgb(220 20 60); }
.hsl { background-color: hsl(348 83.3% 47.1%); }
A #dc143c hat karaktere három párból áll: vörös, zöld és
kék. Minden pár egy tizenhatos számrendszerbeli szám 00-tól
(semmi) ff-ig (teljes erő, vagyis 255).
| Hex | Szín |
|---|---|
#000000 | fekete — semmi fény |
#ffffff | fehér — minden szín teljes erővel |
#ff0000 | tiszta vörös |
#808080 | középszürke — a három egyforma, ezért szürke |
#f00 | rövid alak: ugyanaz, mint a #ff0000 |
Senki nem ír fejből hex kódot. VS Code-ban állj rá egy színkódra, és megjelenik mellette egy színes négyzet — rákattintva színválasztó nyílik. A lényeg, hogy felismerd: ha a három pár közel azonos, szürkés a szín; ha az első pár a legnagyobb, vöröses.
A HSL három száma úgy írja le a színt, ahogy egy ember gondolkodik róla:
| Érték | Jelentése |
|---|---|
| H — színárnyalat | Fok a színkörön, 0–360: 0 vörös, 120 zöld, 240 kék |
| S — telítettség | 0% szürke, 100% harsány |
| L — világosság | 0% fekete, 50% a tiszta szín, 100% fehér |
<p class="s1">L = 20%</p> <p class="s2">L = 35%</p> <p class="s3">L = 50%</p> <p class="s4">L = 75%</p> <p class="s5">L = 92%</p>
p {
padding: 5px 10px;
margin: 3px 0;
}
.s1 { background-color: hsl(348 83% 20%); color: white; }
.s2 { background-color: hsl(348 83% 35%); color: white; }
.s3 { background-color: hsl(348 83% 50%); color: white; }
.s4 { background-color: hsl(348 83% 75%); }
.s5 { background-color: hsl(348 83% 92%); }
Az RGB és a HSL jelölésnek van egy negyedik, opcionális értéke: az átlátszóság, angolul alpha. Perjellel választod el, és 0 (teljesen átlátszó) és 1 (teljesen fedő) között adod meg — vagy százalékban.
background-color: rgb(190 18 60 / 0.5); /* 50% átlátszó */ background-color: hsl(348 83% 47% / 20%); /* 20%-ban fedő */ background-color: rgba(190, 18, 60, 0.5); /* régebbi írásmód, ugyanaz */
Van egy külön tulajdonság is, az opacity, ami szintén átlátszóvá tesz.
A különbség kulcsfontosságú:
<div class="minta">
<p class="alpha">
Átlátszó HÁTTÉRSZÍN — a szöveg éles.
</p>
<p class="opacity">
OPACITY — a szöveg is elhalványul.
</p>
</div>
.minta {
padding: 10px;
background-image: repeating-linear-gradient(
45deg, #fde68a 0 12px, #fef3c7 12px 24px);
}
.alpha, .opacity {
color: white;
font-weight: bold;
padding: 10px;
}
.alpha {
background-color: rgb(190 18 60 / 0.5);
}
.opacity {
background-color: rgb(190 18 60);
opacity: 0.5;
}
rgb(… / 0.5)): csak az adott szín lesz átlátszó.opacity tulajdonság: az egész elem átlátszó lesz — a szövegével, a képeivel és az összes gyerekével együtt.
Ha csak egy halvány háttér kell, használj átlátszó színt. Az opacity
tulajdonság akkor jó, ha az egész elemet akarod elhalványítani — például egy letiltott
gombot vagy egy képet, ami fölé viszed az egeret (23. lecke).
A legszebb színpár is rossz, ha nem lehet elolvasni a szöveget. A kontraszt a szöveg és a háttér világosságának különbsége — minél nagyobb, annál könnyebb olvasni.
<p class="rossz1">Világosszürke fehéren — 2,2 : 1</p> <p class="rossz2">Sárga fehéren — 1,5 : 1</p> <p class="rossz3">Piros zöldön — 1,4 : 1</p> <p class="jo1">Sötétszürke fehéren — 7,6 : 1</p> <p class="jo2">Fehér bordón — 6,3 : 1</p>
p {
padding: 6px 10px;
margin: 4px 0;
}
.rossz1 { color: #b0b0b0; background-color: white; }
.rossz2 { color: #facc15; background-color: white; }
.rossz3 { color: #e11d48; background-color: #16a34a; }
.jo1 { color: #4b5563; background-color: white; }
.jo2 { color: white; background-color: #be123c; }
A kontrasztot aránnyal mérik, 1 : 1-től (nincs különbség) 21 : 1-ig (fekete a fehéren). A nemzetközi akadálymentességi ajánlás (WCAG) szerint:
F12 → jelölj ki egy szöveges elemet → a Styles panelen kattints a
color tulajdonság melletti kis színes négyzetre. A felugró
színválasztó kiírja a kontrasztarányt, és pipával vagy figyelmeztető jellel jelzi,
megfelel-e. Nem kell külön programot telepítened.
Minden tizenkettedik férfi valamilyen mértékben színtévesztő, a leggyakrabban a pirosat és a zöldet keverik. Ha egy hibaüzenetet csak a piros szín jelez, sokan nem veszik észre. Tegyél mellé szöveget, ikont vagy keretet is.
A betűtípust a font-family tulajdonság adja meg. Van azonban egy fontos
buktató: a böngésző csak olyan betűtípust tud használni, ami telepítve van a látogató
gépén (vagy amit letöltetsz vele — 6. pont). Ezért nem egy betűtípust adunk meg, hanem egy
listát.
body {
font-family: "Segoe UI", Roboto, Arial, sans-serif;
}
Olvasva: „Használd a Segoe UI betűtípust. Ha nincs, akkor a Roboto-t. Ha az sincs, akkor az Arial-t. Ha egyik sincs, akkor bármilyen talp nélküli betűt." Ezt a listát fontstacknek (betűtípus-veremnek) hívják.
"Times New Roman".sans-serif, nem "sans-serif".<p class="serif">serif — Árvíztűrő tükörfúrógép</p> <p class="sans">sans-serif — Árvíztűrő tükörfúrógép</p> <p class="mono">monospace — Árvíztűrő tükörfúrógép</p> <p class="rendszer">system-ui — Árvíztűrő tükörfúrógép</p> <p class="kezi">cursive — Árvíztűrő tükörfúrógép</p>
p { font-size: 18px; margin: 6px 0; }
.serif { font-family: serif; }
.sans { font-family: sans-serif; }
.mono { font-family: monospace; }
.rendszer { font-family: system-ui; }
.kezi { font-family: cursive; }
| Család | Jellemzője | Mire való? |
|---|---|---|
serif | Talpas betűk — a betűszárak végén kis „lábak" | Klasszikus, könyvszerű hangulat; hosszabb olvasmányokhoz, címekhez |
sans-serif | Talp nélküli, tiszta vonalú betűk | A weben a leggyakoribb; képernyőn jól olvasható |
monospace | Minden betű egyforma széles | Kód, táblázatos számok |
system-ui | Az operációs rendszer saját betűje | Alkalmazásszerű felületek |
cursive | Kézírásszerű | Nagyon ritkán; komoly szövegre soha |
/* modern, talp nélküli */ font-family: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; /* klasszikus, talpas */ font-family: Georgia, "Times New Roman", serif; /* kódhoz */ font-family: Consolas, "Courier New", monospace;
Magyar oldalnál mindig ellenőrizd, hogy a kiválasztott betűtípusban megvan-e az ő és az ű. Egyes betűtípusokból hiányoznak, ilyenkor a böngésző csak ezt a két betűt jeleníti meg egy másik betűtípussal — ez nagyon csúnya. A próbamondat: Árvíztűrő tükörfúrógép.
Ha olyan betűtípust szeretnél, ami nincs minden gépen, a böngészővel letöltetheted.
A legismertebb ingyenes forrás a Google Fonts (fonts.google.com).
<link> elemeket másold be a HTML <head> részébe, a saját stíluslapod elé.<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap">
<link rel="stylesheet" href="style.css">
body {
font-family: "Roboto", Arial, sans-serif;
}
Mert a webfont internetkapcsolatot igényel, és egy iskolai hálózaton könnyen elérhetetlen lehet — a példa ilyenkor „nem működne", pedig a kód jó. Otthon próbáld ki: ha a betűtípus nem töltődik le, a fontstack miatt az oldal akkor is olvasható marad, csak az Arial jelenik meg helyette.
Minden betűtípus és minden vastagság külön fájl, amit a látogatónak le kell töltenie. Egy oldalon legfeljebb két betűtípus (egy a címeknek, egy a szövegnek), és azokból is csak a ténylegesen használt vastagságok. Több betűtípus lassú és zavaros is.
A Google Fonts betöltésekor a látogató böngészője a Google szervereihez csatlakozik. Éles, európai
weboldalaknál ezért gyakran letöltik a betűfájlokat, és a saját szerverükről szolgálják
ki. Gyakorlófeladatokban nyugodtan használd a fenti <link> megoldást.
A betűméretet a font-size tulajdonság adja meg. Háromféle mértékegységgel
fogsz találkozni, és a különbségük fontosabb, mint elsőre tűnik.
| Egység | Mihez viszonyít? | Példa |
|---|---|---|
px |
Semmihez — fix méret, képpontban | font-size: 18px mindig 18 képpont |
em |
A szülő betűméretéhez | Ha a szülő 20 px, akkor 1.5em = 30 px |
rem |
A gyökérelem (html) betűméretéhez |
Ha a html 16 px, akkor 1.5rem = 24 px — mindenhol |
A böngészők alapértelmezett betűmérete 16 képpont. Ha nem változtatod meg, akkor
1rem = 16 px, 2rem = 32 px,
0.875rem = 14 px. (Az r a root, vagyis gyökér szóból jön.)
Mivel az em mindig a szülőhöz viszonyít, egymásba ágyazott
elemeknél összeszorzódik. Nézd meg:
<p><strong>em egységgel:</strong></p>
<ul class="em">
<li>Első szint
<ul class="em">
<li>Második szint
<ul class="em">
<li>Harmadik szint</li>
</ul>
</li>
</ul>
</li>
</ul>
<p><strong>rem egységgel:</strong></p>
<ul class="rem">
<li>Első szint
<ul class="rem">
<li>Második szint
<ul class="rem">
<li>Harmadik szint</li>
</ul>
</li>
</ul>
</li>
</ul>
html {
font-size: 16px;
}
.em {
font-size: 1.3em;
}
.rem {
font-size: 1.3rem;
}
em listában minden szint egyre nagyobb: 16 × 1,3 ×
1,3 × 1,3 ≈ 35 képpont a harmadik szinten. A rem listában
mindhárom szint egyforma, mert mindegyik a html elemhez
viszonyít: 16 × 1,3 ≈ 21 képpont.
rem. Kiszámítható, nem halmozódik — és ha a látogató a böngészőjében nagyobbra állítja az alapméretet (gyengénlátók teszik így), a te oldalad is vele nő.em — például egy gomb belső margójához, hogy a betűvel arányosan nőjön (17. lecke).px — egy 1 képpontos vonalnak nem kell nőnie.
A font-size: 150% ugyanúgy működik, mint az 1.5em:
a szülőhöz viszonyít, és ugyanúgy halmozódik. Betűméretnél ritkán használják.
A line-height tulajdonság a sorok magasságát adja meg. Ez az egyik
legfontosabb és legtöbbször elfelejtett beállítás: a böngésző alapértelmezett sortávja
hosszabb szövegnél zsúfolt.
<p class="szuk"><strong>1.1</strong> — A weboldalak szövegét többnyire képernyőn olvassák, ahol a szem gyorsabban fárad, mint papíron. A megfelelő sortáv segít, hogy a szem könnyen megtalálja a következő sor elejét.</p> <p class="jo"><strong>1.6</strong> — A weboldalak szövegét többnyire képernyőn olvassák, ahol a szem gyorsabban fárad, mint papíron. A megfelelő sortáv segít, hogy a szem könnyen megtalálja a következő sor elejét.</p> <p class="tag"><strong>2.4</strong> — A weboldalak szövegét többnyire képernyőn olvassák, ahol a szem gyorsabban fárad, mint papíron. A megfelelő sortáv segít, hogy a szem könnyen megtalálja a következő sor elejét.</p>
p {
font-size: 15px;
margin: 0 0 14px;
}
.szuk { line-height: 1.1; }
.jo { line-height: 1.6; }
.tag { line-height: 2.4; }
A line-height az egyik kevés tulajdonság, aminél a
mértékegység nélküli szám a helyes: line-height: 1.6.
Ez azt jelenti: „a saját betűméret 1,6-szorosa".
Miért nem 24px? Mert a sortáv öröklődik. A 24px
érték fix 24 képpontként öröklődne egy 40 képpontos címsorra is — és a sorai
egymásba csúsznának. A szám viszont arányként öröklődik, így minden betűmérethez
igazodik.
| Tulajdonság | Gyakori értékek | Mire való? |
|---|---|---|
text-align | left, center, right, justify | Vízszintes igazítás az elemen belül |
text-decoration | none, underline, line-through | Aláhúzás, áthúzás |
text-transform | uppercase, lowercase, capitalize | Kis- és nagybetűsítés — a HTML szövege nem változik |
letter-spacing | 0.05em, -0.01em | Betűköz |
text-indent | 2em | Első sor behúzása |
<p class="balra">Balra igazítva (alapértelmezés)</p> <p class="kozepre">Középre igazítva</p> <p class="jobbra">Jobbra igazítva</p> <p>Ár: <span class="regi">4990 Ft</span> 3490 Ft</p> <p class="hullam">Hullámos aláhúzás</p> <p class="felirat">Új termékek</p> <p class="nagy">minden szó nagybetűvel kezdődik</p>
p { margin: 5px 0; }
.balra { text-align: left; }
.kozepre { text-align: center; }
.jobbra { text-align: right; }
.regi {
text-decoration: line-through;
color: #9ca3af;
}
.hullam {
text-decoration: underline wavy #be123c;
}
.felirat {
text-transform: uppercase;
letter-spacing: 0.15em;
font-size: 13px;
font-weight: bold;
color: #be123c;
}
.nagy {
text-transform: capitalize;
}
A text-align: justify érték könyvekben szép, a weben viszont gyakran
nagy, egyenetlen lyukakat hagy a szavak között — különösen keskeny hasábban és
a hosszú magyar szavak miatt. Hosszabb szövegnél maradj a balra igazításnál.
A text-align: center az elem belsejében lévő szöveget és
soron belüli elemeket (képet, linket) teszi középre — magát a blokkszintű dobozt nem. Egy doboz
középre helyezése más eszközt igényel (17. és 20. lecke). Ez az egyik leggyakoribb kezdő félreértés.
A text-decoration: none érték leggyakrabban a linkeken szerepel. Emlékezz a
6. leckére: ha elveszed az aláhúzást, adj helyette más jelzést, különben senki nem
tudja, hogy az link.
Rakjuk össze az egészet. Az alábbi néhány szabály szinte bármelyik oldalnak jó kiindulópont — és jól mutatja, mennyit számít a tipográfia önmagában, egyetlen díszítőelem nélkül.
<h1>A kovászos kenyér titka</h1> <p class="lead">Három hozzávaló, egy kis türelem, és a konyhádban olyan illat lesz, mint egy pékségben.</p> <h2>Miért kovász?</h2> <p>A kovász élő kultúra: vadélesztőből és tejsavbaktériumokból áll. Lassabban kel, mint a bolti élesztő, de cserébe mélyebb ízt és tovább friss kenyeret ad.</p>
<h1>A kovászos kenyér titka</h1> <p class="lead">Három hozzávaló, egy kis türelem, és a konyhádban olyan illat lesz, mint egy pékségben.</p> <h2>Miért kovász?</h2> <p>A kovász élő kultúra: vadélesztőből és tejsavbaktériumokból áll. Lassabban kel, mint a bolti élesztő, de cserébe mélyebb ízt és tovább friss kenyeret ad.</p>
body {
font-family: "Segoe UI", Roboto, Arial, sans-serif;
font-size: 1rem;
line-height: 1.65;
color: #3a2f35;
background-color: #fdfaf6;
margin: 16px;
}
h1, h2 {
font-family: Georgia, "Times New Roman", serif;
line-height: 1.2;
color: #7f1d1d;
}
h1 { font-size: 2rem; }
h2 { font-size: 1.35rem; }
.lead {
font-size: 1.2rem;
color: #6b5a62;
}
body elemen: betűtípus, alapméret (1rem), sortáv (1,5–1,7), szövegszín (ne tiszta fekete: egy nagyon sötét szürke kellemesebb).rem egységben.| Hiba | Mi történik, és mi a megoldás? |
|---|---|
background helyett color a háttérhez |
A szöveg színeződik, nem a háttér. Háttérhez: background-color. |
Hiányzó # a hex kód elől: color: be123c |
Érvénytelen érték, a böngésző eldobja. Mindig: #be123c. |
| Szóközös betűtípusnév idézőjel nélkül | Általában működik, de hibalehetőség. Írd idézőjelbe: "Segoe UI". |
Idézőjelbe tett általános család: "sans-serif" |
A böngésző egy „sans-serif" nevű betűtípust keres, és nem a kategóriát használja. Idézőjel nélkül. |
| Nincs tartalék betűtípus a lista végén | Ha a betűtípus nincs meg, a böngésző alapértelmezett (gyakran talpas) betűje jelenik meg. |
Halmozódó em méretek |
Beágyazott elemeknél egyre nagyobb vagy kisebb lesz a szöveg. Betűmérethez: rem. |
line-height képpontban |
Fix értékként öröklődik, a nagyobb betűs címsorok sorai egymásba csúsznak. Mértékegység nélkül. |
| Gyenge kontraszt (világosszürke fehéren) | Nehezen olvasható, sokaknak láthatatlan. Legalább 4,5 : 1 — ellenőrizd F12-vel. |
text-align: center a doboz középre tételéhez |
Csak a tartalmat igazítja, a blokkszintű dobozt nem. |
| Hosszú bekezdés középre igazítva | A szem minden sor elején keresgél. Középre legfeljebb rövid címet, feliratot tegyél. |
Előbb válaszolj magadban, csak utána nézd meg a megoldást.
1. Mit színez a color, és mit a background-color tulajdonság?
A color a szöveget, a background-color az elem hátterét — a teljes dobozt a szöveg mögött.
2. Milyen szín nagyjából a #1f1f1f, és milyen a #f0f0f0? Honnan tudod?
Az első nagyon sötétszürke, a második nagyon világosszürke. A három pár mindkettőnél egyforma — ezért szürke —, és az értékük az elsőnél kicsi (közel a 00-hoz), a másodiknál nagy (közel az ff-hez).
3. Egy kártyának halvány, félig átlátszó hátteret szeretnél, de a szöveg maradjon éles. opacity: 0.5 vagy rgb(… / 0.5)?
Az átlátszó szín: background-color: rgb(… / 0.5). Az opacity tulajdonság az egész elemet halványítaná el, a szövegével és a gyerekeivel együtt.
4. Mi a hiba ebben: font-family: Segoe UI, Arial, "sans-serif";
Két dolog: a szóközös Segoe UI nevet idézőjelbe kellene tenni, a sans-serif általános családot viszont nem. Helyesen: font-family: "Segoe UI", Arial, sans-serif;
5. A html elem betűmérete 16 px. Mekkora egy font-size: 1.5em értékű elem, ha a szülője 20 px-es? És ha 1.5rem lenne?
1.5em = 1,5 × 20 = 30 px (a szülőhöz viszonyít). 1.5rem = 1,5 × 16 = 24 px (a html elemhez viszonyít, a szülő mérete nem számít).
6. Miért jobb a line-height: 1.6, mint a line-height: 26px?
Mert a sortáv öröklődik. A mértékegység nélküli szám arányként öröklődik, így minden betűmérethez igazodik. A 26px fix értékként öröklődne a nagyobb betűs címsorokra is, és azok sorai egymásba csúsznának.
7. Egy szürke szöveg fehér háttéren nehezen olvasható. Hogyan ellenőrzöd, hogy elég-e a kontraszt?
F12 → jelöld ki az elemet → a Styles panelen kattints a color tulajdonság melletti színes négyzetre. A színválasztó kiírja a kontrasztarányt. Normál szövegnél legalább 4,5 : 1 kell.
8. Egy div elemre text-align: center szabályt írtál, hogy középre kerüljön az oldalon. Nem került. Miért?
Mert a text-align tulajdonság az elem belsejében lévő szöveget és soron belüli elemeket igazítja, nem magát a blokkszintű dobozt. A doboz középre helyezéséhez más eszköz kell (17. és 20. lecke).
color = a szöveg színe · background-color = a doboz háttere. Mindig párban gondold végig.#rrggbb, a leggyakoribb), rgb, hsl (árnyalatokhoz a legkényelmesebb).rgb(… / 0.5) — csak az adott szín. Az opacity tulajdonság az egész elemet halványítja.font-family: lista (fontstack), vesszővel, a végén általános család idézőjel nélkül; a szóközös neveket idézőjelbe.<link> a head részbe, a saját stíluslap elé. Legfeljebb két betűtípus.px = fix · em = a szülőhöz, halmozódik · rem = a html elemhez, kiszámítható. Betűmérethez rem.1rem = 16 px.font-weight: 400 normál, 700 kövér — de csak ami a betűtípusban létezik.line-height: mértékegység nélkül; szövegnél 1,5–1,7, címnél 1,1–1,3.text-align a tartalmat igazítja, nem a dobozt. Hosszú szöveget balra igazíts.body elemen — a többi öröklődik.