nav_dugme codeBlog codeBlog
  • početna Početna stranica
  • Sačuvani članci Sačuvani članci
  • Članci
     (spisak)
  • Kontakt
Povratak na vrh stranice

Info & povezani članci Info o članku - dugme

Info

trejler_sat Datum objave: 29.09.2020.

trejler_dokument Jezici: HTML,
CSS

trejler_teg_narandzasti Težina: 4/10

HTML
CSS
dom
web dizajn
internet
frontend
teorija

Tema: Web dizajn

1. Početni koraci2. Klasa - Id - Interni i linijski CSS4. Tagovi div i span - Flex box5. HTML 5 struktura i tagovi - Podela stranice6. Responzivni web dizajn7. Podešavanja editora i efikasna obrada tekstaUvod u JavaScript i DOM (Document Object Model)

Povezani članci

Osnove računarske grafike i formati slika u web dizajnuFontovi u web dizajnu (osnove tipografije)Pokretanje lokalnog web serveraUvod u PHP i back-end programiranjeStruktura web adresa i pristup internet stranicamaNapredni parametri internet pretrageLokalno skladištenje podataka browsera (sessionStorage, localStorage, cookies)Izbor prvog programskog jezikaAsinhrono programiranje u JavaScriptuASCII, Unicode i UTF - Predstavljanje znakova na računarima
Svi članci
The only way to learn a new programming language is by writing programs in it.
Dennis Ritchie

Uvod u web dizajn - 3. deo - CSS Box i pseudoklase

Facebook LinkedIn Twitter Viber WhatsApp E-mail
zoom_plus zoom_minus bookmark
početna > Članci > Saveti

Uvod

U praktičnom smislu, može se reći da je suština modela CSS box sadržana u sledećem zadatku: kako od običnog linka ....

Link

.... napraviti dugme:

Link

Elementi deluju različito (gornji element deluje kao običan tekstualni link a donji kao pravo dugme), međutim, u smislu HTML strukture, oba elementa su definisana na identičan način (kao linkovi, preko <a> tagova).

Podešavanjem CSS svojstava, običan tekstualni element lako može poprimiti spoljni oblik osenčenog polja tabele, dugmeta ili nekog drugog jednostavnog grafičkog elementa ....

Šta je CSS box

U web dizajnu, termin "CSS box" označava (teoretski i praktični) model, koji - uz upotrebu određenih atributa (i odgovarajućih vrednosti), omogućava da od (skoro) svakog HTML elementa nastane grafički objekat sa definisanim dimenzijama, obojenom pozadinom, ispunom, bordurom i zaobljenim ćoškovima, tako da svaki od navedenih detalja (po želji i u skladu sa potrebama), može - ali i ne mora - biti prisutan.

box model
Slika 1. - Model 'CSS box': sadržaj kome se mogu zadati dimenzije, uokviren je ispunom, posle čega dolazi bordura (tj. ivica); margine odvajaju element od okolnih elemenata, a postoje i dodatne opcije (koje ćemo prikazati u nastavku).

Pored prethodno navedenih svojstava, box model podrazumeva i margine, koje zapravo ne pripadaju unutrašnjosti objekta (niti se vide), već primiču ili odmiču objekat od drugih objekata (a prisutno je i nekoliko dodatnih ukrasa manjeg praktičnog značaja kojima nećemo posvećivati pažnju, već ćemo pustiti čitaoce da ih sami otkriju).

Pogledajmo delove box modela redom ....

Sadržaj

