2014. március 27., csütörtök

Űrlapok formázása

Az űrlapok formázásánál nem az új technikai lehetőségeket, hanem a szemléletmódot érdemes hangsúlyozni. Nézzünk meg egy rövid, de szemléletes példát Antonio Lupetti tollából. Ezt szeretnénk elérni:
Form dizájn
A HTML kód:
<div id="stylized" class="myform">
  <form id="form" name="form" method="post" action="index.html">
    <h1>Sign-up form</h1>
    <p>This is the basic look of my form without table</p>
    <label>Name
      <span class="small">Add your name</span>
    </label>
    <input type="text" name="name" id="name">
    <label>Email
      <span class="small">Add a valid address</span>
    </label>
    <input type="text" name="email" id="email">
    <label>Password
      <span class="small">Min. size 6 chars</span>
    </label>
    <input type="text" name="password" id="password">
    <button type="submit">Sign-up</button>
    <div class="spacer"></div>
  </form>
</div>
A CSS kód:
body {
  font-family:"Lucida Grande", "Lucida Sans Unicode", Verdana,
    Arial, Helvetica, sans-serif;
  font-size:12px;
}
p, h1, form, button {
  border:0;
  margin:0;
  padding:0;
}
.spacer {
  clear:both;
  height:1px;
}
.myform {
  margin:0 auto;
  width:400px;
  padding:14px;
}
#stylized {
  border:solid 2px #b7ddf2;
  background:#ebf4fb;
}
#stylized h1 {
  font-size:14px;
  font-weight:bold;
  margin-bottom:8px;
}
#stylized p {
  font-size:11px;
  color:#666666;
  margin-bottom:20px;
  border-bottom:solid 1px #b7ddf2;
  padding-bottom:10px;
}
#stylized label {
  display:block;
  font-weight:bold;
  text-align:right;
  width:140px;
  float:left;
}
#stylized .small {
  color:#666666;
  display:block;
  font-size:11px;
  font-weight:normal;
  text-align:right;
  width:140px;
}
#stylized input {
  float:left;
  font-size:12px;
  padding:4px 2px;
  border:solid 1px #aacfe4;
  width:200px;
  margin:2px 0 20px 10px;
}
#stylized button{
  clear:both;
  margin-left:150px;
  width:125px;
  height:31px;
  background:#666666 url(img/button.png) no-repeat;
  text-align:center;
  line-height:31px;
  color:#FFFFFF;
  font-size:11px;
  font-weight:bold;
}
Természetesen sok más megoldás is hasznos és megfelelően látványos lehet. A témában érdemes még tutorialokat megismerni, és hasznos lehet a Wufoo Form Gallery megismerése is. Végül a pForm automata generálási lehetőségeit is érdemes kipróbálni.

HTML 5-ben

A HTML 5 sok hiányt pótol ezen a rendkívül fontossá vált területen. A HTML 5 nélkül különböző kliens és szerver oldali megoldásokkal próbáltuk pótolni azokat a hiányosságokat, amelyek a jelenlegi űrlapok használata esetén mutatkoznak. De nézzük meg, melyek azok a lehetőségek, amelyek könnyíthetik a munkánkat.
Kezdjük először az újfajta űrlap elemekkel.

Szám mező

Gyakran van szükségünk arra, hogy számadatot kérjünk be a látogatótól. A következő példa mutatja, hogy milyen lehetőségeink vannak.
<input type="number" min="10" max="20" step="2">
Jól látszik, hogy az intervallum határait és a lépésközt is megadhatjuk.
Szám mező

Csúszka használata

Akár számadatok esetén, akár más szituációban érdekes megoldás lehet a csúszka használata.
<input type="range" min="0" max="10" step="2" value="6">
Arra azonban érdemes figyelni, hogy itt a csúszka számszerű értéke nem jelenik meg közvetlenül. JavaScript segítségével viszont összeköthetjük a csúszka működését más űrlap elemekkel.
Csúszka

Dátum/idő megadása

Nagyon körülményes megoldásokat kellett alkalmaznunk a dátum és időpont megadásokhoz a korábbiakban. De erre is van egy nagyszerű megoldásunk:
<input type="date" … >
<input type="time" … >
Az eredmény:
Date és time bemenet
Ezen kívül használható a datetimemonth és week típusú mező is.

Szín megadása

A szín megadására is jó lehetőségünk van:
<input type="color">

További lehetőségek

A következő példák jól mutatják az igényeket. A böngészők megoldása már nem ilyen egyértelmű.
<input type="tel">
<input type="email">
<input type="url">

Automatikus fókusz

Automatikusan megkapja a fókuszt a következő elem:
<input type="text" autofocus … >

Validálás

A JavaScript használata helyett további lehetőségeket is kaptunk.
Kötelező kitölteni a következő mezőt:
<input type="text" … required >
Lehetőség van reguláris kifejezések használatára is:
<input type="text" … pattern="[az]{3}[0-9]{3}" >

Űrlapok HTML szintaxis

form elem más űrlap elemeket tartalmaz. Ezek az űrlap elemek teszik lehetővé az adatbevitelt.
A leggyakrabban használt elem az input. A type tulajdonságával állítható be, hogy pontosan milyen adatbeviteli módot szeretnénk.

Szöveges mezők

A szöveges mezők lehetővé teszik, hogy betűkből, számokból, írásjelekből álló karaktersorozatot lehessen begépelni.
<form>
  Vezetéknév:
  <input type="text" name="vezeteknev">
  <br>
  Keresztnév:
  <input type="text" name="keresztnev">
</form>
Az eredmény:
Űrlap
Az űrlap elemek soron belüli (inline) elemek. Ha egymás alá akarjuk tenni, akkor azt valamilyen módon külön meg kell adnunk a HTML, vagy még szebb, ha a CSS segítségével.
Érdemes megfigyelni, hogy maga a form elem vizuálisan nem látható, csak a benne elhelyezett elemek. Ha (ahogy ebben a példában is) nem adjuk meg a mezők szélességét, a legtöbb böngésző alapértelmezetten 20 karakter szélesen jeleníti meg. Ez azonban nem korlátozza a ténylegesen begépelhető szöveg hosszát.
Jelszavak begépeléséhez password típusú (type="password") beviteli mezőt szokás létrehozni. Ez viselkedésében csak annyiban tér el a text típustól, hogy a begépelt szöveg helyett * (egyes böngészőkben vagy operációs rendszerek alatt ) karakterek jelennek meg, és vágólapra nem lehet kimásolni a tartalmát.
Az elrejtés csak a képernyőre vonatkozik, a hálózaton egyszerű adatként utazik a jelszó.

