CSS
Az új formázási lehetőségek sokmindent lehetővé tettek, de a nyelv ezzel elvesztette az egyszerűségét, a dokumentumok a megjelenés miatt egyre bonyolultabbá és összetettebbé váltak a weboldal készítés során.A weboldalak forrásának akár több, mint a fele lehet, hogy már nem is a tartalomról, hanem a megjelenésről szólt, jelentősen megnövelve ezzel a dokumentumok méretét és komplexitását. Ezt tetőzte, hogy a szabvány kiforratlanságából, illetve a böngészőgyártók érdekkülönbségeiből adódóan a webhely tervezők kénytelek voltak a különböző böngészők sajátosságaival is szembesülni, és ezeket megkerülendő, mindenféle trükköket alkalmazni, ha szép, az elképzeléseik szerinti oldalakat szerettek volna készíteni. Nos, ezen segített megjelenésével a CSS szabvány, melyet a böngészők az utóbbi években egyre egységesebben értelmeznek, s sokkal szabadabban, rugalmasabban tudjuk vele befolyásolni HTML webolda megjelenését, mint azt korábban bármikor is tehettük (és a HTML nyelv szabványa is sokkal kiforrottabb lett, megjelent például az XHTML, továbbá sok új irányelv, ami azt írja le, hogy a dokumentumnak nem a megjelenésről, hanem a tartalomról kell szólnia, stb.). Persze a helyzet még mindig nem ideális, s egy jó ideig nem is lesz az, köszönhetően a domináns böngésző technológiai elmaradottságának, de így is egy nagyon jól használható eszközt tudhat magáénak az a fejlesztő, aki megismeri a CSS nyújtotta lehetőségeket.A technológia már viszonylag elég régóta létezik, a CSS szabvány leírása 1996. december 17-n látott napvilágot a W3C honlapján (nem ide tartozik, de jó tudni, hogy időközben hazánkban is képviseli magát a konzorcium egy irodával, és saját weblapjuk is van). A szabvány azóta több kiadást ért meg, illetve 1998. május 12-n napvilágot látott a CSS 2 szabvány leírása is (a CSS 2.1 és CSS 3 kidolgozása pedig folyamatban van, a tervek elérhetőek a W3C honlapján - pár újabb böngésző meg is valósít bizonyos dolgokat ezek közül). Fontos megemlíteni, hogy a szélesebb körben használt böngészők viszonylag nagy részét támogatják a CSS szabványnak, de azért ellenőrizni sohasem árt, hogy nem értenek-e félre valamit (mert könnyen előfordul). Azt is figyelembe általában a szabványok egy alkészletét valósítják meg, előfordulhat, hogy a CSS 2-ből már ismert sokmindent egy böngésző, viszont van olyan CSS 1 szabványbeli elem, melyet még mindig nem valósít meg.
A honlapkészítés -ben Miért CSS ?
Egy alapvető példán keresztül nézzük meg, miért lesz egyszerűbb az életünk a CSS használatával. Vegyünk egy általános oldalt, ahol több címsor és bekezdés található. Szeretnénk, ha a címsoraink betűi nagyok és sötétvörösek lennének, míg a bekezdéseink betűi kisebbek és sötétzöldek. Ezt HTML formázással a következőképpen tudjuk megvalósítani:
- <html>
- <head>
- <title>CSS példa</title>
- </head>
- <body>
- <h1><font size="4" color="#a00000">Bevezetés</font></h1>
- <p><font size="2" color="#00a000">A vers...</font></p>
- <h1><font size="4" color="#a00000">Tárgyalás</font></h1>
- <p><font size="2" color="#00a000">A költő...</font></p>
- <h1><font size="4" color="#a00000">Összefoglalás</font></h1>
- <p><font size="2" color="#00a000">Végezetül...</font></p>
- </body>
- </html>
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- h1 { font-size: 20px; color: #a00000; }
- p { font-size: 12px; color: #00a000; }
- --></style>
- </head>
- <body>
- <h1>Bevezetés</h1>
- <p>A vers...</p>
- <h1>Tárgyalás</h1>
- <p>A költő...</p>
- <h1>Összefoglalás</h1>
- <p>Végezetül</p>
- </body>
- </html>
honlapkészítés során CSS hozzákapcsolása a HTML-hez
A fentiekben egy példát láttunk, hogyan kapcsolhatjuk a CSS-t a HTML állományunkhoz, hogyan határozhatjuk meg ennek a megjelenését. Lássuk a lehetőségek listáját (melyeket szabadon, akár keverve is használni tudunk):
Beágyazott stíluslap
Ezt láthattuk a fenti példában. A stílusleírást a HTML weboldal fejlécében kell elhelyezni, style elembe ágyazva. A fenti példában HTML megjegyzésbe is tettük (<!-- ... -->), ezzel azt érjük el, hogy az olyan böngészők, amik nem ismerik a stíluslapokat, ne jelenítsék meg a stílus definíciónkat. Az így meghatározott stílus az egész dokumentumra érvényes lesz.
Külső stíluslap
A stíluslapunkat elhelyezhetjük egy külső állományban is, így lehetővé téve, hogy az több HTML állományra is érvényes legyen, s központilag szerkeszthetővé váljon (ne kelljen minden egyes HTML állományt megváltoztatnunk, ha a honlapunk ezentúl másképp jelenne meg). A külső stíluslapokra az oldal fejlécében tudunk hivatkozni, egy link elem segítségével:
- <head>
- <link rel="stylesheet" href="kulso.css" type="text/css">
- </head>
- h1 { font-size: 20px; color: #a00000; }
- p { font-size: 12px; color: #00a000; }
Elemhez rendelt stíluslap
Bár kevés alkalommal van rá szükség, de akkor jól jön, hogy az egyes HTML elemekhez helyben is tudunk stílust meghatározni. Ez nagyon hasonlít ahhoz, mintha font elemekkel határoznánk meg az adott elem megjelenését, bár nagyságrendekkel több formázási lehetőségünk van. Egy elem stílusának a meghatározásához egy style attribútumot kell hozzá felvennünk:
- <h1 style="font-size: 20px; color: #a00000;">Bevezetés</h1>
Importált stíluslap
További lehetőségünk, hogy egy stílus meghatározáson belül egy másik, külső stílus meghatározásra hivatkozzunk (erre értelem szerint a beágyazott és a külső stíluslap meghatározásoknál van módunk). Ez a következőképpen történhet:
- <style type="text/css"><!--
- @import url(http://www.honlapunk.hu/stilusok/masik.css);
- --></style>
Stílusok formátuma
Egy önálló stílus definíciós állomány, vagy egy beágyazott stílus több meghatározást tartalmazhat. Egy-egy meghatározás két részből áll, egy kiválasztó és egy tulajdonság részből. A kiválasztó rész azt határozza meg, hogy mely HTML elemekre vonatkozzon a definíció, míg a tulajdonság rész a megjelenést befolyásolja. Amikor elemhez rendelünk stílust, akkor csak a tulajdonság részt kell meghatároznunk. A következőképpen épül fel tehát egy stílusdefiníció:
- kiválasztó { tulajdonság }
- kiválasztó { tulajdonság }
- kiválasztó { tulajdonság }
- kiválasztó { tulajdonság } kiválasztó { tulajdonság }
- kiválasztó
- {
- tulajdonság
- }
- kiválasztó, kiválasztó { tulajdonság; tulajdonság; }
Kiválasztók
A kiválasztók nagyon rugalmasan használhatóak, mint azt a továbbiakban látni fogjuk egyszerű és mégis összetett módon tudjuk meghatározni, hogy mely elemekre vonatkozzanak a tulajdonságaink. Ebben a cikkben még nem mutatjuk be az összes lehetőséget, de megpróbáljuk bemutatni, hogy milyen széleskörűen tudjuk szabályozni a kiválasztást.
Elem kiválasztás
A legegyszerűbb kiválasztási lehetőséget nyújtja a számunkra, egy HTML elemet határozhatunk meg vele, amihez hozzá szeretnénk rendelni a különböző tulajdonságokat. Az eddigiekben ilyenre láthattunk példát:
- h1, h2, h3 { color: #a00f00; }
Osztály alapú kiválasztás
A HTML elemeket lehetőségünk van osztályokba sorolni. Ekkor az adott osztályba sorolni kívánt elemhez egy class tulajdonságot rendelünk hozzá, amelynek az értéke az osztálynevünk lesz. A stíluslapban ehhez az osztályhoz határozhatunk meg megjelenést. Ha szeretnénk kiemelni egyes fejezeteket a szövegünkből, pirossal megjelenítve azokat, akkor a következőképpen járhatunk el:
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- h1 { font-size: 20px; color: #a00000; }
- p { font-size: 12px; color: #00a000; }
- .fontos { color: #ff0000; }
- --></style>
- </head>
- <body>
- <h1>A cserebogarak halhatatlanságáról</h1>
- <p class="fontos">A cserebogárnak vannak lábai. Ebből...</p>
- <p>Minden cserebogárnak van lába...</p>
- <p class="fontos">A cserebogárnak vannak szárnyai is...</p>
- <p>A szárnyaival repülni tud...</p>
- <p>A halhatatlanság azt jelenti, hogy...</p>
- <h1 class="fontos">FONTOS!</h1>
- <p class="fontos">A cserebogarak halhatatlansága tehát...</p>
- </body>
- </html>
Az egyes kiválasztókat keverhetjük is, például a következő példában a fontos címsoroknak definiálunk egy háttérszínt is:
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- h1 { font-size: 20px; color: #a00000; }
- p { font-size: 12px; color: #00a000; }
- .fontos { color: #ff0000; }
- h1.fontos { background: #ffcccc; }
- --></style>
- </head>
- <body>
- <h1>A cserebogarak halhatatlanságáról</h1>
- <p class="fontos">A cserebogárnak vannak lábai. Ebből...</p>
- <p>Minden cserebogárnak van lába...</p>
- <p class="fontos">A cserebogárnak vannak szárnyai is...</p>
- <p>A szárnyaival repülni tud...</p>
- <p>A halhatatlanság azt jelenti, hogy...</p>
- <h1 class="fontos">FONTOS!</h1>
- <p class="fontos">A cserebogarak halhatatlansága tehát...</p>
- </body>
- </html>
Azonosító alapú kiválasztás
Az azonosító alapú kiválasztás nagyon hasonló az osztály alapúhoz, egy lényeges különbség van: csak és kizárólag egy elemet tudunk egy bizonyos azonosítóval megjelölni egy HTML dokumentumon belül.
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- h1 { font-size: 20px; color: #a00000; }
- p { font-size: 12px; color: #00a000; }
- #halhatatlan { color: #ff0000; }
- --></style>
- </head>
- <body>
- <h1>A cserebogarak halhatatlanságáról</h1>
- <p>A cserebogárnak vannak lábai. Ebből...</p>
- <p>Minden cserebogárnak van lába...</p>
- <p>A cserebogárnak vannak szárnyai is...</p>
- <p>A szárnyaival repülni tud...</p>
- <p>A halhatatlanság azt jelenti, hogy...</p>
- <p id="halhatatlan">A cserebogarak halhatatlansága tehát...</p>
- </body>
- </html>
Helyzetérzékeny kiválasztás
A stíluslapban lehetőségünk van a HTML fában betöltött helye alapján meghatározni egy elemről, hogy hogyan nézzen ki. Kevésbé bonyolultan megfogalmazva: a helyzetérzékeny kiválasztásnál a fában egy adott elem alatt levő elemhez rendelhetünk stílust, például megmondhatjuk, hogy a táblázatokon belül levő félkövér betűk sötétkékek legyenek, miközben a normál bekezdésekben levőknek nem fog megváltozni a színe.
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- table b { color: #0000a0; }
- --></style>
- </head>
- <body>
- <table border="1">
- <tr>
- <th colspan="2">A <b>cserebogarak</b> halhatatlanságáról</th>
- </tr>
- <tr>
- <td>A <b>cserebogárnak</b> vannak lábai. Ebből...</td>
- <td>Minden <b>cserebogárnak</b> van lába...</td>
- </tr>
- </table>
- <p>Minden <b>cserebogár</b> bogár...</p>
- </body>
- </html>
Szülő-gyermek kiválasztás
A szülő-gyermek kiválasztás abban különbözik a helyzetérzékeny kiválasztástól, hogy az elemeknek a fában betöltött helye szerinti közvetlen szülő-gyermek kapcsolata esetén tudjuk megadni a stílusmeghatározását. Az előző példánál maradva itt külön meg kell mondanunk azt, hogy a td és a th elemeken belüli b elemek esetén szeretnénk a színt megadni:
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- th>b, td>b { color: #0000a0; }
- --></style>
- </head>
- <body>
- <table border="1">
- <tr>
- <th colspan="2">A <b>cserebogarak</b> halhatatlanságáról</th>
- </tr>
- <tr>
- <td>A <b>cserebogárnak</b> vannak lábai. Ebből...</td>
- <td>Minden <b>cserebogárnak</b> van lába...</td>
- </tr>
- </table>
- <p>Minden <b>cserebogár</b> bogár...</p>
- </body>
- </html>
Tulajdonság alapú kiválasztás
Előfordulhat, hogy egy adott paraméterének megléte, vagy annak az értéke szerint szeretnénk egy HTML elemhez kiválasztást rendelni, például szeretnénk csak a jelszó beviteli mezőkben a csillagok színét megváltoztatni:
- <html>
- <head>
- <title>CSS példa</title>
- <style type="text/css"><!--
- input[type="password"] { color: #0000a0; }
- --></style>
- </head>
- <body>
- <form>
- Név: <input name="name">
- Jelszó: <input type="password" name="pwd">
- </form>
- </body>
- </html>
- input[type] { ... }
- input[type="password"] { ... }
- input[type~="pass"] { ... }
Bekezdések megjelenése
Betűkészletek
Adott elemeken állítani tudjuk a betűkészletet, a stílust, módosítást, súlyozást méretet.
Betűtípus
- body { font-family: Arial, Helvetica, sans-serif; }
Stílus
Egy font dőltségét befolyásolhatjuk, példánkban az egész dokumentumra adtuk meg, hogy dőltek legyenek a betűk. További lehetőségeink: normal, italic, oblique.
- body { font-style: italic; }
A példában félkövér betűkészletet állítunk be a HTML dokumentumra. Lehetőségeink: lighter, normal, bold, bolder, illetve 100-tól 900-ig a számok 100-asával (egyre vastagabb betűkészletet választva).
- body { font-weight: bold; }
A HTML dokumentum alapértelmezett betűtípusának a méretét határoztuk meg a példában. A konkrét méretmegadásnál több lehetőségünk is van, lehetséges pixelben (mint a példában), pontban (pt-t kell írni), százalékban, szövegesen (xx-small, x-small, small, medium, large, x-large, xx-large, smaller, larger) megadni a méretet. A lehetséges mértékegységekre egy következő cikkben még részletesebben is ki fogunk térni.
- body { font-size: 14px; }
Lehetőségünk van a fentieket egy paraméterként is átadni:
- body { font: italic bold 14px Arial, Helvetica, sans-serif; }
A szöveg színét, sűrűségét, igazítását, aláhúzását, behúzását állíthatjuk, továbbá konvertálhatjuk a szöveget különböző formára (kisbetűs, nagybetűs, stb.). Pár példa:
- h1 { color: black; }
- h1 { letter-spacing: 10px; }
- h1 { text-align: center; }
- a { text-decoration: none; }
- p { text-indent: 40px; }
- h1 { text-transform: uppercase; }
- h1 { text-shadow: 5px 5px 3px #000000; }
- p { whitewhite-space: nowrap; }
- p { word-spacing: 10px; }
- p { line-height: 20px; }
- .super { vertical-align: super; }
Dobozok megjelenése
Doboz modellNégy oldala van, a felső, az alsó, a bal oldali és a jobb oldali. Mindegyik oldalnak van margója (1), kerete (2) és kitöltése (3). A margó a befoglaló doboz legszéle és a keret közötti távolságot állítja be. A keret a margó és a kitöltés között található. Végül a kitöltés a keret és a tartalom között helyezkedik el. Mindegyik lehet akár 0 pixel szélességű is, ekkor egyszerűen nem jelennek meg. A tartalom és a kitöltés által meghatározott terület hátterének színe állítható, illetve képet is el lehet helyezni rajta.
Az elemeknek van magasság (4) és szélesség (5) tulajdonsága is. Ezek a szabvány szerint az adott keret külső részétől az átellenes keret külső részéig értendőek. Erről sajnos a jelenleg domináns böngésző valamiért nem tud (kivéve 6-os verziójának kompatibilis módját), és a teljes dobozszélességet, illetve dobozmagasságot érti ezen tulajdonságok alatt.
Ahogy a képen látható, a piros keretű doboz középen (az elválasztásnál) kettétörik, és a keret (illetve a másik két tulajdonság) mindkét sorban hat, viszont a törésnél, azaz a sorok megfelelő szélénél nem. Ha több sorba kerül az elemünk aminek ezeket a tulajdonságokat megadtuk, akkor több helyen is kettétörik a doboz.
Háttér
A háttér színét vezérelhetjük segítségével, továbbá elhelyezhetünk képet háttérként, s annak tulajdonságait (elhelyezkedését, ismétlődését, mozgását) állíthatjuk be. A betűkhöz hasonlóan egy definícióban is, és külön-külön is szabályozhatjuk az tulajdonságokat.
- body { background-color: white; }
- body {
- background-image: url(hatter.gif);
- background-position: top left;
- background-attachment: scroll;
- background-repeat: repeat;
- }
A háttér paraméterek egy összevonó background paraméterrel:
- body { background: white url(hatter.gif) no-repeat fixed center center; }
Keretek
A stíluslapok segítségével lehetőségünk van különböző stílusú keretet adni a kiválasztott HTML elemeinknek.
- p { border: 2px solid blue; }
Lehetőségünk van a keretek mind a négy oldalon külön-külön történő beállítására is, ezekre mutat példát az alábbi definíció:
- p {
- border-left: 1px solid red;
- border-top: 3px double blue;
- border-right: 3px dotted green;
- border-bottom: 3px dashed black;
- }
Körvonalak
A körvonalak a keretekhez nagyon hasonlóan működnek, ellenben az elem méretét nem befolyásolják, mindig körülötte és felette (előtte, azaz eltakarják mindenképpen a doboz tartalmát) jelennek meg, helyet nem foglalnak. A legegyszerűbb talán a fókusz példáját felhozni, mely ehhez nagyon hasonló: mikor egy beviteli elem (például gomb) aktív, akkor körülötte az operációs rendszer egy körvonallal jelzi, hogy fogadja a felhasználói bevitelt.
A körvonalak és a keretek további különbsége, hogy nem lehet a négy oldalon külön-külön megadni és hogy nem csak négyzetes alakú lehet.
De lássuk azokat a tulajdonságokat, melyekkel befolyásolni tudjuk a körvonal megjelenését!
- p { outline-width: 2px; }
- p { outline-style: solid; }
- p { outline-color: #000000; }
Lehetőség van egy tulajdonság segítségével beállítani a három tulajdonságot, ekkor opcionálisan és bármilyen sorrendben megadhatjuk az outline után ezeket:
- p { outline: 2px solid #000000; }
Margók
Az egyes elemek a kereten (legyen az akár 0 képpontnyi) kívüli helyfoglalását szabályozhatjuk a margók segítségével.
- p { margin: 0px 1px 2px 3px; }
- body { margin: 0px; }
- body { margin: 10px 0px; }
- p {
- margin-left: 3px;
- margin-top: 0px;
- margin-right: 1px;
- margin-bottom: 2px;
- }
Kitöltés
Az egyes elemek a kereten (legyen az akár 0 képpontnyi) belüli helyfoglalását szabályozhatjuk a kitöltések segítségével.
- p { padding: 0px 1px 2px 3px; }
- body { padding: 5px; }
- body { padding: 10px 0px; }
- p {
- padding-left: 3px;
- padding-top: 0px;
- padding-right: 1px;
- padding-bottom: 2px;
- }
Listák megjelenése
A listák két különböző HTML elemek egymásba ágyazásából állnak össze. A külső elem lehet ul, ol és dd elem, melyben li, illetve dt elemek kapnak helyet. Mind a külső, mind a belső elemek saját margóval, kerettel és kitöltéssel rendelkeznek. A belső listaelemek listajelölő grafikájának megjelenítésekor a különböző böngészők kicsit eltérően viselkednek, egy részük a külső elem bal felének megfelelő szélességű margót, másik részük pedig megfelelő szélességű kitöltést ad, majd ezen a területen jeleníti meg a grafikát (a dd-dt páros esetén alapértelmezett esetben nem jelenik meg grafika, de a megfelelő margókkal rendelkezik). A grafika megjelenítése a belső listaelemeken kívülről áthelyezhető belülre egy tulajdonság segítségével.
Listaelemek
A listák megjelenését tudjuk szabályozni a következőkben bemutatott paraméterekkel. Lehetőségünk van képet rendelni a listaelemekhez, vagy egy előre meghatározott listából választani, továbbá befolyásolhatjuk az egyes listaelemek előtt álló jelek helyzetét. Lehetőségünk van mindezt egy paraméterrel, illetve külön-külön is állítani:
- ul { list-style: square inside url(pont.gif) }
- ul { list-style-position: inside }
- ul { list-style-type: disc }
- ul { list-style-image: url(pont.gif) }
A második sorban a jel behúzásának szabályozó paramétert mutatjuk be, ahogy az előbb is említettük, itt állhat értékül inside és outside. A harmadik sor a jelet szabályozza. Itt széles választási lehetőségünk van: none, disc, circle, square, decimal, decimal-leading-zero, lower-roman, upper-roman, lower-alpha, upper-alpha, lower-greek, lower-latin, upper-latin, hebrew, armenian, georgian, cjk-ideographic, hiragana, katakana, hiragana-iroha, katakana-iroha - persze nem mindegyik böngésző támogatja az összes jelet. Végül az utolsó sorban a képre cserélését láthatjuk a lista jelének - mégegyszer kihangsúlyozzuk, ha szeretnénk, hogy a kép megjelenjen, meg kell adnunk a jel típusát is.
Linkekkel kapcsolatos látszólagos kiválasztók
Aki már egy kicsit is foglalkozott HTML-lel, készített, vagy egyszerűen csak látogatott már weboldalakat, biztosan tudja, hogy a linkek más-más színnel jelennek meg, ha már voltunk az általuk mutatott oldalon, illetve ha még nem. Ezekre a színekre a HTML-ből, a body elem tulajdonságainak (link, vlink) állításával is hatással lehetünk, azonban CSS-t használva, sokkal több lehetőségünk lesz. Látszólagos kiválasztókkal ugyanis külön-külön meghatározhatjuk a megjelenésüket! Ezeket a kiválasztókat a következőképpen használhatjuk:
- a { color: #0000FF; text-decoration: underline; }
- a:link { text-decoration: none; }
- a:visited { font-style: italic; }
Dinamikus látszólagos kiválasztók
A HTML dokumentumokat az ember nem szokta egy ültő helyében elolvasni, majd otthagyni. Az egész lényege valahol a dinamizmus: linkekre kattingatunk, adott esetben form elemeket használunk, stb. Az internet már interaktív média, és erre a CSS-t is felkészítették. No, nem kell bonyolult dolgokra gondolni, az eszköztárunk a következő lehetőségeket tartalmazza: az egérkurzor az adott elem felett van, az adott elem éppen aktív, továbbá ha az adott elem éppen fókuszban van.
- input { font-size: 12px; border: 1px solid #000000; background: #ffffff; }
- input:hover { border: 1px solid #0000FF; }
- input:active { font-weight: bold; }
- input:focus { background: #dddddd; }
Elemszerű látszólagos kiválasztók
A CSS lehetőséget biztosít kiválasztanunk egy-egy elem tartalmának csak bizonyos részeit, mintha azok külön-külön definiált elemek lennének. Ezekkel a látszólagos kiválasztókkal az adott elem első karakterét, vagy akár az első sorát is kiválaszthatjuk.
- p:first-letter { font-size: 300%; }
- p:first-line { color: #000080; }
Első gyermek látszólagos kiválasztó
További lehetőségünk egy adott gyermek elemről eldöntenünk, hogy első-e a sorban. Azaz például ha a body elemen belül szeretnénk, hogy az első (bevezető) bekezdésünk vastagon legyen szedve, a first-child látszólagos osztály kiválasztó ad nekünk lehetőséget erre:
- body > p:first-child { font-weight: bold; }
- p:first-child { font-weight: bold; }
Nyelv szerinti látszólagos kiválasztó
A HTML-ben, de más leíró nyelveknél is, lehetőségünk van meghatározni hogy milyen nyelven íródott az adott dokumentum (HTML-nél meta elem a fejlécben), vagy adott elemekre is külön definiálhatjuk ezeket. A CSS biztosít számunkra erre is kiválasztót. Hogy a gyakorlatban mire jó ez (amellett, hogy az angol szavakat pirossal, a németeket kékkel, stb. írhatjuk), egyetlen épkézláb példát találtam, meg lehet határozni a segítségével, hogy milyen idézőjelek szerepeljenek a dokumentumban. Ehhez egy speciális tulajdonság elemet használatunk fel, a quote-ot. Íme:
- :lang(hu) > q { quotes: '\201E' '\201D' }
- :lang(en) > q { quotes: '"' '"' }
Elem előtt és után...
Végezetül lássuk a :before és :after kiválasztókat. Ezek segítségével az adott elem előtti és mögötti látszólagos részeket választjuk ki (fontos: nem az előtte levő elemeket, hanem az elem és az előtte levő elem közötti 0 hosszúságú részt). Több trükköt is meg lehet vele valósítani, egy egyszerű, de nagyszerű például:
- b:before { content: '<b>'; }
- b:after { content: '</b>'; }
További tulajdonságok
Az alapszintű tulajdonságok áttekintésekor a korábbiakban már láthattuk, hogy számos módon befolyásolhatjuk dokumentumunk megjelenését, azonban ezeken kívül további eszközök is rendelkezésünkre állnak. A lehetőségek skálája annyira széles, hogy ezeket a tulajdonságokat is két cikkre bontottam, és ezeken belül is minden bizonnyal fognak még kimaradni tulajdonságok. Ezzel és a következő cikkel reményeim szerint ezek csak olyanok lesznek, melyekre viszonylag ritkábban van csak szükségünk.
A láthatóság tulajdonság
A láthatóság tulajdonság segítségével egy elemről meghatározhatjuk, hogy a böngésző megjelenítse-e, vagy pedig ne? Három értéket vehet fel:
- visible
- hidden
- collapse
A visible érték esetén látható lesz a böngészőben, hidden esetén pedig el lesz rejtve. A collapse értéket táblázat elemeknél használhatjuk, egy oszlop, vagy egy sor elrejtésére való. Példa a tulajdonság használatára:
- h1 { visibility: hidden; }
A megjelenítés tulajdonság
A böngésző amikor megjeleníti a dokumentumunkat, előre meghatározott sémák segítségével építi fel a dokumentumunk megjelenését. Ilyen séma a dobozszerű megjelenítés, vagy a folyamatos, egy dobozon belüli megjelenítés, de a felsorolásokra, táblázatok megjelenésére is van egy-egy séma. Például a címsor elemek (h1-h6) és a paragrafus elem viszont ugyanazokat a blokk alapú sémákat használhatják. Ezek a sémák a következők:
- inline
- block
- run-in
- compact
- list-item
- marker
- table
- inline-table
- table-row
- table-row-group
- table-column
- table-column-group
- table-header
- table-header-group
- table-footer-group
- table-cell
- table-caption
- none
Bár a böngészőknél minden egyes elemhez hozzá van rendelve egy alapértelmezett séma, ezeket felül tudjuk bírálni. Erre szolgál a display tulajdonság. Ennek a használata a következő:
- h1 { display: run-in; }
Megjelenítés letiltása
Ezen nincs mit bonyolítani, egyszerűen, ha display: none stílust adunk egy elemnek, akkor nem fog megjelenni. Ettől függetlenül a dokumentumunkban jelen lesz, elérhető, használható, de fókuszt már felhasználó által nem kaphat (pl. javascriptből viszont igen). A használata egyszerű:
- .hidden { display: none; }
Soron belüli megjelenítés
Ennek segítségével az adott elemet egy soron belül lehet megjeleníteni. Jó példa erre a div és a span elem, a span elem ilyen, a div pedig blokként jelenik meg. Hasznát sok helyzetben vehetjük, de egy tipikus példa, mikor a form elemünk blokk típusú megjelenítését soron belülire szeretnénk változtatni, mert zavar, hogy a form határokon sortörést tapasztalunk:
- form { display: inline; }
Blokkban történő megjelenítés
Ilyenek a div, a p és a címsor elemek. Egy téglalapot foglalnak el, és abban jelenítik meg tartalmukat. Felhasználására példa lehet, mikor egy felsorolás elemeit blokként szeretnénk megjeleníteni (például menünek használva): - ul, li { display: block; border: 1px solid #000000; }
Befutó megjelenítés
A szabvány szerint a befutó megjelenés segítségével "betolakodhatunk" a következő elembe, amennyiben az blokként jelenik meg. Más szavakkal, a befutó megjelenítéssel azt érjük el, hogy az elemünk az utána következő blokk elem első soron belüli eleme lesz. Abban az esetben, ha nem blokk elem következik a befutó tulajdonságú elem után, akkor blokként jelenik meg. Így például egy címsor elemet az utána következő bekezdés elején tudunk megjeleníteni:
- h1 { display: run-in; }
Kompakt megjelenítés
Itt a befutó megjelenítésnél egy fokkal bonyolultabb esetről van szó. A megjelenítő egy egy soros soron belüli blokként próbálja beilleszteni a következő blokk elembe - amennyiben a következő egy blokk elem és "befér" oda - a kompakt megjelenítés tulajdonságú elemet. Azt, hogy "befér"-e, a blokk elem bal vagy jobb margójának megvizsgálásával dönti el, ha az nagyobb, mint az elem szélessége, akkor a következő blokkon belül, különben pedig egy külön blokkban jelenik meg az elem. Az, hogy a bal, vagy a jobb margót vizsgálja-e meg a megjelenítő, a következő blokk elem irányától függ. Másként megfogalmazva, ha a következő elem mellett (bal, illetve jobb oldalon) elfér az elem, akkor ott, különben pedig felette egy külön blokkban jelenik meg. Ezt is címek megjelenítésére lehet talán használni, "kompaktabbá" tehetjük vele a dokumentumunk megjelenését:
- h1 { display: compact; }
Lista elemként történő megjelenítés
Listaelemként történő megjelenítést okoz, persze tudom, hogy nem illik magával megmagyarázni valamit. A lista elemek két egymás mellett álló téglalapként jelennek meg, a bal oldali behúzásként is felfogható, a jobb oldaliban pedig a lista tartalma jelenik meg. A lista jelölő elem az a stílustól függően vagy a bal oldali, vagy a jobb oldali téglalapban fog megjelenni.
- li { display: list-item; }
Jelölőként való megjelenítés
Csak generált blokkban használhatjuk, ellenkező esetben soron belüli megjelenést állít be. A generált blokkra példát az elem előtt és után történő kiválasztásnál láthattunk a content használatakor. Lényeg a lényeg, az előzőleg a lista elemnél a jelölő megjelenéséhez hasonlóan fog megjelenni ebben az esetben a generált tartalom.
- li:before { display: marker; content: "-"; width: 10px; }
Táblázatokkal kapcsolatos megjelenítések
Ezek a tulajdonság értékek a táblázat elemekkel megegyező megjelenést biztosítanak. A lehetőségek a következők: table, inline-table, table-row, table-row-group, table-column, table-column-group, table-header, table-header-group, table-footer-group, table-cell, table-caption.
A pozícionálás és kapcsolódó tulajdonságok
Az egyes elemek helyzetét többféleképpen meg lehet adni. Szabályozható, hogy hol legyen a tetejük, aljuk, bal és jobb oldaluk, milyen széles és magas legyen a befoglaló méretük, hogy mihez képest viszonyuljon, stb. Ebben a részben ezeket a tulajdonságokat fogjuk megvizsgálni.
Pozícionálás tulajdonság
Evvel a tulajdonsággal azt határozhatjuk meg, hogy mihez képest helyezze el az elemet a megjelenítő alkalmazás. Lehetőség van statikus, relatív, abszolút, fix és öröklött értékre.
A statikus (static) érték (mely az alapértelmezett) ott jelenik meg az elem, ahol éppen tartunk a dokumentumban. Ennél az értéknél a bal és a fenti pozíció megadás (lásd mindjárt) figyelmen kívül lesz hagyva.
- h1 { position: static; }
- #fejlec { position: relative; top: -15px; left: 10px; }
- #lablec { position: absolute; bottombottom: 10px; rightright: 10px; }
- #cimke { position: fixed; bottombottom: 10px; rightright: 10px; }
A pozícionálások meghatározásánál láthattuk, hogy adott esetben meghatározhatjuk egy-egy elem pozícióját, befoglaló méretét. Ehhez a top, left, bottom, right és a width, illetve a height tulajdonságok állnak rendelkezésünkre. A top, left, bottom, right esetében a befoglaló elem határaihoz képest befele kell megadnunk a méreteket. A három lehetőség (top, bottom, height és left, right, width) közül ha kettőt megadunk, a harmadik kiszámításra fog értelem szerint kerülni. Ha megadjuk a harmadikat is, akkor felülbírálódik az elsőnek megadott az ütközés miatt.
- #szoveg
- {
- position: absolute;
- top: 10px;
- left: 10px;
- bottombottom: 10px;
- rightright: 10px;
- background: #eeeeee;
- }
- #content { min-height: 500px; }
Túlcsordulás tulajdonság
Az előzőekből következik, hogy előfordulhat, mikor egy adott doboz tartalma nagyobb, mint amekkora helyet neki szánunk, azaz a tartalmunk "túlcsordul", például a szélesség és magasság tulajdonságok megadásának következményeként. Az overflow tulajdonság segítségével tudjuk szabályozni a böngésző erre a helyzetre adott válaszát.
Az overflow lehetséges értékei: visible, hidden, scroll, auto. Ha a visible értéket adjuk meg, akkor a blokk határain túl fog futni a tartalmunk, ha van például keretünk megadva, akkor a tartalom ezen is túl fog folyni, erre is rákerül. A hidden megadásakor a tartalomnak csak az a része fog látszani, mely a blokk határain belül van. Ha scroll-t adunk meg értékül, akkor megjelenik egy görgetősáv, és azzal tudjuk fel-le mozgatni a tartalmat. Végül ha auto-ra állítjuk a tulajdonságot, akkor hasonlóan a scroll értékhez, görgetősáv jelenik meg, de csak akkor, ha valóban túlcsordul a tartalmunk. Példa:
- .box { width: 200px; height: 200px; overflow: auto; }
A vágás tulajdonság egy elem alakjának meghatározására szolgál. Segítségével kijelölhetjük láthatósági határait, így az elem le lesz vágva a megadott formára. Jelenleg egyetlen forma adható meg, a négyzet, melynek rendre a tetejének, jobb oldalának, aljának és bal oldalának a pozícióját kell megadnunk. Használata:
- img { clip: rect(2px,2px,2px,2px); }
A lebegés és törlése tulajdonságok
Aki megismerkedett a HTML nyelvben a képek lehetőségeivel, biztosan ismeri azt a tördelési technikát, mikor egy képet, idézetet, vagy bármi mást úgy helyezünk el a szövegben, hogy az adott paragrafus(ok) szövege "körbefolyik" körülötte. Az img elemnek van ugye egy erre szolgáló tulajdonsága, az align, mellyel balra és jobbra igazíthatjuk úgy, hogy az utána következő szöveg mellette maradjon. A CSS is kínál nagyon hasonlóan egy ugyanilyen lehetőséget a float tulajdonságon keresztül, de nincs lekorlátozva a tulajdonság a kép elemekre, "bárminek" megadhatjuk, hogy balra, vagy jobbra illeszkedjen. Például:
- .left { float: left; }
- h1 { clear: both; }