U središnjem delu box modela, nalazi se sadržaj, koji može biti tekstualnog ili grafičkog tipa (videti sliku #1).

Dimenzije centralnog dela mogu se zadati preko atributa width i height, ali, moramo obratiti pažnju: ukoliko je element koji treba stilizovati neki od inline elemenata (kao što je slučaj sa <a> tagovima), dimenzije neće biti prihvaćene (dok će ostali parametri: boje, oblik i veličina slova i sl - biti prihvaćeni).

Takozvani DOM model (u najpraktičnijem smislu: stablo koje nastaje preko podataka iz HTML i CSS datoteka, i predstavlja strukturu web stranice), ne dozvoljava zadavanje dimenzija inline elementima, već samo blok elementima.

Pošto je naša namera da od tekstualnog linka napravimo 'dugme', tekstualni link se prvo mora proglasiti za blok element (a definisaćemo i druge relevantne atribute).

		
.dugme {
	display:          block;
	width:            150px;
	height:           50px;
	text-align:       center;
	text-decoration:  none;
	background-color: #0044bb;
	color:            #ffffff;
	font-weight:      bold;
}
		
	
Slika 2. - CSS atributi koji definišu dugme (još uvek ne u potpunosti).
Link

Kao što vidimo, element više ne liči na običan tekstualni link, ali - ne izgleda baš ni kao dugme (zapravo mu samo fali vertikalno centriranje i, po želji, zaobljavanje ćoškova).

Međutim, neposredno vertikalno centriranje (u situaciji kada je visina zadata direktno), nije podržano, i stoga ćemo isključiti zadavanje visine ....

Link

.... i koristićemo drugi pristup: umesto upisivanja visine, definisaćemo ispunu sa unutrašnje strane.

Padding (ispuna)

Padding (tj. 'ispuna'), predstavlja unutrašnji prostor elementa, između sadržaja i ivice (tj. okvira ili 'bordure').

Ispuna o kojoj govorimo pripada elementu, ali, sadržaj se ne nalazi u ispuni (već ispuna uokviruje sadržaj).

Podešavanja se mogu zapisati na dva načina (uz određene varijacije, na koje ćemo se dodatno osvrnuti u nastavku).

Prvi način je "školski" i podrazumeva navođenje visine ispune sa gornje i donje strane, kao i širine ispune, sa desne strane i leve - preko zasebnih atributa:

		
.dugme {
	display:          block;
	text-align:       center;
	text-decoration:  none;
	background-color: #0044bb;
	color:            #ffffff;
	font-weight:      bold;

	padding-top:      4px;
	padding-right:    12px;
	padding-bottom:   4px;
	padding-left:     12px;
}
		
	
Slika 3. - Opširniji (tj. komplikovaniji) način za zadavanje padding-a.

Drugi način (mnogo praktičniji), podrazumeva da se svi parametri navedu u jednoj kodnoj liniji (pri čemu se redom navode: gornji, desni, donji i levi padding, u smeru kretanja kazaljke na satu).

		
.dugme {
	padding: 4px 12px 4px 12px;
}
		
	
Slika 4. - Skraćeni, praktičniji način za zadavanje padding-a (margine se takođe mogu definisati po sličnom obrascu).

U situaciji kada je visina ispune sa gornje i donje strane identična, kao i širina ispune, sa leve i desne strane (a takve situacije su vrlo tipične), zapis sa gornje slike može se dodatno uprostiti:

		
.dugme {
	padding: 4px 12px;
}
		
	
Slika 5. - Još kraći (i praktičniji) način za zadavanje padding-a, preko dva parametra.

Prva vrednost predstavlja visinu ispune (gore i dole), a druga, širinu (levo i desno).

U svakom slučaju, link je sada znatno dopadljiviji:

Link

.... i već skoro u potpunosti ima odlike pravog dugmeta.

Dugme verovatno jeste vizuelno dopadljivije od tekstualnog linka, ali (kao što smo više puta nagovestili u ranijim člancima), u mnogim situacijama, obični tekstualni linkovi su primereniji od onih koji izgledaju kao dugmići.

Box-sizing

U prethodnom odeljku ideja je bila: napraviti dugme sa ispunom određene širine i visine (bez zadavanje dimenzija elementa) - i time praktično centrirati tekst na dugmetu (što je pristup koji se koristi često).

Međutim, ukoliko je potrebno da element ima precizno zadate dimenzije - a da se pri tome koristi i padding - stvari se "komplikuju".

Zarad preglednosti, u primerima ćemo se usmeriti samo na širinu ....

Verujemo da deluje čudno što pažnju ne usmeravamo na visinu, međutim, postoji razlog za takav izbor (na kraju odeljka sledi dodatno objašnjenje i, naravno, principi koje ćemo prikazati, važe za obe dimenzije.

Ukoliko definišemo širinu i padding:

		
.element {
	width:   120px;
	padding: 5px 15px;
	// u praktičnom smislu,
	// širina je 150px
	// (tj. nije 120px)
}
		
	
Slika 6. - Zadavanje širine i paddinga (bez atributa box-sizing), podrazumeva da je ukupna širina zapravo zbir navedene širine i navedene ispune za levu i desnu stranu elementa.

.... ukupna širina elementa biće:

width + padding-left + padding-right = 150px.

Jedno od rešenja (u konkretnom primeru), može biti zadavanje širine od 90px:

		
.element {
	width:   90px;
	padding: 5px 15px;
	// u praktičnom smislu,
	// širina je 120px
}
		
	
Slika 7. - Praktičan primer zadavanja širine koja je navedena na prethodnoj slici (ali - ovoga puta će širina zapravo biti 120px).

.... u kom slučaju se tražena širina (120px), praktično dobija preko sledećeg obrasca:

upisana_širina = tražena_širina - (padding-left + padding-right).

Prikazano rešenje je funkcionalno, ali i pomalo neintuitivno.

Drugo rešenje podrazumeva aktiviranje atributa box-sizing:

		
.element {
	box-sizing: border-box;
	width:      120px;
	padding:    5px 15px;
}
		
	
Slika 8. - Kada se uključi parametar box-sizing, ukupna širina odgovara navedenoj širini.

Ovoga puta, širina će biti (ukupno) 120px, a leva i desna margina 15px.

Dimenzije su sada u redu (i zadaju se na intuitivan način), ali, pošto ste se sve vreme verovatno pitali (sasvim opravdano), zašto smo za primer koristili širinu (a ne visinu), red je da 'razrešimo misteriju'?!

Razlog za izbor koji smo napravili je to što se preko parametra box-sizing - i dalje - ne može rešiti problem vertikalnog centriranja sa kojim smo se na početku sreli (već se samo može rešiti problem nedvosmislenog zadavanja dimenzija).

Nekako je delovalo poštenije da vas ne navodimo na zaključak da box-sizing pomaže u smislu vertikalnog centriranja.

Naravno, uvek je tu i (prethodno prikazana) opcija sa zadavanjem padding-a (ukoliko nismo u obavezi da koristimo fiksne dimenzije), a u poslednje vreme najčešće se koristi model "flex-box", koji omogućava vertikalno i horizontalno centriranje (na veoma jednostavan način), kao i obavljanje drugih osnovnih operacija koje se tiču dimenzija i pozicija elemenata.

Model flex-box će biti jedna od glavnih tema 4. nastavka, a sada nastavljamo upoznavanje sa osnovnim box modelom ....

Border (ivica)

Ukoliko je oko elementa potrebno iscrtati ivicu (tj. okvir ili 'borduru'), osobine ivice kao što su: tip linije, debljina, boja i sl, navode se preko atributa (mn.) sa prefiksom border.

		
.dugme {
	border-style:     solid;   // tip linije:
	                           // solid  = puna linija
	                           // dashed = isprekidana linija
	                           // double = 'duplirana' puna linija
	                           // .... a ima i drugih opcija

	border-thickness: 2px;     // debljina bordure

	border-color:     #ee7700; // boja bordure
}
		
	
Slika 9. - Pun spisak parametara za definisanje bordure.

Baš kao što je bio slučaj sa padding-om, CSS i ovoga puta dozvoljava uprošćavanje zapisa, što znači da se sva tri parametra mogu definisati u jednom redu (s tim da je, za razliku od padding-a, u ovom slučaju redosled parametara proizvoljan), a preko parametra border-radius mogu se zaobliti ćoškovi.

		
.dugme {
	border:        solid 2px #ee7700;
	border-radius: 12px;
}
		
	
Slika 10. - Skraćeni način za definisanje bordure (uz parametar border-radius, preko koga se praktično mogu zaobliti ćoškovi).
Link

Borduru ćemo u nastavku ipak isključiti (naravno, u vašim samostalnim isprobavanjima, možete je i ostaviti).

Margine (margin)

Pošto smo definisali sve unutrašnje odlike, ostaje samo da definišemo horizontalno i vertikalno odstojanje elementa u odnosu na okolne elemente.

Ako pogledamo dva linka koji su (preko HTML-a) naizgled definisani jedan ispod drugog, * videćemo da su "slepljeni", to jest, videćemo da između dva navedena elemenata nema vertikalnog odstojanja.

Link Link

* Linkovi/dugmići su jedan ispod drugog, samo zato što smo ih preko CSS-a definisali kao blok elemente (da nismo, bili bi prikazani jedan pored drugog).

Margine, baš kao i ispuna, mogu se definisati na dva načina: na "komplikovaniji" način ....

		
.dugme {
	margin-top:    0;
	margin-right:  4px;
	margin-bottom: 16px;
	margin-left:   0;
}
		
	
Slika 11. Definisanje sve četiri margine nezavisno.

.... uz zadavanje svake margine zasebno, ili, na način koji je (reklo bi se) mnogo praktičniji:

		
.dugme {
	margin: 0 4px 16px 0;
}
		
	
Slika 12. - Skraćeni način za zapis margina.

.... uz zapisivanje parametara u jednoj liniji.

Ukoliko sve margine imaju istu vrednost, zapis se može dodatno 'skratiti':

		
.dugme {
	margin: 16px;
}
		
	
Slika 13. - Dodatno pojednostavljeni načini za zapis margina - preko samo jednog parametra (koji utiče na sve četiri margine).

Naravno, sličan zapis je moguće koristiti i za padding.

Što se tiče dugmića ....

Link Link

.... oni više nisu "slepljeni".

Dodatna pojašnjenja vezana za margine i padding

Pretpostavićemo na ovom mestu da čitaoci do sada nisu imali problema sa razumevanjem pojmova koje smo izneli u vezi sa box modelom, ali, pošto iskustvo ukazuje na to da razlikovanje margina i padding-a ipak ume da 'namuči' web dizajnere na početku (bar pomalo :)), prodiskutovaćemo dodatno o dva navedena pojma.

Šta (recimo) treba koristiti da dugmiće, koji se nalaze sa unutrašnje strane određenog elementa, odmaknemo od ivica elementa?

U CSS-u se najčešće zadaje padding za noseći element (što je u većini situacija praktičnije u odnosu na zadavanje margina unutrašnjim elementima).

		
.plavi_okvir{
	padding: 20px;
}
		
	
Slika 14. - Da bi plavi okvir dobio "marginu iz sveske", zapravo treba definisati padding.

U svakom slučaju, bitno je da ne zadamo margine spoljnjem/nosećem elementu (u školskim sveskama, margine odmiču sadržaj, od ivica - prema unutra, ali, u box modelu se za isti zadatak koristi atribut padding).

box model_padding
Slika 15. - Ako se na plavi okvir primerni padding, sivo dugme dostiže svoju krajnju donju-desnu poziciju.

Takođe, kada su u pitanju različiti načini zadavanja margina ili paddinga, deluje (pri prvom susretu) da postoji "previše opcija", međutim, svaka od opcija "ima smisla".

Drugim rečima: možda deluje da pored načina za zadavanje margina i/ili paddinga, uzastopnim navođenjem četiri vrednosti (i uprošćenim varijantama takvog pristupa), atributi kao što su margin-left, padding-bottom i sl. gube (pravi) smisao, ali, povremeno - veoma dobro dođu.

Na primer, ako su za određeni element definisane sve margine odjednom, preko klase:

		
.klasa_1 {
	margin: 0 12px 8px 0;
}
		
	
Slika 16. - Zadavanje četiri margine odjednom, unutar klase "klasa_1".

.... i potom se elementu pripiše i id selektor * sa sledećim svojstvima:

		
#id_1 {
	margin-left: 20px;
}
		
	
Slika 17. - Nezavisni atribut margin-left utiče samo na levu marginu i (praktično) "ne dira" ostale margine koje su definisane preko selektora sa prethodne slike.

.... id selektor će prepraviti samo levu marginu, dok bi u suprotnom bilo potrebno ponovo navoditi sve četiri vrednosti (čak i onda "kada to ne želimo" :)).

* Kao što smo već pominjali u prethodnim člancima, podešavanja koja su zapisana u id selektoru, imaju prioritet u odnosu na podešavanja koja su definisana u okviru klase.

Pseudoklase :hover i :active - završna podešavanja

Bez previše udubljivanja u ovaj pomalo čudni termin, najjednostavnije se može reći da "pseudoklasa" u CSS-u označava selektor kome su dodate rezervisane reči kao što su "hover" ili "active" - u cilju definisanja posebnih stanja elementa u toku interakcije korisnika sa datim elementom.

Da pojasnimo (preko primera): selektor za dugme koji smo pisali do sada, uredno definiše sva svojstva koja smo navodili, međutim, ni na koji način ne dozvoljava ("još uvek"), da se svojstva menjaju shodno interakciji korisnika sa dugmetom, odnosno (drugim rečima), dugme 'za sada' izgleda isto u svim sledećim slučajevima:

  • kursor je 'izvan' dugmeta
  • kursor je nad dugmetom (ali korisnik nije kliknuo)
  • korisnik je kliknuo na dugme

Pseudoklase :hover i :active koriste se za definisanje selektora koji opisuju stanje elementa (u ovom slučaju, dugmeta):

  • kada je kursor nad elementom, ali - bez klika (hover - eng. "lebdenje")
  • kada je kursor nad elementom - i pri tom je levi taster pritisnut (active).