Rádiógombok

A rádiógombokat akkor használhatjuk, ha a látogatónak néhány választható elem közül kell választási lehetőséget adni. Az elemek közül mindig csak az egyik lehet aktív. Érdemes megfigyelni a következő listában, hogy aname tulajdonság azonossága rendeli a rádiógombokat logikailag egy csoporttá, vagyis egymást kizáró választási lehetőségekké. Tehát ebből a szempontból sem a vizuális elrendezés számít.
<form>
  <input type="radio" name="nem"
    value="no">Nő</input>
  <br>
  <input type="radio" name="nem"
    value="ferfi">férfi</input>
</form>
Az eredmény:
Rádiógombok
Az ábrán látszik, hogy alapértelmezetten egyik elem sincs kiválasztva. Ha valamelyik választási lehetőséget alapértelmezettnek tekintjük, akkor ezzel könnyíthetjük is az űrlap kitöltését:
<input type="radio" name="nem" value="no" checked>Nő</input>

Jelölőnégyzetek

A jelölőnégyzetek arra szolgálnak, hogy a felhasználó egy vagy több elemet is ki tudjon választani a rendelkezésre álló lehetőségek közül. Más megközelítésben úgy is lehetne fogalmazni, hogy egy jelölőnégyzet ki- vagy bekapcsolt állapotban lehet, függetlenül más beviteli elemektől.
<form>
  <input type="checkbox" name="bicikli">
  Van biciklim
  <br>
  <input type="checkbox" name="auto">
  Van autóm
</form>
Az eredmény:
Jelölőnégyzetek
Itt is van lehetőségünk az alapértelmezetten ki nem választott állapot helyett bejelölve megjeleníteni a jelölőnégyzetet:
<input type="checkbox" checked name="bicikli">

label elem

Érdemes megfigyelni, hogy rádiógomb és jelölőnégyzet esetén a kattintható terület a kör, illetve négyzet alakú területre korlátozódik. Az elemek mellett megjelenő szövegek a böngésző számára függetlenek a jelölő elemektől, csupán a vizuális helyzet jelzi nekünk az összefüggést.
label elem használatával ez a függetlenség megszüntethető: a szöveget a jelölőelemmel aktív kapcsolatba hozhatjuk. Ez azt jelenti, hogy lehet kattintani a szövegre is.
<form>
  <input type="radio" name="nem" value="no" id="no">
  <label for="no">Nő</label>
  <br>
  <input type="radio" name="nem" value="ferfi" id="ferfi">
  <label for="ferfi">férfi</label>
</form>
Az előző verzióhoz képest fontos kiegészítés, hogy a value mellett az id is megkapta az azonosító szövegeket, mivel a label tag for tulajdonsága az id alapján azonosítja az elemeket.
Űrlap adatok elküldése
Az esetek jelentős részében a felhasználó azért tölt ki egy űrlapot, hogy adatokat tudjon a szerver felé küldeni valamilyen hatás érdekében.
Az eddigi példákból két fontos rész kimaradt. Először is a felhasználó számára szokás biztosítani egy küldés (vagy valami hasonló feliratú) gombot, hogy erre kattintva kezdeményezhesse az adatok elküldését. Másrészt aform tag – egyébként kötelezően kitöltendő – action tulajdonsága határozza meg, hogy melyik oldalnak kell a kérést feldolgoznia.
<form name="input" action="feldolgoz.php" method="get">
  Felhasználói név:
  <input type="text" name="nev">
  <input type="submit" value="Küldés">
</form>
Az eredmény:
Nyomógomb
Ha a felhasználó begépeli a nevet, majd kattint a Küldés gombra, akkor a szöveg továbbításra kerül a feldolgoz.php számára.
Nyomógombokat a button taggal is létre lehet hozni.

Lenyíló lista

Bizonyos esetekben rádiógombok helyett célszerű inkább a lenyíló listák alkalmazása. (Elsősorban terjedelmi, áttekinthetőségi okokra kell gondolni.)
Két tag használatára lesz mindenképpen szükség: először is a select tag adja meg a lista kereteit, míg az option tagok a választható elemeket.
<form>
  <select name="autok">
    <option value="audi">Audi</option>
    <option value="fiat">Fiat</option>
    <option value="skoda">Skoda</option>
    <option value="suzuki" selected>Suzuki</option>
  </select>
</form>
selected tulajdonság lehetővé teszi az alapértelmezett elem kijelölését. Ha ez nem szerepel a forrásban, akkor az első elem lesz a kiválasztott betöltődéskor.
Lehetőség van olyan lista létrehozására is, ahol egyszerre akár több elem is kiválasztható:
<select name="autok" multiple>
size attribútum segítségével a lenyíló lista több soros listává alakítható.
<select name="autok" size="5">
Végül megemlítjük a hosszabb, csoportosítással áttekinthetővé tehető listák esetén hasznos optgroup tagot. Az alábbi példa a négy választási lehetőséget két vizuális csoportba sorolja.
<select>
  <optgroup label="Olasz autók">
    <option value="fiat">Fiat</option>
    <option value="ferrari">Ferrari</option>
  </optgroup>
  <optgroup label="Német autók">
    <option value="vw">VW</option>
    <option value="audi">Audi</option>
  </optgroup>
</select>

Több soros szöveges mezők

Lehetőség van hosszabb szöveg begépelését, szerkesztését lehetővé tevő beviteli mezőt is létrehozni. Erre szolgál a textarea elem. A következő példán a méretek megadásán túl a kezdőszöveg is definiált:
<textarea rows="10" cols="30">Kezdőszöveg</textarea>

Mezőcsoportok

