Uvod u CSS Do sad smo se upoznali sa HTML elementima pomoću kojih ubacujemo i raspoređujemo sadržaj na našoj stranici. Kada pogledate sad vašu stranicu koju smo do sad kreirali morate priznati da ne izgleda ni približno onom što želite. Iz tog razloga postoji CSS i on će nam pomoći da doteramo stranicu do željenog izgleda. CSS je kao šminka za HTML. :) Najnovija verzija je CSS3 koja podržava u potpunosti CSS, samo što su dodate nove opcije, tako da ćemo u ovom nivou preći mnoštvo opcija koje nam nudi CSS, a u narednom ćemo se upoznati i sa tim novim koje nam nudi CSS3, kao što su pozadine, animacije, transformacije i svašta još nešto interesantno.
Kucanje CSS koda CSS kod se može kucati na tri načina: 1.
U HTML dokumentu između tagova: <style> .
2.
U samom HTML elementu pomoću atributa style:
Tekst
.
3.
U odvojenom CSS fajlu i onda se preko link taga uveze u HTML fajl. Kao što smo na kraju prethodnog nivoa kreirali naš CSS fajl i uvezli ga u naše strane, mi ćemo, samim tim, koristiti treći način kucanja koda, odnosno u eksternom fajlu. Razlog toga je vrlo jednostavan - da razgraničimo šta nam je:
CSS,
HTML i kasnije
JS kad budemo dodavali, nije baš najbolja praksa stavljati CSS u HTML. Evo prostog primera: Na svim stranama imamo navigaciju (index.html, o-nama.html, galerija.html...) i sad mi u index.html fajlu stilizujemo našu navigaciju pomoću načina 1 i 2 prethodno navedenih. Šta se onda dešava? Oni ostaju u index.html fajlu i vi kada odete na neku drugu stranicu, stilova nema i morate tamo da ih unesete. Pa dobro, možda će neko hteti tako da radi. Međutim, posle će ga stići glavobolja. :) Imamo da dodamo još jednu stavku u navigaciju i ona nam poremeti responsive, izgubi izgled i još ponešto (dešavaće se). Jao, muke! Sad treba u svim fajlovima na istom mestu dodati / prepraviti kod. Zašto se mučiti, kad sve možete imati na jednom mestu, odnosno u jednom CSS fajlu zasebno. :) Nadamo se da Vam je sad jasnije zašto nećemo opisivati 1 i 2 način, jer je
jednostavno loša praksa. Ako baš bude neophodno da nešto odradite na taj način evo ukratko... U head elementu strane možete dodati stilove na sledeći način: <style> ...
Ukoliko želite direktno u element, onda se to radi na sledeći način:
Sada ćemo preći i držati se našeg kreiranog fajla stilovi.css
Sintaksa CSS za neki element (bilo da pišete klasu, ID ili element) se sastoji izdva glavna dela: 1. Selektor 2. Jedna/više deklaracija.
Deklaracija se sastoji takođe od dva dela, a to su: 1. Svojstvo 2. Vrednost.
Selektori služe da se odredi kom elementu dodeljujemo stilove. U gornjem primeru nam je selektor h1 tag, tako da smo automatski svim h1 elementima na stranicama dodelili veličinu fonta na 24px. Deklaracijom definišemo svojstvo i vrednost koje želimo da dodelimo selektoru odnosno određenom HTML elementu . Svojstva mogu biti:
veličina fonta,
stil,
boja,
pozadina itd. Svako svojstvo ima svoju vrednost koja može biti: boja, veličina izražena u nekoj jedinici i slično. U narednim lekcijama ćemo se upoznati sa dosta svojstava i njihovih vrednosti, kako bismo Vam ukazali na opcije koje imate da stilizujete vašu stranicu što je bolje moguće.
Jedan selektor može imati jednu ili više deklaracija koje se nalaze unutar vitičastih zagrada {}. Anatomija pravila:
Selektori Selektori su jedan od najbitnijih aspekata u CSS -u i pomoću njih, kao što im ime kaže, selektujemo element koji želimo da stilizujemo. Selektore možete definisati na više različitih načina. Selektori mogu da identifikuju bilo koji HTML tag, ali mogu još mnogo toga da urade.
Univerzalni selektori se pišu kao * (zvezdica) i oni se odnose na sve elemente koje imate na strani. Vrednost univerzalnog selektora se može izmeniti ukoliko dodelite druge vrednosti ciljanom elementu. Ovaj selektor se često koristi za uklanjanje podrazumevanih margina i padinga sa svih elemenata. *{ margin: 0; padding: 0; }
Pomoću prethodnog koda smo uklonili svim elementima marginu i uvlačenja (to su one podrazumevane vrednosti, npr. za naslove za koje smo rekli da ćete kasnije moći pomoću CSS-a da ih promenite). Pa, ukoliko dodamo kod iznad u naš stilovi.css fajl možemo videti da su sve margine i uvlačenja nestala.
Element selektori Element selektori se koriste da neku deklaraciju dodelimo za sve elemente tog tipa. Na primer:ako imamo paragraf koji, kao što znamo, dodajemo pomoću
elementa, svim paragrafima možemo dodeliti, npr. boju slova da bude plava i veličina fonta na 14px: p{ color: blue; font-size: 14px; }
Umesto
taga, možete ubaciti bilo koji i dodeliti mu vrednosti koje želite. Na promer:
,
,
<section>...
ID selektori ID selektori se koriste da se definišu stilovi za jedan unikatan element iz razloga što, kao što smo rekli, jedinstveni ID možemo dodeliti samo jednom elementu (da ne dođe do zabune svaki element može imati ID, ali ne sme imati isti).
Selektor za ID je # (taraba) i na tarabu se nadovezuje ID. Na primer, ako imamo element:
Cao
i želimo tom ID-ju da dodelimo stilove, to radimo na sledeći način: #jedinstveni_podnaslov{ font-size: 26px; margin-bottom: 10px; }
Klasa selektor Klasa selektor se koristi bukvalno isto kao i ID, imaju sličnu sintaksu, samo što se umesto # (tarabe) stavlja . (tačka) i ovaj selektor ćemo najviše koristiti, jer nam klase omogućavaju dodelu na više elemenata, što nije slučaj sa ID-jem. To je zapravo suštinska razlika između ova dva tipa selektora - što se class selektori primenjuju na jedan ili više elemenata na stranici, dok se ID selektor primenjuje isključivo na jedan element. Na primer, ovaj HTML kod:
Podnaslov 1 Podnaslov 2
CSS izgleda ovako: .podnaslov{ font-size: 26px; margin-bottom: 10px; }
i onda nam svi podnaslovi imaju veličinu fonta od 26px i donju marginu od 10px.
Selektori za ugnežđene elemente Selektori za ugneždene elemente se koriste da definišemo, npr. za linkove čiji je kontejner div sa određenom klasom želimo da dodelimo neki stil. Deluje malo konfuzno, ali da bismo najbolje pojasnili ovo, pogledajte HTML kod ispod:
vidimo da ima tri linka u elementu
sa klasom zagljavlje-navigacija i sad ako mi, preko globalnog atributa, dodelimo neke stilove, npr. a{ neki stilovi } oni će se primeniti na sve linkove na strani, a nama to u ovom slučaju nije potrebno. Šta ćemo sada da radimo? Imamo dve opcije: 1. Da svakom linku dodelimo neku klasu (što Vam može nekad biti naporno). 2. Da koristimo selektor za ugneždene elemente. Prvi primer je objašnjen malopre, tako da smo ovde na drugom primeru i ovde ćemo Vam napisati dva koda, pa ćemo analizirati i jedan i drugi. nav a{ font-size: 16px; } nav.zaglavlje a{ font-size: 16px; }
Verovatno već vidite razliku između koda 1 i 2, a to je što smo u drugom dodali zaglavlje odmah uz nav selektor (bez razmaka). Šta je onda razlika između ova dva koda? U prvom slučaju, svi nav elementi na vašoj strani u kojima se nalazi neki link (a element) će dobiti svojstvo veličine fonta od 16px. U drugom slučaju će samo linkovi koji se nalaze unutar nav elementa koji ima klasu zaglavlje dobiti svojstvo veličine fonta od 16px.
Sada se možda pitate zašto nam je ovo potrebno. Evo jednog prostog primera. Imate nekoliko različitih vrsta navigacija na sajtu i sad svaku treba da stilizujete tako da su linkovi plave boje sa sivom pozadinom, na primer, i to radite na sledeći način: nav a{ color: blue; background: #eee; }
I pored toga imate neku navigaciju za koju želite da ima svojstva svih navigacija, međutim da joj veličina fonta bude 20px i onda umesto da kuckate opet color i background, za tu možete jednostavno dodati klasu na nav element: nav.posebna a{ font-size: 20px; }
Što se ovog nadovezivanja tiče, umesto klase može stajati i ID, samo što biste onda umesto tačke pisali tarabu (nav#neki_id). Da ne bude zabune, ovo pravilo važi za sve elemente, a ovde je za primer uzet nav, tako da može biti i:
div.klasa,
p.klasa,
a#id...
„Dete“ selektor „Dete“ selektor nam služi da tačno pokažemo od roditelja prema deci (odnosno ugneždenim elementima) koji element želimo da stilizujemo. Pre svega, pogledajte sliku da razjasnimo ko je kome ovde dete:
Ovde je bojom razdvojeno ko je kome dete, pa da zaključimo da:
div, sa klasom zaglavlje, ima decu header i nav;
header ima dete h1;
nav ima decu, odnosno 3 a elementa.
Znači, dete nekog elementa je onaj element koji je odmah prvi u njemu i sve tako hijerarhijski. „Dete“ selektor je > (veće manje znak) i njega upotrebljavamo na sledeći način. Hoćemo da selektujemo header i dodamo mu visinu od 100px: .zaglavlje > .zaglavlje-naslov{ height: 100px; } div.zaglavlje > header.zaglavlje-naslov{ height: 100px; } div.zaglavlje > header{ height: 100px; } div.zaglavlje > .zaglavlje-naslov{ height: 100px; } .zaglavlje > header{ height: 100px; }
Svih pet primera nam rade istu stvar (dodeljuju visinu header elementu od 100px), samo smo napisali nekoliko načina (sa „dete“ selektorom, možda ima još koji) da otprilike povežete kako selektori funkcionišu. Bitno je napomenuti da možemo i kombinovati vrste selektora, npr:
.zaglavlje > header a{ ... } – svi linkovi u elementu header, čiji je roditelj element sa klasom .zaglavlje;
ul > li a { .... } – svi linkovi unutar taga li, čiji je roditelj ul;
ul li a > i { ... } – svi elementi čiji je roditelj a, a nalaze se unutar li taga, koji se nalazi negde unutar ul taga
i tako dalje.
„Susedni“ selektori „Susedni“ selektori se pišu pomoću znaka + (plus), a da bismo ih razjasnili biće nam opet potreban HTML kod kao primer:
Ovaj selektor se koristi u formi ELEMENT1 + ELEMENT2, gde stilizujemo ELEMENT2 koji je odmah posle ELEMENT1 (ako je pre neće biti stilizovan). U slučaju sa slike, dodali smo dva selektora na ovaj način i stilizovali paragraf odmah ispod naslova i link ispod div elementa, kao što možete videti. Da ste dodali kod stilizovanja linka selektor p + div + a, takođe bi se stilizovao link, jer je pre div elementa element p.
„Svi susedni“ selektor Jedan sličan selektor ovom je „Svi susedni“, a koristi se pomoću karaktera ~ i pomoću njega selektujemo sve elemente ispod određenog. ELEMENT1 ~ ELEMENT2, što znači svi ELEMENT2 ispod ELEMENT1 će biti stilizovani, a ne samo prvi, što je bio slučaj sa prethodnim selektorom. Zadatak za vas je da u prethodnom primeru umesto h1 + p stavite h1 ~ p i vidite šta će se desiti.
Boja teksta Za podešavanje boje teksta koristimo opciju Color nasledeći način: p{ color:#000000; } p{ color:black; } p{ color:rgb(0,0,0); } p{ color:rgba(0,0,0,1); }
Sva četiri načina su identična i na ta četiri načina možede dodeljivati vrednosti za koje ide neka boja. 1. HEX vrednost boje – na primer #123123 2. CSS boje – na primer: blue, red, white.. 3. RGB vrednost boje 4. RGBA vrednost boje – RGB vrednost + 4 broj označava providnost (opacity) i ide u opsegu od 0 do 1.
Pozadine
Background Size Podešavanje veličine pozadine koja će Vam trebati, kako bi se vaša pozadinska slika uklopila različitim uređajima se može podesiti na više načina:
auto – podrazumevana vrednost originalne dimenzije slike;
veličina izražena u širini i visini, npr. 300px 150px, gde je 300px širina, a 150px visina. Ako je samo prva setovana, druga ima vrednost auto, odnosno prilagođava se toj širini koju ste podesili;
u procentima takođe prva vrednost označava širinu, a druga visinu i ako se druga izostavi, ima vrednost auto. Na primer, ako hoćete da Vam se slika u celosti prikaže bez obzira kakav je element, podesite vrednost 100% 100%;
contain – slika se poveća do najveće veličine tako da joj širina i dužina budu unutar elementa (svi delovi se vide ne gube se kao kod cover opcije).
cover – slika se podesi tako da lepo popuni prostor, s tim da se neki delovi slike neće prikazati (fina je opcija kombinovati ovo i background-attachment: fixed). Ova opcija se koristi na sledeći način: .zaglavlje{ background: url("../img/zaglavlje.jpeg") no-repeat fixed left bottom; background-size: cover; }
Background svojstva utiču na način kako se prikazuje pozadina nekog elementa. Za razliku od HTML -a, sa CSS -om se za svaki element može postaviti boja pozadine ili slika koja će predstavljati pozadinu. Pozadina se može skrolovati istovremeno sa stranicom ili ostati fiksirana. Ukratko, CSS je veoma proširio mogućnosti kontrole izgleda stranice. Za stilizovanje pozadine imamo nekoliko opcija, kao što su:
background-color
background-image
background-repeat
background-attachment
background-position. S tim da se sve ove opcije u zavisnosti od namene mogu spakovati u background. Za početak ćemo pojasniti svaku od ovih. Kasnije ćemo Vam pokazati kako se koriste sve zajedno.
Background Color
Ova opcija se koristi kada hoćemo da dodelimo nekom elementu pozadinu i za njene vrednosti možemo dodati boje na jedan od četiri načina koje smo naveli u prethodnoj lekciji. Kod bi izgledao ovako, ukoliko želimo da dodamo neku sivkastu pozadinu za celu stranu: body{ background: #eeeeee; }
Strogo je preporučljivo da ako postavite određenu boju kao vrednost svojstva background-color, takođe postavite i boju za svojstvo color, kako biste izbegli moguće kolizije i nečitljivost teksta ako korisnik u web čitaču promeni boju teksta.
Background Image Ova opcija služi da nekom elementu dodamo sliku kao pozadinu i kod bi izgledao ovako: .zaglavlje{ background-image: url("../img/zaglavlje.jpeg"); }
Pomoću url(“...”) definišemo putanju do naše slike. Ukoliko niste upoznati se definisanjem putanje onda to možete uraditi na nekoliko načina: 1. Link do slike, npr: https://images.pexels.com/photos/381949/pexels-photo381949.jpeg?h=350&auto=compress&cs=tinysrgb; 2. Putanja do fajla gde se nalazi slika. Kod prve opcije smo naveli link do slike sa sajta https://www.pexels.com/, koji ima fantastične slike, ukoliko Vam zatrebaju za sajt. :) Kod druge opcije bih se zadržao i detaljnije je razjasnio, jer će Vam trebati više nego link. vi se trenutno nalazite u folderu gde je vaš CSS fajl što znači u CSS folderu (bela linija / okvir):
ama je neophodno da se vratite jedan folder iznad, tj. da izađete iz CSS foldera kako biste ušli u img folder i to radite pomoću; ../. Nakon te komande ste u vašem „home“ direktorijumu i tu Vam se nalaze svi folderi i fajlovi. Sada treba da uđemo u img folder, pa nadovezujemo na našu putanju img/ i ona će izgledati ovako; ../img/ Nakon toga, u img folderu pronalazite sliku i njen naziv sa ekstenzijom nadovezujete takođe i dolazite tako do konačne putanje: ../img/zaglavlje.jpeg i tu putanju unosite u CSS kod.
Background Repeat Kada se kao pozadinska slika neke stranice postavi slika koja je po dimenzijama (dužini i širini) manja od stranice, tada web čitač tu sliku ponavlja duž horizontalne i vertikalne ose. Po difoltu, background-repeat ima svojstvo da ponavlja sliku i horizontalno i vertikalno dokle god ne ispuni širinu i visinu elementa koji se stilizuje. Sa ovom opcijom možemo to promeniti i dodeliti vrednosti:
repeat – podrazumevana vrednost (ponavlja i vertikalno i horizontalno);
repeat-x – ponavlja samo horizontalno;
repeat-y – ponavlja samo vertikalno;
no-repeat – ne ponavlja. Repeat opcija se najčešće koristi ukoliko imate neku teksturu kao pozadinu, pa ona treba da se ponavlja, odnosno poploča, dok repeat-x i repeat-y su malo manje zastupljene vrednosti. Background repeat opcija se koristi na sledeći način: background: color image repeat attachment position;
Pa bi neka skraćena verzija svega gore navedenog bila: .zaglavlje{ background-image: url("../img/zaglavlje.jpeg"); background-repeat: no-repeat;
}
i na ovaj način smo stilizovali element sa klasom zaglavlje da nam na pozadini bude slika zaglavlje.jpeg koja se ne ponavlja.
Background Attachment Ova opcija nam omogućava da fiksiramo našu sliku koju smo postavili kao pozadinu kada se skroluje (nešto nalik parallax-u ko je upoznat sa tim). Vrlo interesantna opcija sa kojom se može dizajn stranice učiniti još više zanimljivim i neobičnim.
Ova opcija se koristi na sledeći način: .zaglavlje{ background-image: url("../img/zaglavlje.jpeg"); background-repeat: no-repeat; background-attachment: fixed; }
Background Position Background Position koristimo da podesimo poziciju slike koju smo postavili kao pozadinu pomoću background-image opcije. Ako ova vrednost nije podešena, po difoltu će slika u svojoj originalnoj veličini biti podešena u gornjem levom uglu elementa koji stilizujete. Vrednosti koje možete dodeliti su:
left top
left center
left bottom
right top
right center
right bottom
center top
center center
center bottom (ukoliko za vrednost postavite samo jednu vrednost, tj. samo left, druga vrednost će biti center i to je isto kao da ste napisali left center)
x% y% - na primer 0% 0% je gornji levi ugao, 100% 100% je donji desni, ako definišete samo jednu vrednost druga je 50% kao podrazumevana. Primer koda za ovu opciju je: .zaglavlje{ background-image: url("../img/zaglavlje.jpeg"); background-repeat: no-repeat; background-attachment: fixed; background-position: left bottom; }
Ne morate imati svojstva background-repeat i background-attachment, mi samo nadovezujemo radi lakšeg razumevanja u nastavku lekcije i povezivanja nekih stvari.
Fontovi U CSS imamo nekoliko opcija sa kojima možemo stilizovati font teksta na stranici, kao što su:
font-family,
font-size,
font-weight...
Font Family Font Family nam služi da postavimo koji želimo font da koristimo. Kada koristimo ovu opciju najbolje bi bilo da stavimo više od jednog fonta, jer u slučaju da jedan ne može da se podrži, onda će se koristiti prvi sledeći. Da bude jasnije pogledajte primer: h1, h2, h3, h4, h5, h6{ font-family: "Times New Roman", Times, Serif; }
Ovim stilom smo dodelili svim naslovima (od h1 do h6) font Times New Roman. U slučaju da on iz nekog razloga ne može da se normalno učita, koristiće se font Times, a u slučaju da ni on ne može onda spadamo na poslednji, odnosno u ovom slučaju Serif. Ukoliko naziv vašeg fonta sadrži više od dve reči kao u našem slučaju Times New Roman on mora ići pod znake navoda.
Verovatno ćete retko kad koristiti fontove koji već postoje u CSS-u, tako da preporučujemo Google fonts.
Idite na Google Fonts.
Pronađite font koji želite i kliknite na crveni kružić sa ikonicom plus da Vam se željeni font prikaže u donjem desnom uglu:
Sada kliknite na taj crni panel koji Vam se prikazao (na gornjoj slici strelica ukazuje na njega).
Idite na tab „CUSTOMIZE“ i štiklirajte opcije koje su Vam potrebne (možete izabrati debljinu fonta, podršku za latinične i ćirilične karaktere ukoliko poseduje itd).
Vratite se na tab „EMBED“ i tu ćete videti kod za povezivanje ovog fonta sa vašom stranicom i CSS kod koji treba da ubacite kako bi se font primenio na elemente.
Primetićete da imate opciju kod koda za povezivanje „STANDARD“ i „@IMPORT“. Budući da Vam je verovatno opcija „STANDARD“ već poznata (ovaj kod stavljate u head element) želli bismo ovom prilikom da pojasnimo za šta služi @import.
@import opcija Ova opcija iće Vam od velike koristi kada budemo radili SASS, jer se tako formira grupa fajlova koje znatno olakšavaju stilizovanje vašeg sajta. Import opcija može imati vrednosti, kao što smo i pričali za link element, znači:
putanju do vašeg CSS fajla ili
link do CSS fajla. Sada ćemo iskoristiti opciju sa linkom, a kada dođemo do SASS-a, koristićemo putanje.
Bitno je da znate da imate mogućnost da u vaš CSS fajl uvezete druge CSS fajlove Na primer, ako imate fajl glavni.css u njega možete uvesti sve druge stilove i u HTML samo jednim link tabom koji povezuje vašu stranu i glavni.css fajl primenjujete sve stilove bez potrebe da svaki zasebno dodajete sa link elementima. Možda se neki pitaju: zašto ne bismo koristili jednostavno nama poznatu opciju koju nam ovde pruža „STANDARD“, tab odnosno link element? Evo odgovora... Je l' se sećate kad smo pričali da je loša praksa pisati CSS u HTML-u na svakoj strani zasebno zbog izmena? E tako je i sa fontom, zamislite imate 30 strana u kojima ste preko link taga podesili vaš font, npr. na Roboto i odjednom hoćete da ga promenite ili mu dodate još jednu opciju. Jao, muke ulazi u 30 fajlova, menjaj, pazi da nisi zaboravio negde! Zato mimoilazimo ovu opciju odmah u startu i lakše nam je da u tih 30 fajlova dodamo link tag koji nam povezuje CSS fajl, a u njemu samo na jednom mestu pomoću @import opcije dodamo naš font. I računica je jednostavna:
štedimo vreme ukoliko treba izmena
duplo manje koda (u html bi trebalo 60 linija ovako imamo 30 linija koda + 1 u css-u). @import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&subset=la tin-ext');
h1, h2, h3, h4, h5, h6{ font-family: 'Roboto', sans-serif; }
Ovim kodom smo kao i malopre dodali font style za sve naslove, na vama je zadatak da dodate:
jedan tip fonta za naslove, a
drugi tip fonta za sve ostale elemente pomoću globalnog selektora * (zvezdice).
Font Size Sa ovim stilom smo se već ranije susreli u nekim od prethodnih primera, ali da ga razjasnimo i naučimo nešto novo što nam ovaj stil pruža. Dakle, verovatno je svima jasno da ovim stilom definišemo veličinu fonta. Neke vrednosti koje nisu izražene u nekim jedinicama, već postoje u CSS-u su:
xx-small,
x-small,
small,
medium,
large,
x-large,
xx-large i preporučujem Vam da ih isprobate, ali upotreba im nije tako česta, jer će Vam najviše trebati opcija da podesite veličinu fonta tačno u piksel.
Podešavanje vrednosti u pikselima se vrši tako što napišete VREDNOST + PX. Znači, ukoliko želimo veličinu fonta od 20 piksela to ćemo uraditi na sledeći način: p{ font-size: 20px; }
Ova opcija ima jednu manu, a to je što se veličina fonta ne može promeniti iz podešavanja u pretraživaču, što može predstavljati problem osobama sa slabijim vidom. Treba imati u vidu ovu manu kada radite dizajn vašeg web sajta. Pored piksela (px) postoji još dosta jedinica koje možete koristiti da prilagodite, kako veličinu vašeg teksta, tako kasnije i drugih elemenata (širinu, visinu, margine, uvlačenja itd), tako da nije uskovezana za veličinu fonta. Promenljive jedinice koje je preporučljivo koristiti radi boljeg prikaza stranice na različitim uređajima:
em – u odnosu na font-size 2em je vrednost 2x većeg od trenutnog fonta;
ex – u odnosu na x-visinu trenutnog fonta (retko kad se koristi);
ch – u odnosu na širinu;
rem – u odnosu na veličinu korenskog elementa;
vw – 1vw = 1% širine vašeg prozora (znači 100vw je 100% širine vašeg prozora);
vh – 1vh = 1% visine vašeg prozora (znači 100vh je 100% visine vašeg prozora);
vmin – 1vmin = 1% vw ili vh u zavisnosti koja je manja vrednost za dati uređaj;
vmax – 1vmax = 1% vw ili vh u zavisnosti koja je veća vrednost za dati uređaj;
% - veličina u procentima. Najčešće ćete koristiti em, vw, vh i %, ali preporučujemo Vam da ih sve isprobate i steknete osećaj koliko koja jedinica zauzima prostora i da imate otprilike u glavi kad koju treba upotrebiti. Jedinice za fiksne veličine (one koje ne zavise od nekih drugih faktora) su:
cm,
mm,
in,
px,
pt,
pc.
Font weight Font weight opcija nam služi da postavimo debljinu našeg fonta, a neke od vrednosti koje možete koristiti su:
normal,
bold,
bolder,
lighter,
100, 200, 300, 400, 500, 600, 700, 800, 900,
inherit. Numeričke vrednosti od 100 do 900 predstavljaju debljinu fonta od najtanjeg (100) do najdebljeg (900), s tim da nam je: 400 = normal vrednost, a 700 = bold vrednost.
Pošto smo malopre objasnili kako se koriste Google fontovi, bilo bi dobro da obratite pažnju koje ste vrednosti za font weight štiklirali na početku, ukoliko se ne sećate, možete ih lako pročitati iz linka i samo te koristite kako biste došli do željenog izgleda. Naš link je bio: https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&subset=latin-ext tako da je jasno da imamo na raspolaganju vrednosti 300, 400, 500 i 700. Nemojte ručno u link nikad dodavati nove vrednosti, jer ih možda taj font ne podržava, uvek prego Google fonts sajta izgenerišite link. Ovu opciju koristimo na sledeći način: h1, h2{ font-weight: 700; } h3, h4{ font-weight: 500; } h5, h6{ font-weight: 400; } p{ font-weight: 300; }
Tekst Za formatiranje teksta CSS nam nudi nekoliko opcija pomoću kojih ravnate tekst, uvlačite redove, podešavate dekoraciju teksta, razmak između redova itd.
Text Align Ravnanje teksta horizontalno može biti: left, center, right, justify. Korišćenje ove opcije je vrlo jednostavno i izgleda ovako: 1. tekst u centru: text-align: center; 2. tekst na levu stranu: text-align: left; 3. tekst na desnu stranu: text-align: right; 4. tekst poravnan sa obe strane: text-align: justify.
h1, h2, h3, h4, h5, h6{ font-family: 'Roboto', sans-serif; text-align: center; } p{ font-size: 1.1em; text-align: justify; }
Text Decoration Dekoracija teksta nam služi da postavimo ili uklonimo neku dekoraciju sa teksta kao što je podvučen, precrtan tekst, linija iznad teksta itd. Vrednosti koje možemo dodeliti su>
none,
underline,
overline,
line-through,
blink,
inherit. Koriste se na sledeći način: a{ text-decoration: none; } span{ text-decoration: line-through; }
Kod link (a) elemenata podrazumevana vrednost je underline za text-decoration, pa samim tim, ukoliko unesete gore navedeni stil u vaš css fajl, sa svih linkova na stranici će Vam se skloniti taj podrazumevan stil, što će Vam najverovatnije zatrebati.
Text Transform Transformacija teksta nam služi da postavimo tekst unutar nekog elementa da bude: 1. ceo malim slovima, 2. velikim slovima ili 3. prvo slovo svake reči veliko. Vrednosti koje možemo dodeliti su:
none,
capitalize,
uppercase,
lowercase,
inherit. Ovaj stil se koristi na sledeći način: h1, h2, h3, h4, h5, h6{ font-family: 'Roboto', sans-serif; text-align: center; text-transform: uppercase; } p{ font-size: 1.1em; text-align: justify; text-transform: capitalize; }
Verovatno se sad pitate za šta će ovo nama, kada možemo jednostavno uneti, npr. za naslove - sva velika slova. Da, naravno, možete, ali kad kasnije naučimo nešto PHP-a i MySQL-a i napravite web aplikaciju gde korisnici sami unose naslove, sadržaj i slično, kako ćete njih naterati da unesu sve velikim slovima? Sad opet ima odgovor na to, pa možemo preko JavaScript-a ili u PHP pre čuvanja u bazi da prebacimo sve na velika slova, da možete i tako. Ali, šta ćemo ako prebacite sve u velika slova i posle mesec dana menjate dizajn u koji se ne uklapaju sva velika slova? Eto muke vaše gde treba posle veliko, a gde malo u naslovu, pa prepravljaj sve, :) Eto, nadamo se da polako kapirate kako treba sagledavati problem (zato smo učili Paju da kuva kafu u osnovama programiranja, da biste naučili kako da sagledate problem sa pitanjem „Šta ako?“).
Text Ident Pomoću ove opcije uvlačimo prvi red našeg teksta za vrednost koju smo postavili u procentima ili nekoj drugoj vrednosti koje smo objasnili u nekoj od prethodnih lekcija (px, em...). Koristi se na sledeći način:
p{ font-size: 1.1em; text-align: justify; text-indent: 30px; }
Word Spacing i Letter Spacing Ove dve opcije, kao što im i ime kaže, ukoliko prevedemo je razmak između reči i slova u tekstu. Koristimo ih na sledeći način: p{ word-spacing: 5px; letter-spacing: 2px; }
Line Height Line height nam omogućava da postavimo razmak između redova u tekstu. Njene vrednosti mogu biti podešene u:
procentima,
brojevima ili
nekom vrednošću izražene u jedinicama koje smo radili. Kada koristimo broj za vrednost ovog stila, on se izračunava po sledećoj formuli:
VELICINA FONTA * BROJ Što znači, ako nam je:
font-size: 20px, a
line-height: 2 onda je to isto kao da smo napisali da je line-heigh: 40px. Ova opcija se koristi na sledeći način: p{ word-spacing: 5px; letter-spacing: 2px; line-height: 1.5; }
Linkovi Linkovi imaju četiri različita statusa, a to su: 1. a:link – još nije korisnik kliknuo na njega odnosno pogledao šta se nalazi na tom linku; 2. a:visited – korisnik je kliknuo odnosno pogledao šta se nalazi na tom linku; 3. a:hover – trenutak kada je kursor miša preko linka; 4. a:active – u procesu klikanja (od trenutka kad korisnik klikne na link i ne pusti).
Nemojte da vas buni što uz link pišemo, npr. :hover ove dve tačke i sve posle toga su pseudo klase za element koji se nalazi pre : (dve tačke). Za sad se nećemo zadržavati na razjašnjenju pseudo klasa, jer će biti posebna lekcija samo za to.
Ukoliko koristite zajedno neke od gore navedenih opcija, bitno je kojim redosledom ih postavljate, jer poslednja dodata ima veću prednost u odnosu na prethodnu. Tako da ih po sledećemo redosledu koristite kako biste dobili željene rezultate: 1. :link, 2. :visited, 3. :hover, 4. :active. a:link{ color: #000000; } a:visited{ color: blue; } a:hover{ color: rgba(0, 0, 0, .5); } a:active{ color: #555;
}
Kod poslednja dva primera vas možda zbunjuje ova vrednost .5 i #555, pa da razjasnimo:
ako napišete za bilo koju vrednost .5 to je isto kao i da ste napisali 0.5. Znači, nula nije obavezna;
ako ne dovršite HEX boju i napišete samo, npr. #555 onda je to isto kao da ste napisali #555555. Znači samo se nadovežu prva tri koja ste napisali.
Liste Kao što znamo postoje tri vrste lista u HTML -u (unordered, ordered, definition). CSS nam pruža nekoliko opcija da stilizujemo najčešće unordered i ordered liste. Neke od tih opcija su:
Kontrolisanje oblika i izgleda markera.
Postavljanje slike na mesto markera.
Podešavanje udaljenosti između markera i teksta liste.
Podešavanje da li će se marker nalaziti izvan ili unutar liste gde su stavke.
List Style Type Po običaju, ordered list, kao što znamo imaju numeričke vrednosti (1, 2, 3...) ,dok unordered liste imaju crnu okruglu tačku ispred svake stavke. Pomoću CSS-a možete menjati ove vrednosti u :
kružić,
kvadratić,
rimske brojeve,
latinična slova itd. pomoću opcije list-style-type: ul{ list-style-type: square; } ol{ list-style-type: decimal-leading-zero; }
Ukoliko koristite Brackets ili neki napredniji editor, mogli ste primetiti da prilikom kucanja CSS koda, editor Vam sam izbacuje ponuđene vrednosti tako da Vam to može znatno olakšati kucanje koda, kao i da naučite neke nove vrednosti koje možda pre nisu postojale. Ukoliko, ipak, želite da vaša, npr. unordered lista nema nikakvih markera onda to postižete sa vrednošću none: ul{ list-style-type: none; }
List Style Position Po običaju, markeri su smešteni izvan okvira stavki liste, mada uz pomoć CSS-a vi ih možete smestiti i unutar stavki. Najbolja demostrancija za ovo je da postavimo neku pozadinu za naše stavke i pogledamo kako funkcionišu te dve vrednosti: 1. inside, 2. outside: ul li{ background: #CCC; list-style-position: inside; }
Zadatak za vas je da uočite razliku sa ovim kodom i nakon što dodelite vrednost outside za list-style-position. Ukoliko želite, možete i napraviti dve liste sa različitim klasama i jednoj dodeliti inside vrednost, a drugoj outside, pa uporedite tako.
List Style Image Umesto markera za listu koje nam nudi CSS, možete na njihovo mesto dodati i neku sliku po izboru, na sledeći način: ul{ list-style-image: url(../img/10.png); }
Vidite da smo ovde izostavili navodnike unutar zagrada kod definisanja putanje, to je takođe dozvoljeno. Ukoliko koristite ovu opciju, bilo bi dobro da istestirate na svim pretraživačima. Često može doći do odstupanja i neće se dobiti rezultat koji želite svuda isto. Rešenje za ovaj problem je da malo improvizujemo prethodno stečeno znanje i mimoiđemo opciju list-style-image, a pomoću opcija:
list-style-type i
background podesimo našu sličicu na mesto markera da izgleda isto na većini pretraživača. To ćemo uraditi na sledeći način: ul{ list-style-type: none; } ul li{ background-image: url(../img/10.png); background-position: 0px 5px; background-repeat: no-repeat; background-size: 5px 5px; padding-left: 20px; }
U zavisnosti od toga kakvu sliku želite na poziciji markera, možda će Vam trebati opcija background-size, a možda i ne. Takođe, možda budete morali da malo promenite vrednosti za background-position, jer ne mogu vam odrediti tačne vrednosti, zato što se one razlikuju od slike do slike. Opcija padding -left inače služi da uvučemo sadržaj elementa sa leve strane, u ovom slučaju za 20px,ali više o tome u narednim lekcijama kad budemo samo padding radili.
Boks Svaki HTML element na vašoj stranici se sastoji od jednog ili više pravouganih kutija. CSS -om se obično definiše kakve su to kutije, odnosno:
kolika im je širina,
visina,
udaljenost od drugih elemenata (margin),
linija koja uokviruje element (border) i
uvlačenje (padding). Kako bismo Vam što bolje objasnili ova svojstva kreirali smo jedan običan boks pomoću div elementa sa klasom boks i on izgleda ovako:
Uporedno pratite analizu koda sa slikom i delom HTML i CSS na slici.
Cela tamna površina (odnosno div element sa klasom boks) ima širinu od 300px i visinu od 300px koju smo postavili pomoću width i height i na taj način podešavate širinu i visinu za bilo koji element.
Padding: služi nam da uvučemo sadržaj unutar tog boksa, kao što vidimo na slici belim crticama je označen taj prostor koji smo uvukli na tamnom boksu i to je broj 1.
Border: ovo nam je linija oko boksa i prostor rezervisan za nju smo obeležili plavom bojom i rednim brojem 2.
Margin: ovo nam je udaljenost od ostalih elemenata, u ovom slučaju su to linije označene crvenom bojom sa rednim brojem 3. Za margin, padding i border smo dodelili 50px sa svih strana (gore, desno, dole, levo) i ako bismo želeli da izračunamo širinu elementa to se radi na sledeći način: margin left + border left + padding left + width + padding right + border right + margin right
Slično je i za visinu, samo umesto left i right, ide top i bottom i umesto width, ide height. Za ovu lekciju je bitno samo da razgraničite: gde šta ide, a u naredne tri lekcije ćemo reći nešto više o margin, padding i border svojstvima.
Margine Sa marginama smo se upoznali u prošloj lekciji i nadamo se da je jasno gde se ona nalazi. Znači, ona odvaja element za koji se postavlja margina od ostalih elemenata. Imamo četiri vrste margina: 1. margin-top – gornja margina; 2. margin-right – desna margina; 3. margin-bottom – donja margina; 4. margin-left – leva margina. Bilo bi dobro da u glavi, za svojstva margin i padding, uvek nabrajate po redosledu: 1. gornja, 2. desna, 3. donja, 4. leva.
Dakle, u smeru kazaljke na satu, zbog skraćenog pisanja koje vam znatno štedi vreme. Pa pogledajmo ovaj CSS kod: .element{ margin-top: 10px; margin-right: 20px; margin-bottom: 5px; margin-left: 15px; }
Jasno je koju smo vrednost za koju marginu postavili, ali se ovo skraćeno može zapisati i na sledeći način: .element{ /* Duzi nacin */ margin-top: 10px; margin-right: 20px; margin-bottom: 5px; margin-left: 15px;
/* Kraci nacin */ margin: 10px 20px 5px 15px; }
Prva stvar koja vam verovatno zapada za oči su ove kose crte i zvezdice. To su komentari u CSS-u. :) Kao što smo učili da treba pisati komentare u HTML -u, to je takođe bitno raditi i u CSS-u, jer ćete po fajlu imati verovatno na hiljade linija koda, pa je bitno dobro organizovati kod. Dakle, komentari u CSS-u se pišu na sledeći način: /* KOMENTAR */ Da se vratimo mi našim marginama. Kraći način za pisanje margine je vođen sledećim pravilom: margin: margin-top margin-right margin-bottom margin-left;
E sad, postoji još i kraći način (u zavisnosti kakve su Vam margine potrebne), ako se setite u prošloj lekciji smo stavili margin: 50px; pa postoje neka pravila ako izostavite ostale vrednosti:
margin: 50px; = margin: 50px 50px 50px 50px; - ako postavimo jednu vrednost ona će se primeniti i na sve ostale;
margin: 50px 20px; = margin: 50px 20px 50px 20px; - ako postavimo dve vrednosti one su nam za margin-top i margin-right i onda se preslikava na sledeći način:
1. margin-top = margin-bottom 2. margin-right = margin-left
margin: 50px 20px 10px; = margin: 50px 20px 10px 20px; - ako postavimo tri vrednosti onda će se ona druga primeniti na četvrtu, kao iz prethodnog primera po pravilu marginright = margin-left.
Vrednosti za margine mogu biti negativne.
Padding Sa CSS -om, svakom elementu se može dodeliti još jedna vrsta praznog prostora koja se na engleskom jeziku zove padding.
Padding je zapravo prazan prostor između strane elementa (njene bordure) i sadržaja tog elementa.
Taj prostor se može pojedinačno podesiti za svaku stranu elementa. Kao kod margina, opcija padding se može postaviti sa svih strana, različito pomoću: 1. padding-top, 2. padding-right, 3. padding-bottom, 4. padding-left ili 5. skraćenog zapisa koji važi kao kod margina: padding: padding-top padding-right padding-bottom padding-left; Gde je izostavljena jedna vrednost, dobija vrednost na osnovu pravila koje smo objasnili u lekciji margine. Padding koristimo na sledeći način: .element{ padding: 50px 20px; }
i na ovaj način smo postavili gornji i donji na 50px, a desni i levi na 20px. Ova opcija se koristi kada treba da uvučete sadržaj u osnovu na ivice elementa.
Vrednosti za padding stil ne mogu biti negativne.
Border Pomoću CSS -a svaki element na stranici može imati graničnu liniju, i to različitog stila, veličine i boje. Moguće je čak za jedan element definisati sve bordure različite (leva, desna, gornja i donja). Border opcija nam omogućava da definišemo kako će izgledati okvir našeg elementa, odnosno linija koja ga okružuje. Može biti:
neisprekidana linija,
isprekidana,
slika itd. Pre svega, da napomenemo da ovaj stil nije obavezan i ukoliko ga izostavite, naravno nećete imati nikakav okvir oko vašeg elementa.
Za korišćenje ove opcije možemo da postavimo vrednosti za tri svojstva: 1. border-style – stil linije (solid, dashed, none, hidden, dotted, double, groove, inset, outset, ridge); 2. border-color – boja linije; 3. border-width – debljina linije. CSS kod za, na primer, isprekidanu liniju debljine 5px, plave boje bi izgledao ovako: .element{ border-width: 5px; border-style: dashed; border-color: blue; /* ILI SKRACENO */ border: 5px dashed blue; }
Možete videti i da se ovo svojstvo može zapisati u skraćenom obliku na sledeći način: border: border-width border-style border-color;
CSS u praksi U ovoj lekciji ćemo isprobati neke stilove koje smo do sad naučili i malo ulepšati našu stranu. Već u narednom nivou ćemo ovladati tehnikama kreiranja rasporeda pomoću CSS a, responsive dizajna i sličnih stvari koje će nam pomoći da dovedemo sajt na viši nivo. Mi ćemo stilizovati našu index.html stranu koju smo napravili kroz ovaj kurs sa možda nekim korekcijama koje ćemo napomenuti, ali da krenemo deo po deo. Globalni stilovi (stilovi.css): @import url('https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&subset=la tin-ext');
body{ font-family: 'Roboto', sans-serif; padding: 0; margin: 0; background: #eee;
}
h1, h2, h3, h4, h5, h6, p{ margin: 0; }
a{ text-decoration: none; }
Ovo su neki globalni stilovi koje smo postavili, svi su nam već poznati, a cilj i je bio da uklonimo nepotrebne margine i linkovi da ne budu podvučeni. Uz to smo dodali font i pozadinu na body element, odnosno celu stranicu od vrha do dna.
Ovde smo dodali nekoliko stilova sa pozadinom kako bismo je učinili interesantnom. Prvo smo dodali glavni element div sa klasom zaglavlje i njemu podesio sliku za pozadinu. Nakon toga, u njemu smo kreirali još jedan element sa providnom pozadinom, pomoću opcije rgba, jer kao što smo rekli, onaj četvrti broj nam određuje providnost (od 0 do 1 gde je 1 neprovidno a 0 providno). Isto smo i nav elementu dodali providnu, ali belu pozadinu. Glavni sadržaj (Stilovi.css):
Podnožje:
Što se glavnog sadržaja i podnožja tiče tu smo samo dodali neke osnovne stilove kako bismo ih donekle učinili lepim. Nakon ovog osnovnog dela iz CSS-a prethodi Vam jedan zadatak, a nakon toga prelazimo na nešto naprednije opcije kao što smo spomenuli na početku ove lekcije.
Outlines Outline opcija je vrlo slična Border opciji koju smo obradili u prethodnom nivou. Čak se i vrednosti na isti način dodeljuju, pa da se prisetimo skraćenog oblika u ovom slučaju: div{ outline: 4px solid #123222; }
Gde vrednosti dodeljujemo po sledećem redosledu: širina - stil - boja. Sada, ukoliko isprobate i postavite na neki vaš element outline po gornjim instrukcijama, verovatno ćete se zapitati koja je razlika u odnosu na Border opciju, tako da ćemo sad nabrojati glavne razlike ove dve opcije:
Ne zauzimaju dodatan prostor, uvek se nalaze na ivicama boksa što može dovesti do preklapanja sa nekim drugim elementima.
Za razliku od Border opcije, gde smo mogli da podešavamo za svaku stranicu različite vrednosti (gore, desno, dole, levo), kod Outline opcije možemo postaviti samo jednu vrednost za sve stranice.
Nemaju uticaj na ostale elemente okolo, osim preklapanja.
Ne menjaju veličinu elementa (ko što je slučaj bio kod border opcije kada smo morali da računamo i njenu veličinu kako bismo dobili konačnu).
Mogu biti ne pravougani. Samo kratko da se podsetimo ukoliko ne koristimo skraćen zapis imamo postavke za:
outline-width – vrednost iskazana nekom jedinicom koje smo spominjali (px, pt, em...);
outline-style – stil outline-a (none, hidden, dotted, dashed, solid, double, groove, ridge, inset, outset);
outline-color – boja za outline (CSS boja, rgb, rgba, HEX).
CSS – Cursor Cursor opcija nam omogućava da promenimo podrazumevan pokazivač miša kad prelazimo preko određenih elemenata. Ona se koristi vrlo jednostavno na sledeći način: div{ cursor: alias; }
I na taj način smo podesili da kad god korisnik pređe mišem preko div elementa, kursor će mu u ovom slučaju biti kao običan sa nekom strelicom.
CSS – Overflow Pomoću overflow opcije definišemo kako će se naš element ponašati ukoliko izlazi iz nekog svog okvira koji je predviđen za njega. Da bude jasnije pogledajte sledeću sliku:
Sa leve strane možete videti rezultat HTML koda. Možete zaključiti da imamo div element kojem smo podesili da je visina 100px i stavili mu pozadinu #aaa i na slici ćete primetiti taj deo (označen je i strelicom). E sad, vaš zadatak je da ispod ovog div elementa sa klasom overflow dodate još neki element, npr. p element sa vašim odgovorom na pitanje i da vidite šta će se desiti.
Došlo je do preklapanja ovog dela koji ispada iz div elementa sa p elementom. To možete rešiti pomoću overflow opcije koja nam nudi sledeće vrednosti:
visible – podrazumevana vrednost i dobijamo rezultat kao sa slike;
hidden – sadržaj koji je izvan okvira se neće prikazivati;
scroll – sadržaj koji je izvan okvira se neće prikazivat,i ali naš element dobija scroll opciju tako da ga možemo videti ukoliko skrolujemo unutar elementa;
auto – ukoliko nam sadržaj ispada izvan okvira onda će se pojaviti scroll opcija, a ukoliko ne, ispada scroll opcija je sakrivena. Pored same overflow opcije koja nam služi da odredimo kako će se ponašati i po x i y osi možemo ih definisati i zasebno sa različitim vrednostima na sledeći način: div.overflow{ height: 100px; background: #aaa; overflow-x: hidden; overflow-y: auto; }
Display Pre nego što pređemo na opisivanje Display opcije hteli bismo prvo da vas uvedemo u celu tu priču pozicioniranja elementa. Sa ovom opcijom, odnosno lekcijom krećemo da pakujemo elemente na strani onako kako ste zamislili. Raspored elemenata na strani zavisi od nekoliko faktora, a neki od tih su:
dimenzije elemenat,
tipovi elemenata (block ili inline),
pozicioniranje elemenata,
odnos sa ostalim elementima u koje su ugneždeni i onima koji su u njih ugneždeni,
neke druge dimenzije (veličina ekrana, dimenzije slike...). Svaki element na stranici je prikazan u okviru jednog pravugaonikam odnosno tako se generiše. Postoje dve grupe u koje možemo svrstati elemente (po difoltu bez CSS -a), a to su:
1. blok level elementi i 2. inline level elementi. Blok level element se, kao što im ime kaže, prikazuju kao jedan blok, odnosno u punoj širini su ekrana (ako ne koristimo CSS ne možemo staviti ništa sa njihove leve ili desne strane), a takvi elementi su:
paragrafi (p),
naslov (h1-h6),
division (div) i
drugi slični.
Svaki blok element može u sebi sadržati inline ili druge block level elemente. Inline level elementi po difoltu (bez CSS-a) zauzimaju onoliko prostora koliko je taj sadržaj u njima. Da bude jasnije, za razliku od block level elemenata, inline elementi ne forsiraju prelome linija (da ne može ništa sa leve i desne strane da im bude). Takvi elementi su:
em,
span,
strong itd.
Inline elementi obično ne sadrže druge blok elemente već samo druge inline elemente ili neki tekst. Da bude jasnije za primer uzmite dva div elementa i u jedan ubacite vaše ime, a u drugi vaše prezime i vidite šta će se desiti, a posle toga isto to uradite samo sa span elementima. Sada ćemo Vam pomoću CSS-a i display opcije koji nam on nudi pokazati kako da menjate ove podrazumevane vrednosti i dodelite vašem elementu baš onu koja Vam je potrebna za željeno stilizovanje. Display opciji možemo dodeliti nekoliko osnovnih vrednosti, kao što su:
block,
inline,
inline-block,
none, dok neke naprednije, kao što su flex ćemo tek obraditi u nekoj od narednih lekcija.
Display Block
Ova opcija je podrazumevana za elemente koji se svrstavaju u blok elemente koje smo na početku lekcije objasnili, tako da nema potrebe da, npr. div elementu dodeljujemo stil display: block, dok na primer elementima iz grupe inline level će nam nekad biti potrebno, pa to radimo na sledeći način: a.block{ display: block; }
i na ovaj način smo svim a elementima sa klasom block dodelili da budu blok elementi. Sada tom linku možete postavit:
visinu,
širinu,
padding,
margine i
ostale stvari koje ste mogli do sad block level elementima. Uzeli smo za primer a element, jer ćete ovu opciju najčešće koristiti kod njega, na primer, ukoliko imate neku bočnu traku (sidebar) na stranici i kad ubacite samo link on će biti veličine kolika je dužina teksta, a vama je potrebno da taj link zauzima punu širinu bočne trake i to biste odradili display opcijom, podesite malo padding i savršeno :) Sa druge strane ako imamo neki paragraf (ili neki drugi element iz blok levela), a neophodno nam je da on bude inline to ćemo uraditi na sledeći način: p.inline{ display: inline; }
i sve paragrafe sa klasom inline smo stilizovali da budu inline. Pored opcije display:block i display:inline bilo bi dobro kada bismo imali nešto između, da bude inline, a da ipak možemo da mu podesimo visinu, širinu, marginu i slično, pa shodno tome, CSS je uveo i opciju display: inline-block koja je kombinacija gorenavedenih block i inline opcija. Ona se koristi na sledeći način: .inline-block{ display: inline-block; }
U gornjem levom uglu je prikaz HTML -a ispod je kod a desno je CSS. Primetićete u CSS-u da smo svima dodali padding: 15px, ali da se u prikazu HTML-a nije svuda primenala, to je zbog toga što inline elementi ne mogu imati padding, height, width i slične stilove (možete ih vi dodati nije greška ali se neće primeniti) dok vrednosti display i displayblock mogu poprimiti te stilove. Takođe, možete primetiti kako radi display-block kao kombinacija block i inline. I još jedna od osnovnih vrednosti za stil display je none. Koristi se na sledeći način: .none{ display: none; }
Kada koristimo ovu opciju element koji stilizujemo neće se prikazivati (kao ni elementi unutar njega). Često se koristi, na primer, ako imate neki padajući meni pa mu dodelite display: none, a kad se klikne na njega preko JS-a mu dodelite display: block ili preko CSS-a kad se pređe mišem da se prikaže meni.
Visibility Pomoću ove opcije možemo odrediti koji će nam element biti vidljiv na strani, a koji ne. Vrednosti koje možemo dodeliti ovom stilu su:
visible – podrazumevana vrednost, element je vidljiv;
hidden – element se ne vidi, ali se ne menja raspored strane;
collapse – ceo red ili kolona se sakrivaju, primenjuje se za redove, grupe redova, kolone i grupe kolona (kod tabela);
inherit – preuzima vrednost svog roditelja (ako je element iznad njega sakriven i on će biti). Sada se možda pitate koja je razlika između display:none i visibility: hidden, pa evo odgovora:
1. Kod display:none opcije sakrivamo element i on potpuno nestaje sa strane (kao da ne postoji) i neki drugi element će zauzeti to upražnjeno mesto sve dok on ima vrednost none; 2. Kod visibility:hidden mi samo sakrivamo element, ali on je i dalje tu, i dalje zauzima svoj položaj i neće mu neki drugi element zauzeti to mesto. Navedeno izleda kao na slici:
Position
Pozicioniranje elemenata je veoma bitno kako biste došli do željenog izgleda, pa je dobro razumeti i istražiti ovu opciju što više. Sa njom možete da odradite mnogo stvari, a mi ćemo se potruditi kroz neke primere da vam ukažemo na to kako koja vrednost funkcioniše. Od vrednosti koje ćemo obraditi za stil position su:
static (podrazumevano),
relative,
absolute i
fixed. Position staticje podrazumevana vrednost, na nju ne utiču stilovi, kao što su:
top,
right,
bottom,
left i
z-index.
Position relative Kod ove vrednosti naš element zadržava poziciju tu gde jeste, s tim da mu možemo dodeliti vrednosti, kao što su:
top,
right,
bottom,
left i
z-index. Pomoću ove vrednosti mi možemo preklapati jedne elemente sa drugima. Međutim, onaj prvobitan prostor, rezervisan za taj element, se ne smanjuje i ne pomera, već ostaje isti. Pre nego što nastavimo dalje, primetili ste verovatno nekoliko novih pojmova kao što su: top, right, bottom i left koje ćemo sad pojasnit,i dok ćemo z-index ostaviti za kraj ove lekcije. Pomoću ovih vrednosti pomeramo element za zadatu vrednost. Na primer: top: 40px; će nam pomeriti element od vrha za 40px.
Ukoliko koristimo neko od ovih svojstva sa position:relative važi pravilo da se pomera za zadatu vrednost od ivice tog elementa
Ukoliko koristimo neko od ovih svojstva sa position:absolute važi pravilo da se taj element pomera za zadatu vrednost od prvog pozicioniranog elementa (u nastavku će biti primera, pa će biti jasnije), a ukoliko nema pozicioniranih elemenata, onda se pozicionira za zadatu vrednost prema dokumentu. Position relative se koristi na sledeći način: .relative{ position: relative; }
Na vama je zadatak da kreirate element koji ćete stilizovati da bude positon:relative i dodeliti mu neki od stilova top, right, bottom, left (po mogućstvu isprobajte sve).
Position Absolute Malo je teže objasniti ovaj stil bez primera, ali neka neka okvirna definicija bude da se element pozicionira sa absolute vrednosti i postavlja unutar prvog pozocioniranog elementa, kao da je relative. Baš konfuzno, ali evo slike na kojoj ćemo dalje analizirati:
Imamo crveni boks sa nekim sadržajem koji smo pozicionirali relativno i unutar njega smo ubacili jedan element (beli) koji smo apsolutno pozicionirali i podesili mu gde se odnosi na .relative element pomoću top i left stilova.
Da nismo crvenom boksu dodelili position:relative, beli boks bi nam se pozicionirao po top i left vrednostima u odnosu na prozor (dokument) strane u slučaju da nema roditelja koji je pozicioniran.
Position absolute se vrlo često koristi u naprednijim dizajnima kada neki element treba da postavimo iznad okvira,
Position Fixed Kao što mu samo ime kaže, definišemo da taj element bude fiksiran tako da u slučaju skrolovanja element će stajati kao zakačen (neće pobeći gore).
Česta upotreba ovog elementa je kod navigacija koje treba da budu fiksirane za vrh strane ili bočna traka i tsl. Da bismo videli kako to izgleda u praksi, fiksiraćemo navigaciju koje smo stilizovali u prošlom nivou, pa će kod izgledati ovako: .zaglavlje-navigacija{ background: rgba(255, 255, 255, .8); height: 45px; line-height: 45px; position: fixed; left: 0; right: 0; top: 0; z-index: 10; }
Zadatak za vas je da odradite isto sa vašom navigacijom, odnosno da je fiksirate. U ovom kodu možete primetiti da smo dodali još jednu novu vrednost, a to je z-index. Zindex možemo primeniti samo na pozicioniranim elemntima koja imaju vrednosti: 1. relative, 2. absolute ili 3. fixed. Služi nam da se igramo sa slojevima (layers) i element sa većom vrednošću z-index će biti bliži nama, odnosno biće vidljiiji.
Z-index može imati i negativne vrednosti, a podrazumevana vrednost je nula.
U prethodnom primeru smo postavili z-index na 10 i on nam je trenutno najbliži i biće uvek vidljiv. Nijedan element ne može iči preko njega. Zadatak za vas je da nekom elementu dodelite z-index 11 i vidite šta će se desiti sa vašom navigacijom. Ne zaboravite pre toga da pozicionirate element! Mi smo našem naslovu dodali position: relative; z-index: 11; i dobili sledeće:
Float Pomoću float opcije možemo „gurnuti“ elemente u levu ili desnu stranu. Ova opcija se može koristiti na svim elementima koja nisu pozicionirana apsolutno (position:absolute). Vrednosti koje možemo dodeliti su:
left – guramo ga na levu stranu,
right – guramo ga na desnu stranu,
none – skidamo već zadate float vrednosti.
Ovde možete videti deo početne stranice iz prethodnog nivoa. Ako se sećate, lekcije su bile jedna ispod druge. Sada kada smo im dodali stil float: left, one se guraju levo i automatski se nadovezuju jedna na drugu. Da smo stavili float:right otišle bi u desno. Ukoliko želite da prelomite kod nekog elementa i da tu ide nov red, a ne da se nadoveže na već poređane elemente, koristi se opcija clear. U ovom slučaju gde koristimo float: left clear opcija bi izgledala ovako: .clear{ clear: left; }
I elementu koga želimo u novom redu dodelim klasu clear.
Pozicioniranje Naučili smo kako da pozicioniramo tekst (left, right, justify, center), da podesimo širinu i visinu nekom elementu i još neke osnovne stvari. U ovoj lekciji ćemo videti šta još možemo sa tim opcijama uz promenu nekih vrednosti. Ukoliko imate element neki na strani za koji želite da mu širina bude 400px, verovatno znate kako ćete to uraditi, prosto i jednostavno: .element{ width: 400px; }
I sad pogledate vaš ekran i vidite da je vaš element prilepljen uz levu ivicu ekrana, a vama je potreban baš centriran. Zato imamo vrednost auto kod margine koja će ga izravnjati na sledeći način: .element{ width: 400px; margin: auto; }
Samo je bitno da nam leva i desna margina bude auto, dok su gornja i donja promenljive. Ovo važi za blok level elemente, dok ukoliko je vaš element sa klasom .element u grupi inline neophodno je preko CSS -a da ga učinite:
block ili
inline-block elementom.
Kod nekih modernijih sajtova možete videti početni ekran sa navigacijom, dobrodošlicom preko celog ekrana i obično negde pri dnu ima ikonica ili dugme za skrolovanje. Kako podesiti da uvek bude baš tu dole centrirana na svim ekranima? Pa, hajde da napravimo i naše zaglavlje da bude preko cele strane. Ukoliko ste donekle pratili naš raspored elemenata, trebalo bi da dobijete ovakvo zaglavlje:
HTML kod bi trebao da Vam bude nalik ovom:
<section class="glavni" id="glavni"> Lekcije
Obratite pažnju na to da smo uhvatili pred kraj i deo section elementa kojem smo dodelili id glavni. iz razloga što smo prethodno dodatom dugmetu „Pogledaj više“ dodali atribut href sa vrednošću #glavni, jer, kao što smo naučili kod linkova, oni mogu voditi na određene delove strane. I na kraju CSS kod bi trebao ovako da izgleda: .zaglavlje{ background: url(../img/zaglavlje.jpeg)no—repeat fixed center center; background—size: cover; }
.zaglavlje—pozadina{ background: rgba(0, 0, 0, .5); text—align: center; min—height: 100vh; position: relative; }
.zaglavlje—navigacija{
left: 0; right: 0; top: 0; z—index: 10; padding: 15px 30px; }
.zaglavlje—navigacija a{ color: white; font—weight: 500; display: inline—block; padding: 5px 10px; }
.zaglavlje—navigacija a:hover{ color: #aaa; }
.zaglavlje—naslov{ padding: 35vh 0 0; }
.zaglavlje—naslov h1{ color: white; font—size: 3em; text—transform: uppercase; }
.zaglavlje—pozadina .skrol{ position: absolute; bottom: 15px; left: 0; right: 0; }
.zaglavlje—pozadina .skrol a{ color: white; display: inline—block; padding: 5px 15px; border: 1px solid white; }
Pseudo-class CSS pseudo klasenam omogućavaju da dodelimo stilove elementima u različitim stanjima, kao što su: hover, active, focus i slične (pričali smo kod linkova o ovim stanjima). Pored toga, možemo ih koristiti i da selektujemo:
prvi,
poslednji ili
neki drugi element u nizu. Pošto smo već naučili koje pseudo klase imamo kod linkova (:hover, :active, :link, :visited, :focus), sada ćemo reći nešto više o selektovanju elemenata iz nekog niza. Uzećemo neku neodređenu listu za primer: Stavka 1 Stavka 2 Stavka 3 Stavka 4
Iako je nama potrebno da stilizujemo samo li element, gde je tekst „Stavka 1“, a za njega nemamo određenu klasu ili id, možemo to uraditi pomoću pseudo klase:
:first-child ili
:first-of-type, ako nam je potrebna poslednja stavka onda to možemo uraditi pomoću:
:last-child ili
:last-of-type,
dok ako nam je potrebna neka između stavka, to možemo odraditi pomoću :nth-child(N), gde nam N može predstavljati:
redni broj stavke,
reč (even ili odd) za sve parne ili neparne elemente u nizu,
izraz xn+y, gde su nam x i y brojevi (na primer 1n, 2n, 2n+1...). Pored toga, ako hoćemo sve sem prvog elementa da selektujemo možemo koristi :not(:first-of-type), u ovom slučaju na mestu first-of-type se može naći i neki drugi selektor (klasa, id, globalni selektor itd) koji ne želimo da stilizujemo tim stilom. Zadatak za vas je da napravite neku listu od 15-ak stavki i da joj dodelite sledeće stilove, takođe da ih isprobate na razne načine da vidite kako funkcionišu: /* u svim elementima velicina fonta 15px */ ul li{ font—size: 15px; }
/* prvom elementu boja blue i velicina fonta 18px */ ul li:first—of—type{ color: blue; font—size: 18px; }
/* poslednjem elementu boja crvena */ ul li:last—of—type{ color: red; }
/* neparnim elementima pozadina #eee */ ul li:nth—child(odd){ background: #eee; }
/* parnim elementima pozadina #ddd */ ul li:nth—child(even){
background: #ddd; }
/* svakom cetvrtom elementu bold, 12px */ ul li:nth—child(4n+1){ font—weight: bold; font—size: 12px; }
/* svakom e1ementu sem 2 u nizu padding 16px */ ul li:not(:nth—child(2)}{ padding: 10px; }
Pseudo-elements Pseudo elementi vam omogućavaju da stilizujete neke delove elementa bez dodatnih elemenata, klasa, id-jeva i sličnih stvari koje bi vaš kod učinili samo težim za čitanje a i menjanje kasnije. Pseudo elementima, za razliku od pseudo klasa, pristupamo pomoću :: (dve tačke). selektor::pseudo-element{...}
Neki od pseudo elemenata su:
::first-line – stilizujemo prvi red teksta,
::first-letter – stilizujemo prvo slovo teksta,
::before – dodavanje sadržaja pre elementa,
::after – dodavanje sadržaja posle elementa. Za vas je zadatak da dodate neki tekst na stranicu pomoću paragrafa i dodelite mu klasu koju želite. Nakon toga u stilovima pomoću pseudo elemenata za prvi red i prvo slovo stilizujte, npr. da prvo slovo bude veliko i druge boje, a prvi red da bude boldiran.
.klasa::first-letter{ ... },
.klasa::first-line{ ... }.
Mi ćemo se malo više zadržati kod druga dva pseudo elementa: before i after sa kojima može da se napravi nešto interesantno. Za sad, mi ćemo doterati zaglavlje još, tako što ćemo ispod naslova dodati još neki tekst koji je razdvojen crticom. Izgledaće ovako:
A ovo smo postigli sledećim kodom:
Vidite da smo na .zaglavlje-naslov h1 dodali pseudo element ::before i onda ga stilizovali.
Content stil nam je ovde neophodan i stavili smo da bude prazan. Da smo ubacili neki tekst on bi se pojavio na mestu crtice, ali nije preporučljivo na ovaj način dodavati tekst, jer nam za to služi HTML. Nama je ovde cilj da ulepšamo tekst. Pomoću svih ostalih opcija:
position,
right,
left,
bottom... smo stilizovali crticu da bude širine 30px i visine 5px, a nakon toga je obojili u belu boju. Kada bismo promenili ::before u ::after dobili bismo isti rezultat, ali ja sad imam za vas jedan interesantan zadatak. Potrebno je da koristite oba pseudo elementa, znači i before i after, i pomoću njih da postavite ovu belu crticu i iznad i ispod teksta.
Možete duplirati kod i samo promenite before u after i još nekoliko stilova kako bi ona prešla iznad naslova.
Responsive CSS nam nudi mogućnost da pomoću @media opcije stilizujemo stranicu tako da bude prilagođena svakom uređaju: 1. mobilni, 2. tablet, 3. laptop, 4. desktop.... Koristi se u sledećoj formi: @media not|only tip and(uslov) { ... }
Tipovi mogu biti:
all – svi tipovi,
print – za štampanje,
screen – desktop, laptop, tablet, telefoni...
speech – za čitače stranica.
Pored ova četiri tipa bilo je i: tv, projection, handheld..., ali su oni zastareli, pa ih nećemo navoditi. Na primer, ako želite da stilizujete vašu stranicu za sve uređaje sa maksimalnom širinom od 500px, to radite na sledeći način: @media all and(max-width: 500px){ CSS KOD KOJI INAČE KUCATE } Pošto se često dešava da nešto ne radi kako treba, neki razmak ste zaboravili u deklaraciji ili tome slično evo koda pomoću kog možete da testirate da li ste ok podesili @media opciju: @media all and (max-width: 500px){ body{ display: none; } }
Kada Vam nestane sve sa ekrana, to je znak da sve radi i da je to uređaj/širina ekrana za koje možete uneti stilove.
CSS3 Kroz prethodne lekcije smo obrađivali najpoznatije stilove koje ćete svakodnevno koristiti, pored njih kroz nekoliko lekcija se provlači nekoliko stilova koji spadaju u CSS3, ali to vas ne treba da brine. Apsolutno nije bitno šta spadau CSS, a šta u CSS3.
CSS3 je samo skup dodatnih stilova koje se nadovezuju na CSS. U ovoj lekciji nabrojaćemo vam neke nove stilove, kako se i gde se koriste, jer bi trebalo do sad da bude jasna forma pisanja CSS koda, tačnije selektor{ css }.
Ono što je bitno napomenuti da neki stilovi nisu podržani u svim pretraživačima. Pa su im potrebni određeni prefiksi:
-webkit- Safari, Chrome,
-ms- Internet Explorer,
-o- Opera,
-khtml- Konqueror,
-moz- Mozilla Firefox. Međutim, većina pregledača radi na tome da standarizuje sve stilove. Mi ćemo u narednom nivou raditi SASS kako bismo bili 100% sigurni da će nam stilovi biti primenjeni onako kako želimo na većini pretraživača, tako da vas nećemo zamarati sad da koristite ove prefikse, jer ih je stvarno naporno kuckati.
border-radius – služi nam da zaoblimo ivice nekog elementa, vrednosti su mu u jedinicama koje smo radili (px, %). Ukoliko stavite vrednost na 50%, dobićete potpuno okrugli element. Isprobajte ovaj stil na strani gde imate slike img{ border-radius: 50%
background: linear-gradient( pravac, boja1, boja2, ... ); - preporuka da koristite ovaj alat ili neki sličan za generisanje ovakvih pozadina, jer ih nije jednostavno pisati iz glave: Gradient Generator
text-overflow: clip | ellipsis; - sakriva nam tekst ukoliko je izvan okvira; koristi se sa white-space: nowrap; i podešenom širinom width: VREDNOSTpx;
break-word: normal| break-word; - prelama reč ukoliko je predugačka
word-break: normal | break-all | keep-all; - prelamanje linija za tekst
box-shadow: offset-x offset-y blur-radius boja; - vrlo interesantna opcija koju možete na boksove dodavati, isto preporučujemo generator: Border Radius
text-shadow – isto kao box-shadow samo se primenjuje na slova u tekstu
transform – služi nam da zumiramo, rotiramo, menjamo pogled na element i još svašta nešto u 2D ili 3D obliku, takođe preporučujemo neko od onlajn alata: CSS Transform Generator, CSS 3D Transform
transitions – neophodan stil kada radite sa :hover efektom, jer mu pomoću ove opcije postavljate da se polako izvršava i bude prijatnije za korisnika, takođe preporučujemo generator CSS3 Generator (na ovom imate više, pa može da Vam posluži)
animations – animirajte element (na primer, da vam se vrti ili pomera non-stop i slično) - CSS Animate
box-sizing: border-box; - pomoću ovoga definišemo da nam element ima zadatu širinu (da se ne sabira border i padding). Ovih nekoliko stilova koje vam nismo pojasnili je neophodno da isprobate sa navedenim generatorima ili da pronađete neki odgovarajući.
CSS3 – Flexbox Flexboxsmo ostavili za kraj ovog dela, jer bismo želeli da Vam ga objasnimo što je bolje moguće. Pomoću njega možete kroz nekoliko minuta doći do željenog rasporeda svih elemenata na strani. Za početak je potrebno da imate neki glavni element i u njega ugnežđene ostale:
Zatim ćemo u CSS otkucati sledeće: .kolona-3{ display: flex; }
I možete primetiti da su se elementi koji su unutar div .kolona-3 poređali jedan pored drugog. E sad na red dolaze stilovi koji idu uz display: flex; i pišu se kao stil za div.kolona3. Da odredimo pravac kojim ćemo ređati elemente: flex-direction: row | row-reverse | column | column-reverse; Da li će elementi prelaziti u nov red, ukoliko je širina zauzeta (korisni kod responsive dizajna) preporučujemo da odaberete vrednost wrap, jer vam je ona verovatno potrebna: flex-wrap: nowrap | wrap | wrap-reverse; Da odaberete kako će vam elemeti biti poređani po x osi (isrobajte sve vrednosti): justify-content: flex-start | flex-end | center | space-between | space-around; Da odaberete kako će vam elementi biti raspoređeni po y osi (isprobajte sve vrednosti): align-items: flex-start | flex-end | center | baseline | stretch; Da odaberete kako će vam elementi biti raspoređeni u okviru roditelja u ovom slučaju div.kolona-3 elementa po y osi (suprotno od justify-content): align-content: flex-start | flex-end | center | space-between | space-around | stretch;
Pored gornjih opcija, imamo opcije i za elemente koji su deca onog gde smo postavili display: flex; u ovom slučaju su to tri div elementa, a opcije su: Određujemo redosled prikaza elementa (manji broj se pre prikazuje), pa možete staviti da se drugi div prikazuje pre prvog i slično: order: ; Određujemo koliki prostor će nam element zauzeti u redu (veći broj - veći prostor): flex: ;
Vrednosti kod flex i order moraju biti celobrojne. Da izdvojimo jedan element od ostalih: align-self: auto | flex-start | flex-end | center | baseline | stretch; Sad je pitanje kako to u praksi primeniti. :) Pa evo, primera kako napraviti neki raspored za vašu stranicu: