[[:oktatas:web:css|< CSS]]
====== CSS ======
* **Szerző:** Sallai András
* Copyright (c) 2011, Sallai András
* Szerkesztve: 2011-2024
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== Bevezetés =====
A **CSS** a **Cascading Style Sheets** betűszavaiból alkotott mozaikszó.
Magyarul **Lépcsős stíluslapok** néven fordítható.
A CSS egy egyszerű mechanizmus amellyel stílust
(pl.: fontok, színek, helyek) határozhatunk meg webes dokumentumainkhoz.
A CSS legelterjedtebb használata a weboldalak alakításánál legismertebb.
A webet Tim Berners-Lee eredetileg is úgy tervezte, hogy szétválasszák a szerkezetet és a kinézetet meghatározó elemeket. A kezdeti böngészők
viszont erre nem voltak képesek. Kezdetben a HTML elemekkel
adtak stílusinformációkat a weblapokhoz, ami sokáig nem is változott.
**Tim Berners-Lee** 1990 év, második felében
elkészítette az első böngészőt, amit WorldWideWeb-nek
nevezett el, majd később átnevezték Nexus névre.
A böngésző NeXTSTEP operációs rendszerre készült.
**Marc Andreessen** és **Eric Bina** az NCSA-nál fejleszteni
kezdik a Mosaic böngészőt Unix operációs rendszeren,
X Window System felületre, ekkor még xmosaic a neve.
Az első kiadás 1993-01-23-án készült el. A Mosaic
böngészőt később portolják AmigaOS, OpenVMS,
Classic Mac OS, MS Windowsra.
1994 október 10-én, **Hákon Wium Lie** közzétette **lépcsőzetes stíluslapok** nevű **nyelvet**.
1994 október 13 Marc Andreessen bejelenti a Mosaic böngésző támogatja a lépcsőzetes
stíluslapokat, amely kezdetben csak a középre igazítást támogatja.
A Mosaic-ból későbbi tovább fejlesztés eredményeképpen
létrejön a Netscape böngésző. A Mosaic-ot közben (1995) megvásárolja a Microsoft, akik
Internet Exploler nevű böngészőt hozzák belőle létre.
Mára a böngészők CSS képessége messze túlhaladja a HTML elemekkel
lehetséges stílusbeállításokat.
===== Stíluslapkészítés =====
A CSS használata során, elsőként meg kell adnunk melyik HTML elem
tulajdonságait akarjuk beállítani, vagyis választanunk kell egy szelektort.
A szelektorhoz egy vagy több tulajdonság-értékpárt rendelünk.
Szelektor lehet például a h1 elem, ha h1 fejezet címmel meghatározott
tartalomra szeretnék stílust meghatározni. Magát a stílusinformációt
kapcsos zárójelek közzé teszem. Pl.:
szelektor {
tulajdonság1: érték1;
tulajdonság2: érték2;
}
Láthatjuk, hogy a kapcsos zárójelen belül a tulajdonságok és az értékek
között kettőspont (:) szerepel szeparátorként. Minden tulajdonság-érték
párt pontosvesszővel (;) zárunk.
CSS-t több szereplő is megadhat.
A CSS lehet
* **Szerzői**
* a webmester beállításai
* **Felhasználói**
* a felhasználó saját beállításai
* **Kliens**
* a böngésző beállításai
Mi a szerzői stíluslapokkal foglalkozunk.
A szerzői stíluslapokat három módon köthetjük HTML dokumentumunkhoz:
* **Inline**
* attribútum stílus
* helyben felülírva a általános stílus
* **Internal**
* tag stílus
* beágyazva a dokumentumba
* **External**
* külső stílus
* fájl a dokumentumból hivatkozva
Ebben az írásban előnyben részesítjük az External módon megadott CSS-t.
Externál stílusmeghatározásnál a stílusinformációk
k**ülön állományban** vannak. A HTML dokumentumban csak
egy hivatkozást teszünk rá. Ez a legelőnyösebb, ha
egy több HTML oldalból álló webhelyet akarunk készíteni.
Ha változtatni akarunk weblapjaink stílusán csak egyetlen
helyen kell a változtatást megtenni.
A stílusinformációkat tartalmazó állomány kiterjesztése:
.css
Ha csak egy ilyen állományunk van szokásos neve:
style.css
A HTML oldalon, a head elemek közzé kell elhelyezni a hivatkozást
egy link elem segítségével:
A HTML5 esetén nem kötelező a type attribútum használta.
Újabban, már ebben a formában is illeszthetünk stílusinformációkat tároló állományokat:
===== Szelektor =====
Fentebb már láttuk, hogy a szelektorral válasszuk ki, melyik
HTML elemre szeretnénk beállítani stílust.
Ha van egy H1 elemünk, akkor:
h1 {
/* ide jön a stílus információ */
}
Vagy H2 elemek esetén:
h2 {
/* ide jön a stílus információ */
}
Egyszerre felsorolhatunk több HTML elemet is, vesszővel tagolva:
h1, h2, h3 {
/* ide jön a stílus információ */
}
Mi van akkor ha több h2, vagy p elemünk van, de csak az
egyikre szeretnénk stílusinformációt beállítani?
Ekkor a HTML kódban azonosítót, vagy osztályt rendelünk
a kívánt elemhez.
Nézzünk egy példát h2 elemmel, ahol osztályt
állítok be "egyik" néven:
A CSS kódban, ezek után így hivatkozhatok rá:
Valami
h2.egyik {
/* ide jön a stílus információ */
}
Az elem neve után (h2) egy (.) pontot írunk, majd jön az osztály neve.
A HTML elemek számára azonosítót is megadhatunk.
A következő példában a h2 elem az "egyik" nevű azonosítót kapja.
A CSS kódban, ezek után így tudunk rá hivatkozni:
Valami
h2#egyik {
/* ide jön a stílus információ */
}
Leírjuk a HTML elem nevét (h2, majd (#) kettőskereszt után jön az azonosító neve.
A class és az id között az a különbség, hogy egy id attribútum értéke,
egy weblapon belül csak egyszer szerepelhet, az osztály neve
többször is szerepelhet.
Ha CSS kódban azonosítóra vagy osztálynévre hivatkozom,
a HTML elem neve elhagyható.
.egyik {
/* ide jön a stílus információ */
}
#masik {
/* ide jön a stílus információ */
}
===== Szöveg igazítása =====
A szöveg igazítását h1 elem tartalmán nézzük meg.
Szeretném a h1 elemek között elhelyezett főcímünk
középre legyen igazítva. Szelektornak adjuk meg az elem nevét,
ami esetünkben h1:
h1 {
}
A szöveg igazítását a text-align tulajdonsággal lehet
állítani, középre igazításhoz a center értéket adjuk meg:
h1 {
text-align: center;
}
==== Próba ====
Próbáljuk ki az alábbi szövegen az igazítás változtatását.
h1 {
color: blue;
}
Próbálja ki az alábbi szöveg színezését. A szín választása után, kattintsunk a
a színválasztón kívül.
background-color:#990000;
Próbálja ki az alábbi szöveg hátterének színezését.
background-image: url(hatter.png);
Egy lehetséges háttérkép:
{{:oktatas:web:css:virag2.png|}}
==== Ismétlés ====
Az ismétlést a backgorund-repeat tulajdonsággal állítjuk.
background-repeat: repeat-x;
Próbáljuk ki az ismétlési lehetőségeket:
body {
background-position: right;
}
Egyszerre két értéket is beállíthatok, de ennek csak akkor van értelme, ha a background-repeat tulajdonság például no-repeat;
body {
background-repeat: no-repeat;
background-position: right top;
}
body {
background-size: cover;
}
| auto | Alapértelmezett érték. Eredeti méret mutatása. |
| hosszz | Szélesség beállítása. Ha van második \\ paraméter is, akkor az magasság. |
| százalék | Szélesség és magasság. Az első szélesség, \\ a második magasság. |
| cover | Átméretezi a háttérképet, hogy kitöltse az egész \\ tárolót, még akkoris ha le kell vágni a képből. |
| contain | A kép legyen teljesen látható. |
| initial | Alapértelmezett érték beállítása. |
| inherit | Örökölt méret. |
body {
background-image: url(kep001.jpg), url(kep003.jpg);
background-size: 50px 50px;
background-repeat: repeat-x, repeat-y;
}
A példában az egyiket vízszintesen, másikat függőlegesen ismételtük.
body {
background-image:
url(kep001.jpg),
url(kep003.jpg);
background-size: 50px 50px;
background-repeat: no-repeat, no-repeat;
background-position: left top, right top;
}
@charset "";
UTF-8 kódolás beállítása:
@charset "UTF-8";
===== Font =====
==== Stílus ====
body { font-style: italic; } /* normal, italic, oblique, inherit */
Italic:
body {
/* normal, bold, bolder, lighter, 100, 200, 300, ..., 900, inherit */
font-weight: bold;
}
==== Méret ====
div { font-size: 0.8rem; }
^ font-size ^^
| medium | Alapértelmezett érték. |
| xx-small | |
| x-small | |
| small | |
| large | |
| x-large | |
| xx-large | |
| smaller | Kisebb mint a szülőé |
| larger | Nagyobb mint a szülőé |
| hossz | Hossz számmal, mértékegységgel |
| százalék | Százalékos megadás |
Mértékegységnek ajánlott a px helyett a **rem** vagy az **em** használata. Ha px-t használunk az akadálymentesítést nehézségekbe ütközhet. A példa kedvéért a Google Chromban, a "Beállítások" között, vegyük a "Megjelenítés"-t és a "Betűméret"-t. Ha valaki beállítja "Nagyon nagy"-ra, px esetén nem történik semmi. Ha maradunk a rem mértékegységnél: 1rem a **gyökér elem** (html) aktuális méretét jelenti. Ez alapértelmezetten **16px** szokott lenni a böngészőkben.
==== Fontcsalád ====
font-family: serif;
^ Fontcsalád ^ Megjelenés ^ Leírás ^
| serif | serif | Talpas fontok |
| sans-serif | sans-serif | Talpatlan fontok |
| monospace | monospace | Fix betűszélességű fontok |
| cursive | cursive | Kurzív fontok |
| fantasy | fantasy | Fantázia fontok |
body {
font: italic bold 14px Arial, Helvetica, sans-serif;
}
==== Fontvariációk ====
font-variant: small-caps;
| normal | Normál font. Alapértelmezett |
| small-caps | Kis-kapitális |
| inherit | A szülőelemtől örökölt fontvariáció |
A kis-kapitális beállítás hatására minden betű nagybetűs lesz, de
a normál betűmagasságtól kisebb méretű, kivéve az első betű magassága.
/* kis-kapitális */
font-variant-caps: small-caps;
/* minden betű kis-kapitális méretű nagybetű */
font-variant-caps: all-small-caps;
* https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-caps (2021)
Minta a **font-variant: small-caps;** beállításra:
body {
text-decoration: underline;
}
Lehetséges értékei
| none |
| underline |
| overline |
| line-through |
| underline overline |
szöveg - text-decoration: underline
szöveg - text-decoration: overline
szöveg - text-decoration: line-through
szöveg - text-decoration: underline overline
szöveg - text-decoration: underline overline wavy blue;
body {
text-decoration-line: underline;
}
==== Árnyék ====
body {
text-shadow: 5px 5px 3px #222222;
}
==== Dekorációs színe ====
p {
text-decoration: underline;
text-decoration-color: red;
}
==== A dekoráció stílusa ====
div {
text-decoration-style: solid;
}
^ text-decoration-style ^^
| solid | Alapértelmezett |
| double | Dupla vonal |
| dotted | Pontozott vonal |
| dashed | Szaggatott vonal |
| wavy | Hullám |
Lorem ipsum - text-decoration-style: solid;
Lorem ipsum - text-decoration-style: double;
Lorem ipsum - text-decoration-style: dotted;
Lorem ipsum - text-decoration-style: dashed;
Lorem ipsum - text-decoration-style: wavy;
==== A white-space karakterek viselkedése ==== | normal | A whitespacek összvonása. A sordobozt kitölti. | | pre | Csak ott lesz sortörés, ahol a forrásban is sortörés van. Közök nem lesznek összevonva | | nowrap | Közök összevonása. Szövegen belül nincs sortörés | | pre-wrap | Közök nem lesznek összevonva. Sortörés, ahol forrásban is van, vagy ahol a sordoboz kitöltése megköveteli. | | pre-line | Közök összevonása. Sortörés, ahol a forrásban új sor kezdődik, vagy ahol a sordoboz kitöltése megköveteli. | ===== Keret tulajdonságok ===== A keret vagy szegély a border tulajdonsággal szabályozható. ==== A border csoportos beállítással ====
.doboz {
border: 2px solid black;
}
Az első a szegély vastagsága, a második a stílusa, a harmadik a színe.
==== A border-style ====
border-style: solid;
Lehetséges értékei
* none
* dotted
* dashed
* solid
* double
* groove
* ridge
* inset
* outset
.container {
width: 200px;
height: 200px;
display: inline-block;
background-color: lightblue;
border: 2px solid blue;
}
==== Maximális szélesség ====
.container {
max-width: 600px; /* Maximum szélesség 600 pixel */
margin: 0 auto; /* Középre igazítás */
padding: 20px; /* Belső margó */
background-color: lightblue; /* Háttérszín */
border: 2px solid blue; /* Keret */
}
Példa a max-width használatra
Ez a konténer maximum 600 pixel széles lesz.
A tartalom automatikusan igazodik a maximális
szélességhez.
Próbáld ki szélesebbre húzva az ablakot, hogy
lásd a max-width hatását!
Próbaverzió:
* https://szit.hu/m/maxwith/
===== Dobozmodell =====
Minden HTML elemet doboznak tekintünk.
{{:oktatas:web:css:dobozmodell.png|}}
A dobozok jellemzői:
* Minden doboznak lehet szöveges tartalma, vagy lehet benne egy másik doboz.
* Minden doboz szövegének állíthatjuk a színét, nagyságát, fontját.
* Minden doboz háttérét beállíthatjuk, színnel, képpel.
* Minden doboznak kezelhetjük a szélességét és magasságát.
* Minden doboznak van szegélye.
* Minden doboznak állíthatunk belső margót (a tartalom és a doboz belső széle közötti távolság).
* Minden doboznak van margója.
* A dobozok tulajdonságát külön tudjuk állítani, felül, alul, jobbra és balra.
{{:oktatas:web:css:dobozfelepites.png|}}
A CSS2-ben a doboz kapott egy körvonalat a szegély köré.
{{:oktatas:web:css:dobozfelepites_v2.png|}}
==== Margó ====
.doboz {
margin: 10%;
background-color: blue;
color: white;
}
.doboz {
padding: 30px;
background-color: blue;
color: white;
}
overflow: hidden;
A hidden érték esetén a túlfolyt szöveg egyszerűen eltűnik.
overflow: scroll;
overflow: none;
Az alapértelmezett "none" érték esetén a szöveg túlfolyik ha nem fér el a dobozban:
overflow-x: hidden;
overfloa-y: hidden;
^ Érték ^ Leírás ^
| visible | A tartalmat nem bántjuk a görgető sáv a dobozon kívül lesz. |
| hidden | A tartalom nyírva lesz, a görgető sáv rejtve |
| scroll | A tartalom nyírva lesz, a görgető sáv megjelenik |
| auto | A görgetősáv megjelenése a tartalomtól függ |
| no-display | Ha a tartalom nem tölti ki a dobozt, akkor doboz törölve lesz. |
| no-content | Ha a tartalom nem tölti ki a dobozt, akkor tartalom elrejtésre kerül |
Csak függőleges scroll:
overflow-y: scroll;
ul {
list-style-type: circle;
}
* disc
* circle
* square
* decimal
* lower-roman
* upper-roman
* lower-alpha
* upper-alpha
* none
ul.a {
list-style-type: circle;
}
ul.b {
list-style-type: square;
}
ol.c {
list-style-type: upper-roman;
}
ol.d {
list-style-type: lower-alpha;
}
Próbálja ki a következő beépített HTML részlettel:
ul {
list-style-image: url(listajel.png);
}
==== list-style-position ====
ul {
list-style-position: inside;
}
* inside
* outside
Az inside esetén a lista előtti alakzatot a lista tartalmazza. Az outside esetén azon
kívül van. Ez a gyakorlatban úgy látszik, hogy outside esetén egy kicsit előrébb
kezdődik, mint egy inside elrendezéssel formázott lista.
===== Megjelenítés =====
A dobozok megjelenését két tulajdonsággal lehet szabályozni:
* visibility
* display
h1.hidden {
visibility:hidden;
}
A visibility:hidden elrejti az elemet, de az elem helye **megmarad**.
h1.hidden {
display:none;
}
A display:none viszont teljesen **törli** a szövegfolyamból az elemet.
==== A block és az inline elemek ====
Egy **blokkelem** kitölti a rendelkezésre álló **teljes szélességet**,
a következő elem már új sorban fog megjelenni.
Blokk elemekre példa:
* *