Hosszabb űrlapok esetén hasznos lehetőség, hogy az egyes mezőket vizuálisan csoportosíthatjuk a fieldset, és akár címmel is elláthatjuk a legend taggal. Nézzünk egy rövid példát egyetlen csoporttal. (A gyakorlatban egymás után több csoportot szoktunk létrehozni.)
<form>
  <fieldset>
    <legend>Személyes</legend>
    Név: <input type="text" size="30"><br>
    E-mail cím: <input type="text" size="30"><br>
    Születési év: <input type="text" size="10">
  </fieldset>
</form>
Az eredmény:
Mezőcsoport hosszabb űrlapokhoz

Táblázatok formázása

A táblázatok formázására használhatóak a korábban már megismert szegély, háttér, térköz formázásokat igen gyakran használjuk. Itt csak néhány specialitásra térünk ki.

Szegélyek

A HTML border tulajdonság helyett általában a következő módon szoktuk a szegélyt formázni:
table, th, td {
  border: 1px solid black;
}
Ezen kívül szinte minden esetben alkalmazzuk a table tag border-collapse attribútumát, amivel a szokatlan kinézetű önálló cellaszegélyek helyett a szövegszerkesztőkben megszokott kinézetet írhatjuk elő.
table {
  border-collapse:collapse;
}

Méretek

A táblázatok alapértelmezés szerint csak azt a minimális helyet foglalják el, amely szükséges a tartalom megjelenítéséhez. A könnyebb olvashatóság érdekében a cellákon szokás belső szegélyt (padding) beállítani, illetve egyéb módokon is befolyásolni a táblázat méretét. Néhány szokásos megoldás:
table { width:100%; }
th { height:50px; }
td {line-height: 24px; }

Cella igazítás

A cellák tartalmát mind vízszintes, mind függőleges irányban igazíthatjuk. Érdemes azonban egységes kinézetet tervezni, és nem a „tarkaságra” törekedni.
Nézzünk itt is néhány megoldást:
td {
  text-align:right;
  vertical-align:bottom;
}

Zebra táblák

Az alap formázások lehetőségein túl további segítséget adhatunk a látogatóknak, hogy a táblázatot könnyebben tudják olvasni. Ennek igen elterjedt példája a zebra táblák alkalmazása.
Nézzünk egy rövid példát. (Forrás: A List Apart Magazine)
<table>
  <tr class="paratlan">
    td>1. sor, 1. cella</td>
    <td>1. sor, 2. cella</td>
  </tr>
  <tr class="paros">
    td>2. sor, 1. cella</td>
    <td>2. sor, 2. cella</td>
  </tr>
  <tr class="paratlan">
    td>3. sor, 1. cella</td>
    <td>3. sor, 2. cella</td>
  </tr>
  <tr class="paros">
    td>4. sor, 1. cella</td>
    <td>4. sor, 2. cella</td>
  </tr>
</table>
table {
  border-collapse:collapse;
  border: 1px solid #aaa;
}
td {
  border: 1px solid #aaa;
  padding: 2px;
}
tr.paros td {
  background-color: #eee;
}
tr.paratlan  td {
  background-color: #fff;
}
Az eredmény:
Zebra tábla formázás

HTML táblázat szintaxis

Táblázatokat a table tag segítségével lehet létrehozni. Egy tábla sorokat tartalmaz (tr tag), és minden sor cellákat (th vagy td tag). A tábla cellái szöveget, képet, bekezdést, listát, űrlapokat, újabb táblázatokat is tartalmazhatnak.
Nézzünk egy egyszerű, 2x2 cellás táblázatot:
<table border="1">
  <tr>
    <td>1. sor, 1. cella</td>
    <td>1. sor, 2. cella </td>
  </tr>
  <tr>
    <td>2. sor, 1. cella </td>
    <td>2. sor, 2. cella </td>
  </tr>
</table>
Az eredmény:
Táblázat

Táblázat szegélyek

Alapértelmezetten a táblázatok szegélyek nélkül jelennek meg. Van azonban lehetőség arra, hogy szegélyek is megjelenjenek az oldalon: az előző példában is látható border tulajdonsággal lehet beállítani a szegély szélességét. (A szám képpontban értendő.)
Hamarosan látni fogjuk, hogy CSS-ben ennél jobb lehetőségeink lesznek a kinézet befolyásolására.

Táblázat fejléc

A táblázat első (néhány) sorába, első (néhány) oszlopába szokás fejléc információkat elhelyezni. Ez magyarázza az alatta vagy mellette található értékek jelentését. Ebben az esetben az első sort celláit a th tagokkal kell megadni:
<table border="1">
  <tr>
    <th>1. fejléc</th>
    <th>2. fejléc</th>
  </tr>
  <tr>
    <td>1. sor, 1. cella</td>
    <td>1. sor, 2. cella</td>
  </tr>
  <tr>
    <td>2. sor, 1. cella</td>
    <td>2. sor, 2. cella</td>
  </tr>
</table>
Az eredmény:
Táblázat fejléccel

Táblázat cím

Méltatlanul keveset használt elem a caption, amivel a táblázat címét tudjuk korrekt módon megadni. Lehetőség van annak kiválasztására is, hogy a négy lehetséges oldal közül hol jelenjen meg a cím. A captionelemnek meg kell előznie a sorokat:
<table border="1">
  <caption>Táblázat címe</caption>
  <tr>
    <th>1. fejléc</th>
    <th>2. fejléc</th>
  </tr>
  ...
Az eredmény:
Táblázat címmel

Cellák összevonása

A colspan és rowspan tulajdonságok segítségével cellákat lehet egyesíteni:
<table border="1">
  <tr>
    <th>Név</th>
    <th colspan="2">Telefon</th>
  </tr>
  ...
Az eredmény:
Összevont cellák

Tippek

theadtbody és tfoot elemek a céljuk szerint nagyon hasznos elemek lennének, de sajnos a böngészők igen változó módon támogatják őket, ezért a gyakorlatban nem is szokás alkalmazni.
A táblázat cellák további táblázatokat is tartalmazhatnak, amivel összetett szerkezetek alakíthatók ki.

Listák formázása

A CSS lista formázásai segítségével a lista előtti térközök, a lista elem vagy lista kép állítható be.

Lista jelölők