Da sve bude 'još bolje', pri definisanju pseudoklasa, potrebno je samo navesti parametre koji se razlikuju od osnovnog stanja elementa (u slučaju dugmeta koje definišemo, to će biti samo različite boje).

Za "hover" smo izabrali svetliju nijansu osnovne boje koju koristimo za dugme, a razlika između dve nijanse treba da informiše posmatrača "da se nešto desilo" (to jest, da je dugme spremno za reakciju), ali, boja ne treba da skreće previše pažnje na sebe (jer još uvek nismo kliknuli).

Za "klik" (tj. za pseudoklasu "active"), izabrali smo sivu boju.

Redosled navođenja selektora pri definisanju pseudoklasa je veoma bitan!

Prvo se navodi osnovni selektor, zatim, pseudoklasa hover i, na kraju, pseudoklasa active.

		
.dugme:hover {
	background: #1054cb;
	color:      #ffffff;
}

.dugme:active {
	background: #aaaaaa;
	color:      #ffffff;
}
		
	
Slika 18. - Preko pseudoklasa :hover i :active, može se definisati ponašanje dugmeta shodno interakciji sa korisnikom.
Link

Dugme je sada 'kompletirano' i spremno je za upotrebu.

Sledeći koraci ....

Kao što vidimo, nije bilo teško - uz malo truda i uz praćenje jednostavnih uputstava - prepraviti običan link tako da 'postane dugme'.