Felsorolt listák esetén az egyes listaelemek sorrendisége nem jelent információt, ezért minden listaelem előtt ugyanazt a jelölőt szokás alkalmazni. Érdemes megfigyelni a következő példában, hogy a formázás a lista (ul) és nem az egyes listaelemek (li) tekintetében történik.
ul.disc   {list-style-type: disc}
ul.circle {list-style-type: circle}
ul.square {list-style-type: square}
ul.none   {list-style-type: none}
Számozott listák esetén jóval több lehetőségünk van, bár ezek közül is csak néhány tartozik a gyakrabban használtak közé.
ol.decimal {list-style-type: decimal}
ol.lroman  {list-style-type: lower-roman}
ol.uroman  {list-style-type: upper-roman}
ol.lalpha  {list-style-type: lower-alpha}
ol.ualpha  {list-style-type: upper-alpha}
Az előre adott lehetőségeket magunk is tovább bővíthetjük azzal, hogy tetszőleges képet alkalmazhatunk listajelölőnek:
list-style-image: url('arrow.gif')

A listajelölő pozíciója

A listajelölő a szöveg belsejében, vagy az előtt is szerepelhet:
ul.inside {
  list-style-position: inside
}
ul.outside {
  list-style-position: outside
}

Közös deklaráció

A listaelemek esetén is használható a már jól megszokott, rövidebb írásmódot lehetővé tevő közös deklaráció. Erre is láthatunk egy példát:
list-style: square inside url('arrow.gif')

Szelektorok vagy másnéven kiválasztók

Azonosító alapú kiválasztás

A HTML elemeknek megadhatjuk az egyedi id tulajdonságot. Így az egyedi id-vel rendelkező elemhez speciális formázást határozhatunk meg. CSS-ben a # segítségével tudunk elemet id alapján kiválasztani.
A következő példában a menu azonosítójú elem betűszínét zöldre állítjuk:
#menu {color: green}
A para1 azonosítójú bekezdést középre igazítva és piros színnel definiáljuk:
p#para1 {
  text-align: center;
  color: red
}

Univerzális kiválasztó

A * szelektorral minden elemet egységesen tudunk formázni:
* { border: 1px solid #000000; }

Tulajdonság kiválasztó

A következő példa csak azokra a képekre fog vonatkozni, amelyek alt tulajdonsága meg van adva:
img[alt] { border: 1px solid #000000; }
A következő példa még a tulajdonság értékét is figyelembe veszi:
img[src="alert.gif"] { border: 1px solid #000000; }

Gyermek kiválasztó

Gyakori, hogy az elemek túlzott id és class tulajdonsággal való ellátása helyett inkább az elemek hierarchiájára (más megfogalmazásban leszármazására, mint a családfánál) építünk.
Pl. a következő példa csak a h3 elemen belül közvetlenül elhelyezkedő strong tagra lesz érvényes. Tehát nem vonatkozik a h3 elem más részeire, és nem vonatkozik a nem közvetlenül h3-ban levő strong elemekre sem.
h3 > strong { color: blue; }

Leszármazott kiválasztó

Az előzőhöz igen hasonló lehetőség nem csak a közvetlen szülő-gyermek kapcsolatra, hanem az akár több szintű öröklődésre, vagy máshogy fogalmazva a tartalmazásra épít. Nézzünk egy példát:
<div>
  <em>Szia!</em>
  <p>Ez a bekezdés
    <em>köszönt</em> téged.
  </p>
</div>
Ekkor a div > em kiválasztó csak az első, míg a div em kiválasztó mindkét em tagot formázza.

Testvér kiválasztó

Gyakran van szükség arra, hogy egymást közvetlen követő elemek (vagyis testvérek) irányából fogalmazzuk meg a kiválasztásunkat. Pl. egy h2-es címet követő bekezdések közül az elsőt máshogy szeretnénk formázni, mint a továbbiakat. Ekkor jó megoldás lehet a h2 + p kiválasztó, amely a h2 utáni p tagot címzi meg.

Megjegyzés

A CSS fájlba azért szoktunk megjegyzéseket tenni, hogy a későbbi megértést és módosítást könnyebbé tegye. CSS megjegyzésként egyedül a C nyelvből ismert /*...*/ megjegyzés használható:
/* Ez itt egy megjegyzés */
p {
  text-align: center;
/* Ez itt egy másik megjegyzés */
  color: black;
  font-family: arial
}
A gyakorlatban szoktuk még arra is használni a megjegyzéseket, hogy egyes formázásokat ideiglenesen kikapcsoljunk vele.

Osztály alapú kiválasztás

Osztály kiválasztó segítségével más-más módon tudjuk megjeleníteni az egyes osztályokba sorolt elemek tartalmát. A példában a két különböző osztályhoz tartozó bekezdések más-más formázást kapnak:
p.right {text-align: right}
p.center {text-align: center}
Ez a két stílus a következő két bekezdés megjelenésére hatással lesz:
<p class="right">
Ez egy jobbra igazított bekezdés.
</p>
<p class="center">
  Ez egy középre igazított bekezdés.
</p>
A p tagoknak nem kötelező megadni class tulajdonságot, vagy akár más is lehet a class értéke, de ezekben az esetekben a fenti stílusoknak nem lesz hatása a bekezdésekre.
Az osztály szintű kiválasztást nem kötelező taghoz kötni, lehet tagoktól független, általános osztály kiválasztót is definiálni. A példa minden center osztályú elemet középre igazít. (Már amelyik HTML elemnél egyáltalán van értelme a középre igazításnak.)
.center { text-align: center }
A formázás minden center osztályú tagot középre igazít:
<h1 class="center">
  Ez egy középre igazított cím.
</h1>
<p class="center">
  Ez egy középre igazított bekezdés.
</p>
Érdemes megemlíteni, hogy a class tulajdonság több értéket is kaphat, egymástól szóközzel elválasztva:
<h1 class="center alahuz">
Ilyen esetben már az egyik kiválasztó (.center) használata esetén is találat lesz. Ha csak azokat a tagokat akarjuk kiválasztani, amelyek több class tulajdonságot is tartalmaznak, akkor a .center.alahuz szintaxist kell használnunk. Ekkor az egyik osztályba igen, de a másikba nem tartozó elemek nem lesznek kiválasztva.

CSS 3 értéke

A  CSS három elemet különböztet meg: kiválasztó, tulajdonság és érték:

kiválasztó {tulajdonság: érték}

A kiválasztó legegyszerűbb esetben egy HTML tag, a tulajdonság azt határozza meg, hogy milyen jellemzőt akarunk módosítani, míg az érték a változást határozza meg. A tulajdonságot és az értéket egy kettősponttal kell egymástól elválasztani, és a kettőt együtt kapcsos zárójelbe tenni:

body {color: black}

Ha az érték több szóból áll, idézőjelbe kell tenni:

p {font-family: "sans serif"}

Ha egy kiválasztó esetén többféle tulajdonságot is módosítani szeretnénk, könnyedén megtehetjük, mindössze pontosvesszővel kell elválasztani a tulajdonság-érték párokat.

p {text-align:center; color:red}

A stílusdefiníciók jobb olvashatósága érdekében inkább több sorba érdemes tagolni:

p {
  text-align: center;
  color: black;
  font-family: arial
}

Egyszerre akár több kiválasztóra is érvényesíthetjük a formázást. Ekkor a kiválasztókat vesszővel elválasztott listaként kell felsorolni. A példában minden címet zölden szeretnénk megjeleníteni:

h1, h2, h3, h4, h5, h6 {
  color: green
}

A paraméterek

backgroundA szöveg alatti terület színe
colorA szöveg színe
text-align:A szöveg igazítása
Értékei lehetnek: 
LEFT
RIGHT
CENTER
JUSTIFY
Érdemes megjegyezni, hogy ha a Body-nál vagy a P-nél beállítjuk a text-align-t justify-ra, akkor nem kell minden bekezdés elé HTML-tagokat írni a sorkizárt írásmód érdekében, hiszen ez lesz az alapértelmezés. Kivételek csak a felsrolások és táblázatok és más stílusok lesznek.
text-decoration:A szövegre rakható dekoráció
Értékei lehetnek: 
UNDERLINE
NONE
font-variant:A betűtípus variációjának meghatározásai vesszővel elválasztva
Értékei lehetnek:
SMALL-CAPS
font-size:A betű mérete pontban megadva - vagyis nem a web-en megszokott módon
border-width: A szöveg körüli keret szélessége
border:A szöveg körüli keret típusa
Értékei lehetnek:
NONE
SOLID
SOLID RGB(r,g,b)
SOLID THIN
SOLID THICK
margin-left:Baloldali margó
Megadása: a margó szélessége, utána a mértékegység, ami lehet:
em - behúzások száma
% - a szélesség százaléka
"semmi" - pixel
margin-right:Jobboldali margó
Megadása: a margó szélessége, utána a mértékegység, ami lehet:
em - behúzások száma
% - a szélesség százaléka
"semmi" - pixel

Linkek állapota

A stílusnevek a HTML-ből jól ismert nevek lehetnek (Body, P, TD, LI, H1, H2, H3... stb.), vagy meghatározhatjuk a linkek különböző állapotainak stílusát is.
A:LinkOlyan link, amit még nem néztek meg
A:VisitedMár meglátogatott link
A:ActiveÉppen most rajta áll a kurzor
A:HoverÉpp most megy el felette az egér

2014. március 26., szerda

Egysoros beviteli mezők szélességének módosítása

A css ben egy adott elem tulajdonsága alapján tudunk formázni [] jelek közé téve:

input[name="szido_ev"] {
width: 30px;
}

input[name="szido_nap"] {
width: 30px;
}

Ugyanez egy sorban:

input[name="szido_ev"], input[name="szido_nap"] {
width: 30px;
}

2014. március 24., hétfő

Kitöltés - bélés (padding)

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; }  
A fenti példában felül 0, jobbra 1, alul 2 és bal oldalt 3 képpontnyi kitöltést állítunk be a bekezdésnek. A négy paraméter helyett használhatunk egyet is, ilyenkor mind a négy oldalon azonos margót kapunk:
  • body { padding: 5px; }  
Ahogy a margóknál, itt is lehet csak két értéket megadni paraméterként, ahol az első paraméter a függőleges, a második paraméter pedig a vízszintes irányú kitöltést szabályozza:
  • body { padding: 10px 0px; }  
Lehetőségünk van a kitöltések 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 {   
  •  padding-left: 3px;   
  •  padding-top: 0px;   
  •  padding-right: 1px;   
  •  padding-bottom: 2px;   
  •  }  
Ezzel a definícióval ugyanazt az eredményt kapjuk, mint a legelső kitöltéses példánál bemutatottal. 

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; }  
A fenti példában felül 0, jobbra 1, alul 2 és bal oldalt 3 képpontnyi margót állítunk be a bekezdésnek. A négy paraméter helyett használhatunk egyet is, ilyenkor mind a négy oldalon azonos margót kapunk:
  • body { margin: 0px; }  
Ha csak két értéket adunk meg paraméterként, akkor az első paraméter a függőleges, a második paraméter pedig a vízszintes irányú margókra fog vonatkozni:
  • body { margin: 10px 0px; }  
Lehetőségünk van a margók 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 {   
  •  margin-left: 3px;   
  •  margin-top: 0px;   
  •  margin-right: 1px;   
  •  margin-bottom: 2px;   
  •  }  
Ezzel a definícióval ugyanazt az eredményt kapjuk, mint a legelső margós példánál bemutatottal. 

2014. március 23., vasárnap

Legend és fieldset elemek

<form id="contact-form" action="script.php" method="post"> 
  <fieldset>
    <legend>Kapcsolat:</legend>
    <ul>
      <li>
        <label for="nev">Név:</label>
        <input type="text" name="nev" id="nev" value="" />
      </li>
      <li>
        <label for="email">Email:</label>
        <input type="text" name="email" id="email" value="" />
      </li>
      <li>
        <label for="megjegyzes">Megjegyzés:</label>
        <textarea name="megjegyzes" id="megjegyzes" cols="25" rows="3"></textarea>
      </li>
      <li>
        <label for="levelezo-lista">Feliratkozik a levelezőlistánkra is?</label>
        <input type="checkbox" checked="checked" id="levelezo-lista" value="Igen, feliratkozom!" />
      </li>
      <li>
        <input type="submit" value="küldés" />
        <input type="reset" value="visszaállítás" />
      </li>
    </ul>
  </fieldset>
</form>
Ha ezt megnyitod a böngészőben, akkor a 3. ábrán látható képet kapod.
A harmadik, végleges példa
A két nagyobb elem, amit most hozzáadtunk az űrlaphoz, az a fieldset és a legend. Egyik elemet sem kötelező használni, de nagyon hasznosnak a komplex űrlapok és prezentációk esetében.
fieldset elem segítségével szemantikus egységekbe rendezheted az űrlapot. Egy bonyolultabb űrlapon például használhatsz különböző fieldset-eket a címekhez, a számlázási adatokhoz, a felhasználói szokásokhoz, és így tovább. A legend elemmel pedig elnevezheted a különböző fieldset részeket.

Űrlap alap kódok

<form>
Név: <input type="text" name="nev" id="nev" value="" />
E-mail: <input type="text" name="email" id="email" value="" />
Megjegyzés: <textarea name="megjegyzes" id="megjegyzes" cols="25" rows="3"></textarea>
<input type="submit" value="küldés" />
</form>
Ha ezt beírod egy HTML dokumentumba, majd megnyitod a böngészőben, akkor a kód úgy jelenik meg, ahogy az az 1. ábrán látható:
Egyszerű űrlap példa, három mezővel
  • form></form>: Ez a két tag nélkülözhetetlen egy űrlap készítéséhez — ezek nélkül nem tudsz webes űrlapot létrehozni. Minden webes űrlap a <form> taggel kezdődik és a </form> taggel ér véget.
    <form> tagnek van néhány attribútuma is, amelyeket a következő lépésben fogunk bemutatni. Fontos tudni azt is, hogy nem ágyazhatsz egymásba több különböző űrlapot.
  • <input> (vagy XHTML doctype esetén <input />): Ez a tag adja meg azt a területet, ahol információt írhatsz be. A fenti példában az input tagek definiálják a beviteli mezőket, ahová a látogatók beírhatják a nevüket és az e-mail címüket.
    Minden input tagnek kell legyen egy type attribútuma, amely megadja a mező típusát: a lehetséges értékektext (szöveg), button (gomb), checkbox (jelölőnégyzet), file (fájl), hidden (rejtett), image (kép), password(jelszó), radio (választógomb), reset (visszaállítás) és submit (küldés).
    Minden <input> tagnek kell legyen egy neve (kivéve néhány speciális esetben, amikor a value attribútum mindig ugyanarra van állítva, mint a type attribútum, például a tpye="submit" vagy "reset" esetében), amelyet te állíthatsz be kedved szerint. A name attribútum adja meg az űrlap elküldésekor az adatokat fogadó oldalnak (ami lehet egy adatbázis, vagy egy szerver-oldali szkripten keresztül küldött e-mail az adminisztrátornak), hogy mi a neve az input mezőben megadott információnak. Az űrlap elküldésekor a szkriptek általában a name attribútumot használják fel arra, hogy az adatot elhelyezzék egy adatbázisban, vagy olvasható formában elküldjék egy személynek.
    Éppen ezért, ha az input elem célja az, hogy a látogató megadhassa benne a nevét, akkor a name attribútum ennek megfelelően lehet name="nev" vagy name="csaladnev". Ha az input elem egy e-mail cím megadására szolgál, akkor a name attribútum legyen name="email". Hogy megkönnyítsd a saját és az űrlapot feldolgozó személy dolgát, mindig szemantikusan nevezd el az input elemeket.
    A szemantikus alatt itt azt értem, hogy a szerint nevezd el, hogy mi az elem funkciója, amint azt a fenti példában láthatod. Ha az input egy e-mail címet vár, akkor nevezd el ennek megfelelően name="email"formában. Ha egy utcacímet kérsz a látogatótól, akkor nevezd el name="utcanev" formában. Minél pontosabban nevezed el őket, annál könnyebb dolgod lesz később egy esetleges frissítés vagy módosítás során, ráadásul ezzel megkönnyíted a fogadó adatbázis vagy személy dolgát is, hogy könnyebben megértse a kapott űrlapot. Gondolkodj egyszerűen és törekedj a pontos elnevezésre.
  • Minden <input> tagnek kell legyen egy value (érték) attribútuma. Ezt állíthatod üresre — value="" —, ami azt jelzi a feldolgozó szkriptnek, hogy egyszerűen állítsa be, amit a felhasználó beírt a mezőbe. A jelölőnégyzetek, rádiógombok, rejtett-, küldés- és más típusú attribútumok esetén itt adhatod meg azt az értéket, amelyet alapesetben a mezőnek adni akarsz. Más esetekben, például küldés- és rejtett mezők esetében megadhatod azt az értéket, amely az elküldött érték lesz. Például value="yes" az igen gomb,value="submit" a küldés gomb, value="reset" a visszaállítás gomb, vagy value="http://www.opera.com"a rejtett átirányítás esetében.
    Néhány példa a value attribútum használatára:
    Lássunk egy üres értéket, amikor a felhasználó adja meg majd az attribútum értékét:
    • A kód így néz ki: <input type="text" name="keresztnev" id="keresztnev" value="" />
    • A felhasználó ezt írja be: Katalin
    • Az űrlap elküldésekor a keresztnev mező értéke „Katalin” lesz.
    Egy előre beállított érték:
    • A kód így néz ki: <input type="checkbox" name="levelezo-lista" id="levelezo-lista" value="no" />
    • A felhasználó bejelöli a jelölőnégyzeten, hogy csatlakozni szeretne a levelezőlistához.
    • A „levelezo-lista” értéke az űrlap elküldésekor yes lesz.
  • A két <input> elem után találhatsz valami mást — a textarea elemet.
    textarea egy szép, új, továbbfejlesztett szövegmezőt bocsát a rendelkezésedre a szövegek megadásához. Nem csak egy egyszerű, egysoros szövegmezőt, mint amit a barátja, az input biztosít. A textarea elem több soros bevitelt tesz lehetővé, sőt azt is megadhatod, hogy hány sorban adhasd meg a szövegedet a beviteli mezőben. Figyeld meg a cols és rows attribútumokat — ezeket minden textarea elemben meg kell adnod, mivel ezekkel definiálhatod, hogy hány oszlopa és hány sora legyen a beviteli mezőnek. Az értékek karakterszámra vonatkoznak.
  • Végül, de nem utolsósorban van egy speciális input elem is egy value="submit" attribútummal. Ahelyett, hogy ez egy egysoros beviteli mezőt készítene, az elem egy küldés gombot hoz létre, amelyre ha rákattint a felhasználó, akkor az elküldi az űrlapot arra a címre, amelyet az űrlap létrehozásakor megadtunk (jelen esetben ezt még egyáltalán nem adtuk meg, így az űrlap elküldésekor nem történik semmi).

Label címke hozzáadása

<form id="contact-form" action="script.php" method="post">
    <input type="hidden" name="redirect" value="http://www.opera.com" />
    <ul>
        <li>
            <label for="nev">Név:</label>
            <input type="text" name="nev" id="nev" value="" />
        </li>
        <li>
            <label for="email">E-mail:</label>
            <input type="text" name="email" id="email" value="" />
        </li>
        <li>
            <label for="megjegyzes">Megjegyzés:</label>
            <textarea name="megjegyzes" id="megjegyzes" cols="25" rows="3"></textarea>
        </li>
        <li>
            <input type="submit" value="küldés" />
            <input type="reset" value="visszaállítás" />
        </li>
    </ul>
</form>
Ez az űrlap a 2. ábrán látható módon jelenik meg a böngészőben:
Második, strukturált űrlap példa
  • Néhány új attribútum került be a <form> tag mellé. Hozzáadtam egy id attribútumot, nem csak a szemantikai okokból, hogy az űrlapnak legyen egy neve, hanem azért is, hogy legyen egy egyedi azonosítója, amellyel könnyebben lehet stílust rendelni hozzá CSS-ből, vagy módosítani rajta valamit JavaScriptben. Minden ilyen azonosítóból csak egy darab lehet egy adott névvel a lapon belül; jelen esetben az űrlap neve contact-formlett.
  • Fény, kamera, próba! Amikor az első űrlapon megnyomtad a küldés gombot, és nem történt semmi, az azért volt, mert nem adtunk meg hozzá semmilyen műveleted vagy metódust. A method attribútum szabja meg, hogy hogyan lesznek elküldve az adatok a feldolgozó szkriptnek. A két leggyakoribb metódus a „GET” és a „POST”. A „GET” metódus az adatokat a lap URL-jében küldi át (néha láthatsz ilyen hosszú URL-eket, mint példáulhttp://www.pelda.hu/page.php?data1=ertek1&data2=ertek2...; ezek mind olyan adatok, amelyek a „GET” metódussal továbbítódnak). Ha nincs konkrét indokod a „GET” metódus használatára, és érzékeny információkat akarsz továbbítani, akkor inkább ne használd ezt, mivel az URL-ből bárki láthatja ezeket az értékeket. A „POST” metódus az adatokat az űrlap szkriptjén keresztül küldi, vagy egy e-mailben az oldal adminisztrátorának, vagy az adatokat egy később hozzáférhető adatbázisba mentve, nem pedig az oldal URL-jében, mint a „GET”. A „POST” éppen ezért jóval biztonságosabb, így általában ez a jobb lehetőség.
    Ha számodra nagyon fontos az űrlap adatainak biztonsága, például hitelkártya számokat küldessz át egy kereskedő oldalról, akkor neked érdemes a https protokollt használnod, amely támogatja az SSL-t (Secure Socket Layert). Alapvetően ez csak annyit jelent, hogy az adatok a https protokollon keresztül lesznek elküldve, nem pedig a http protokollon. Legközelebb, amikor fizetsz valamiért a neten vagy online bankolsz, nézd meg az oldal URL-jét — valószínűleg a címe a https:// jelöléssel fog kezdődni, nem a megszokott http:// jelöléssel. A https kapcsolat valamivel lassabb, mint a http, viszont az adatok titkosítva vannak, így ha valaki lehallgatja az adatfolyamot, képtelen lesz bármilyen értelmes információt kinyerni belőle. Lépj kapcsolatba a tárhely szolgáltatóddal, hogy tudnak-e neked https-et és SSL-t biztosítani.
  • Az action attribútum adja meg, hogy melyik szkript fájl számára legyenek elküldve az adatok feldolgozásra. Sok tárhely szolgáltató biztosít egy alap e-mail küldő vagy más hasonló szkriptet (nézd meg a tárhely leírását), amelyeket a szervereikhez állítottak be. Másrészről használhatsz olyan szerver-oldali szkripteket is, amelyeket te vagy valaki más hozott létre az űrlap feldolgozására. Sok esetben ilyen célokra PHP, Perl vagy Ruby szkripteket használnak az űrlap adatainak feldolgozásához — például küldhetsz egy e-mailt, amely az űrlap adatait tartalmazza, vagy beírhatod az adatokat egy adatbázisba, későbbi felhasználás céljából.
    A szerver-oldali szkriptek írása túlmutat a jelen kurzus keretein, így most azt tudjuk ajánlani, hogy lépj kapcsolatba a tárhely szolgáltatóddal, hogy ők milyen hasonló szolgáltatásokat nyújtanak, vagy barátkozz össze egy programozóval.
    Az alábbi oldalakon találhatsz néhány leírást ahhoz, hogy elindulhass a szerver-oldali szkriptek írásában:
  • A második sor, amit az új űrlaphoz hozzáadtunk, egy „rejtett” (hidden) beviteli mező — ami egy átirányítás. Mi van?
    Abból a célból, hogy szétválasszuk a jelölés struktúráját a megjelenéstől és a működéstől, érdemes úgy megadni az űrlapot feldolgozó szkriptet, hogy az átirányítsa a felhasználót az űrlap elküldésekor. Valószínűleg nem akarod ilyenkor magukra hagyni a felhasználóidat bámulni az űrlapot, és azon gondolkodni, hogy most mégis mihez kezdjenek; gondolom te is egyetértesz, hogy jobb a felhasználót átirányítani egy köszönő oldalra, ahol egyúttal biztosíthatsz neki néhány „következő” linket is, miután elküldte az űrlapot. Ez a sor pontosan ezt teszi: miután az űrlapot elküldték, a felhasználót átirányítja az Opera főoldalára.
  • Az űrlap megjelenésének javításához az összes űrlapelemet egy rendezetlen listába tettem, így felhasználhatom ezt a jelölést, hogy világosan szétválasszam őket, majd CSS-ben megadjam a megjelenésüket.
    Néhányan talán ellenkeznek, hogy az űrlap elemeit nem egy rendezetlen listában, hanem egy definíciós listában kellene megadni. Mások azt mondhatják, hogy egyáltalán ne tegyük bele az elemeket semmilyen listába, hanem használjuk CSS-ben a <label> és <input> tageket. Én nem akarok erről senkivel vitatkozni, hanem rád hagyom, hogy eldöntsd, szerinted melyik megoldás helyesebb szemantikailag. Ehhez az egyszerű példához én rendezetlen listát használtam.
  • Végezetül, a második űrlapon már elneveztem az űrlap elemeit. Mind az érhetőség, mind a széleskörű hozzáférhetőség szempontjából nagyon jó ötlet, hogy neveket adj az űrlap elemeinek — a label elem segítségével — mivel ezek hozzákapcsolódnak a megfelelő textarea és input elemekhez, az egyedi azonosítókon keresztül (az id attribútumban), amelyeknek az értéke megegyezik a label elem forattribútumával. Ez nem csak azért jó, mert vizuálisan jelöli a különböző űrlapmezők funkcióját a képernyőn, hanem szemantikailag is értelmet ad a mezőknek. Például így egy képernyő-felolvasót használó látogató is pontosan tudni fogja, hogy melyik űrlap elem mit takar. Az id értékeket pedig felhasználhatod a CSS-ben a különböző mezők stílusozására is.
    Talán elgondolkodtál azon, hogy miért adtunk meg az űrlap elemekben egyszerre egy id és egy nameattribútumot is. A válasz az, hogy a name attribútum nélküli input elemek nem lesznek elküldve a kiszolgálóra, így azokra mindenképp szükség van. Az id attribútumokra pedig azért van szükség, hogy összekapcsoljuk az űrlap elemeket a megfelelő label elemekkel. Ezért mindkettőt használnunk kell.
A második űrlap már valamivel szebben jelent meg, de még mindig egyszerű, mint egy bot. Ideje hozzáadni néhány varázsbitet, hogy igazi stílust kapjon.

2014. március 9., vasárnap

Definíciós lista

A definíciós listák egyes elemeket kapcsolnak össze a definíciójukkal egy lista formájában. Ha például meg akarod adni a bevásárlólistán található elemek leírását, akkor ezt megteheted egy definíciós listával:
tej
Egy fehér, folyékony tejtermék.
kenyér
Sütött étel lisztből vagy korpából készítve.
vaj
Egy sárgás, szilárd tejtermék.
kávé
A kávébab termése.
A kifejezés és a definíció együtt egy definíciós csoport (vagy egy név-érték csoport). Annyi definíciós csoportot készíthetsz, amennyit csak akarsz, de legalább egy kifejezésnek és egy definíciónak szerepelnie kell mindegyik csoportban. Nem lehet kifejezésed definíció nélkül, és definíciód sem kifejezés nélkül.
Egy kifejezéshez kapcsolhatsz több definíciót is. Például a „kávé” kifejezésnek több értelme is lehet, és ezeket mind megadhatod:
kávé
egy ital pörkölt, őrölt kávébabból főzve
egy csésze kávé
a sötétbarna szín egyik árnyalata
Hasonlóan, ugyanahhoz a definícióhoz több kifejezés is tartozhat. Ez akkor hasznos, ha több kifejezésnek ugyanaz az értelme az adott kontextusban:
szénsavas üdítő
szörp szódával
kóla
Egy édes, szénsavas ital
A definíciós listák különböznek a többi listától, mivel kifejezéseket és azok definícióit tartalmazzák egyszerű listaelemek helyett.
Éppen ezért a definíciós listákat a <dl></dl> tagek határolják. Ezen belül meg kell adnod legalább egy <dt></dt> elemet (a kifejezésnek) és egy <dd></dd> elemet (a definíciónak); a <dt></dt> elem mindig az első kell legyen a listában.
Egy egyszerű definíciós lista a kifejezésekkel és a definíciókkal így néz ki:
<dl>
  <dt>Kifejezés</dt>
  <dd>A kifejezés definíciója</dd>
  <dt>Kifejezés</dt>
  <dd>A kifejezés definíciója</dd>
  <dt>Kifejezés</dt>
  <dd>A kifejezés definíciója</dd>
</dl>
Ez a következőképpen jelenik meg:
Kifejezés
A kifejezés definíciója
Kifejezés
A kifejezés definíciója
Kifejezés
A kifejezés definíciója
A következő példában egy kifejezéshez több definíciót is megadtunk, és fordítva:
<dl>
  <dt>Kifejezés</dt>
  <dd>A kifejezés definíciója</dd>
  <dt>Kifejezés</dt>
  <dt>Kifejezés</dt>
  <dd>Az előző két kifejezés közös definíciója</dd>
  <dt>Kifejezés két különböző értelemmel</dt>
  <dd>A kifejezés első definíciója</dd>
  <dd>A kifejezés második definíciója</dd>
</dl>
Ez a következőképpen jelenik meg:
Kifejezés
A kifejezés definíciója
Kifejezés
Kifejezés
Az előző két kifejezés közös definíciója
Kifejezés két különböző értelemmel
A kifejezés első definíciója
A kifejezés második definíciója
Általában nem szoktunk több kifejezésnek egy definíciót adni, de hasznos lehet tudni róla, hogy van ilyen lehetőség is, ha valamikor mégis szükséged lenne rá.

Definíciós lista

A definíciós lista nem csupán egy felsorolás, hanem a definiált elemek és a definícióik sorozata. Egy definícióhoz akár több elem is megadható.
A definíciós lista dl taggal, a definiált elem dt taggal, maga a definíció pedig dd taggal definiálható.
<dl>
  <dt>macska</dt>
  <dd>nyávogó, szőrös állat</dd>
  <dt>kutya</dt>
  <dt>eb</dt>
  <dd>ugaró, szőrös állat, kergeti a macskát</dd>
</dl>
Az eredmény:
Definíciós lista

12B 2024.04.16. helyettesítés

 Feladatokat ezen a linken találjátok: http://history.itwebguide.nhely.hu/tori_teszt.html az eredményről a képernyőképet kérem :D