U sledećem nastavku: Web dizajn - 4. deo, upoznaćemo se sa tehnikama koje omogućavaju podelu stranice (što ćemo nadalje koristiti i u ostalim člancima).

Autor članka Nikola Vukićević Za web portal codeblog.rs
Napomena: Tekstovi, slike, web aplikacije i svi ostali sadržaji na sajtu codeblog.rs (osim u slučajevima gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog pismenog odobrenja autora.
© 2020-2026. Sva prava zadržana.
Facebook LinkedIn Twitter Viber WhatsApp E-mail
početna > Članci > Uvod u web dizajn - 3. deo - CSS Box i pseudoklase
codeBlog codeBlog
Sajt posvećen popularizaciji kulture i veštine programiranja.
Napomena: Tekstovi i slike na sajtu codeblog.rs (osim u slučajevima, gde je drugačije navedeno) predstavljaju intelektualnu svojinu autora sajta codeblog.rs i zabranjeno je njihovo korišćenje na drugim sajtovima i štampanim medijima, kao i bilo kakvo drugo korišćenje u komercijalne svrhe, bez eksplicitnog odobrenja autora.
© 2020-2026. Sva prava zadržana.
Facebook - logo
Instagram - logo
LinkedIn - logo
Twitter - logo
E-mail
Naslovna
   •
Uslovi korišćenja
   •
Obaveštenja
   •
FAQ
   •
Kontakt