Postavljanje blokova u css. Pozicioniranje sadržaja
Postavljanje blokova u css. Pozicioniranje sadržaja
22.08.2019Programi
Pozicioniranje css blokova jedna od najvažnijih faza izgleda, jer upravo to utiče na prilagodljivost sajta ili mogućnost njegove implementacije u budućnosti (ako trenutno nije potrebno), a takođe ima značajan uticaj na dalje skaliranje sajta . Nije neuobičajeno da „potencijalni layout dizajneri“ naprave takav izgled da ga je na kraju lakše baciti nego nešto promijeniti, ali u isto vrijeme može izgledati potpuno u skladu s izgledom. Ova situacija nastaje zbog nerazumijevanja gdje i kada koristiti ovaj ili onaj tip pozicioniranja. Danas ćemo pokušati razumjeti ovo pitanje. I tako, u css-u postoji svojstvo pozicija. Ovo svojstvo može imati 5 vrijednosti, ali ćemo razmotriti 4 glavne:
apsolutno
statički
relativno
fiksno
Apsolutno pozicioniranje blokova (apsolutno)
Prva metoda pozicioniranja na našoj listi je apsolutna. Kada se dodijeli ovo svojstvo, blok postaje jedinica sam za sebe i drugi elementi stranice ne utječu na njegovu lokaciju, a isto tako ne utječu na druge elemente. Veličina bloka je određena svojstvima širine i visine, a lokacija na stranici određena je gornjim svojstvima. lijevo, desno i dolje ovi parametri određuju padding od gornjeg, lijevog, desnog i donjeg ruba. Ako blok nema roditeljski element, a također ako je pozicioniranje roditeljskog elementa drugačije od statičkog, tada svojstva gornje, lijevo, donje, desno postavljaju uvlake od početka stranice, inače od rubova stranice roditeljski element.
Najčešće se ova vrsta pozicioniranja koristi kada je blok potrebno pritisnuti na desnu ili donju ivicu. Razmotrimo ovaj raspored.
Radi praktičnosti, blokovi su istaknuti okvirom u više boja. Oznaka će izgledati ovako:
U ovom primjeru koristili smo desna i donja svojstva za postavljanje pomaka od desne i donje ivice. Ove vrijednosti svojstva su ekvivalentne vrijednostima na vrhu: visina elementa - 10px i lijevo: širina elementa - 10px.
Takođe, apsolutno pozicioniranje se ponekad koristi kada je potrebno „uticati“ jedan element na drugi.
Statičko pozicioniranje (statično)
Najčešći tip pozicioniranja koji se javlja na svakoj stranici i obično je postavljen za većinu elemenata je statički, napisan u css-u kao statički. Za većinu HTML oznaka, ova vrijednost je definirana po defaultu, tj. ako pozicija nije eksplicitno specificirana, vrijednost će biti statična. Ovim rasporedom elementi su poređani jedan ispod drugog, a koordinate u prozoru svakog elementa zavise od najbližih elemenata sa položajem: statički ili položaj: relativan. Svojstva gornje, lijevo, desno, donje neće raditi s ovim pozicioniranjem; pozicija se mijenja zbog svojstva margine.
Relativno pozicioniranje
Ovaj tip pozicioniranja je vrlo sličan statičkom pozicioniranju, osim što se pozicija elementa može mijenjati svojstvima gore, lijevo, desno, dolje i margina.
Fiksno pozicioniranje
Fiksno pozicioniranje je slično apsolutnom pozicioniranju u smislu kako se specificiraju koordinate, ali se lokacija izračunava ne u odnosu na HTML stranicu, već u odnosu na prozor pretraživača, tj. sa svojstvom top: 10px, postavit ćete gornju marginu na 10px IZ PROZORA PRETRAŽIVAČA i bez obzira na kojem se nivou pomicanja stranice nalazite, ovaj element će uvijek pratiti vaš ekran.
Obično se koristi za elemente navigacije tako da korisnik uvijek ima važne informacije ili linkove do zanimljivih stranica na vidiku.
Nekretnina pozicija ima sljedeća značenja statički relativno apsolutno fiksno Samo svojstva se primjenjuju zajedno s njim (osim pozicije: statički;) top dnu u pravu lijevo Može biti prisutan u isto vrijeme margina transformirati float (isključujući poziciju: apsolutnu; i poziciju: fiksnu;)
Dodajte praznu oznaku ispred div sa class="primer" - .
Uvod
Elementi na web stranici zauzimaju određenu količinu prostora. Po analogiji s brodovima u igri "Battleship". Između brodova treba da postoje prazne ćelije - margina.
Da biste postavili jedan element na drugi, morate postaviti negativnu vrijednost za marginu. Ali tada će se sadržaji oznaka međusobno preklapati. Koristeći poziciju i svojstva, čini se da su podignuti na nivo 2.
U prirodnom redoslijedu, donje oznake u kodu su prikazane iznad gornjih oznaka. Zahvaljujući z-indeksu na nivou 2, možete sami definirati vidljivi element.
Statičko pozicioniranje - položaj: statičan;
pozicija: statički je zadana vrijednost i nadjačava relativnu, apsolutnu i fiksnu. Vrijednosti svojstava top, bottom, right, left se zanemaruju. Ako nema transformacije, z-indeks se ne uzima u obzir.
A
B
IN
Relativno pozicioniranje - pozicija: relativna;
Blok kojem dodjeljujemo poziciju: relativno će imati prioritet. Sadržaj donjeg elementa je skriven.
A
B
IN
Da bi se blok B postavio na vrh B, ali ispod A, nije dovoljno dodijeliti poziciju: u odnosu na njega, jer je u kodu ispod bloka A, što znači da će ga preklapati.
A
B
IN
Također morate postaviti z-indeks za element B da bude manji od onog za blok A.
A
B
IN
Umjesto margine za relativno pozicioniranje, ponekad je bolje koristiti svojstva gore, dolje, desno, lijevo. Polazna tačka za njih je početni položaj elementa. U isto vrijeme, blok B nastavlja biti pozicioniran kao da je blok A na istom mjestu - ostavlja prazan prostor za njega. Stoga, ne morate raditi nikakvu magiju sa praznim div().
A
B
IN
Potpuna analogija sa imovinom
A
B
IN
Za inline elemente
Ugrađeni elementi margine se ne pomiču dolje ili gore (). Samo gornji, donji
BAB
ili
BAB
B A B
Apsolutno i fiksno pozicioniranje
Čini se da bi blok sa položajem: apsolutni trebao biti smješten iznad položaja: relativan, ali to nije slučaj, ovdje se primjenjuje prirodni poredak. To znači da će vam z-index omogućiti da između njih odaberete element prioriteta.
A
B
IN
Blok B zanemaruje originalnu poziciju bloka B, jer sa položajem: apsolutnim i položajem: fiksnim, element prestaje da utiče na susedne oznake bilo kroz svoju širinu/visinu ili kroz float: levo.
A
B
IN
Finalni sto
karakteristična svojstva
položaj: statičan;
položaj: relativan; transform: translate();
pozicija: apsolutna;
pozicija: fiksna;
preklapanje
Bolje je ne postavljati elemente jedan na drugi
elementi imaju prioritet vidljivosti nad statičkim. Ostala značenja su ekvivalentna. Biće vidljiv onaj koji je niži u kodu ili ima veću vrednost z-indeksa.
referentna tačka gore, desno, dolje i lijevo
ignorisano
početni položaj elementa
ivica roditeljskog elementa
ivica prozora pretraživača
elementi okolo
uzeti u obzir trenutnu poziciju elementa
uzeti u obzir početni položaj elementa
zanemariti poziciju elementa
širina: 100%; ovo je širina
element (za inline)/roditeljski element (za nivo bloka)
roditeljski element sa pozicijom koja nije postavljena na statičku
prozor pretraživača
prilikom pomicanja elementa stranice
potezi
"zalijepi" na određenu lokaciju u prozoru pretraživača
Sada, da biste konsolidirali materijal, kliknite na gumbe na početku članka, razmislite zašto je došlo do takvih promjena.
Posljednje ažuriranje: 28.04.2016
CSS pruža mogućnosti pozicioniranja elemenata, što znači da možemo postaviti element na određenu lokaciju na stranici.
Glavno svojstvo koje kontroliše pozicioniranje u CSS-u je svojstvo pozicije. Ovo svojstvo može imati jednu od sljedećih vrijednosti:
statički : standardno pozicioniranje elementa, zadana vrijednost
apsolutni : element je pozicioniran u odnosu na granice elementa kontejnera ako njegovo svojstvo položaja nije statičko
relativno : Element je pozicioniran u odnosu na svoju zadanu poziciju. Tipično, glavna svrha relativnog pozicioniranja nije pomicanje elementa, već uspostavljanje nove točke sidrenja za apsolutno pozicioniranje njegovih ugniježđenih elemenata.
fiksno : element je pozicioniran u odnosu na prozor pretraživača, ovo vam omogućava da kreirate fiksne elemente koji ne mijenjaju poziciju kada se pomiče
Ne biste trebali istovremeno primijeniti svojstvo float i bilo koji tip pozicioniranja osim statičkog (to jest, zadanog tipa) na element.
Apsolutno pozicioniranje
Područje za pregled pretraživača ima gornju, donju, desnu i lijevu ivicu. Svaki od ova četiri ruba ima odgovarajuće CSS svojstvo: lijevo, desno, gornje i donje. Vrijednosti za ova svojstva su navedene u pikselima, ems ili procentima. Nije potrebno postavljati vrijednosti za sve četiri strane. U pravilu se postavljaju samo dvije vrijednosti - uvlačenje od gornje ivice gornje i uvlačenje s lijeve ivice lijevo.
Blok raspored u HTML5
ZDRAVO SVIJETE
Ovdje će apsolutni pozicionirani div biti 100 piksela lijevo od granice okvira za prikaz i 50 piksela od dna.
Nije toliko važno da iza ovog div elementa postoje neki drugi elementi. Ovaj div blok će u svakom slučaju biti pozicioniran u odnosu na granice okvira za pregled pretraživača.
Ako se element s apsolutnim pozicioniranjem nalazi u drugom kontejneru, koji zauzvrat ima vrijednost svojstva položaja koja nije jednaka static , tada je element pozicioniran u odnosu na granice spremnika:
Pozicioniranje u HTML5
Relativno pozicioniranje
Relativno pozicioniranje je također specificirano pomoću relativne vrijednosti. Za specificiranje određene pozicije na koju se element pomiče, koriste se ista svojstva gornje, lijevo, desno, donje:
Pozicioniranje u HTML5
z-indeks svojstvo
Prema zadanim postavkama, kada dva elementa imaju istu granicu, element koji je zadnji definiran u html oznaci prikazuje se iznad drugog. Međutim, svojstvo z-indeks vam omogućava da promijenite redoslijed elemenata kada se preklapaju. Svojstvo uzima broj kao svoju vrijednost. Elementi sa većom vrednošću z-indeksa će se pojaviti na vrhu elemenata sa manjom vrednošću z-indeksa.
Ovdje je z-indeks 100. Ali to ne mora biti broj 100. Pošto drugi blok ima nedefinirani z-indeks i zapravo je nula, za redBlock možemo postaviti svojstvo z-index na bilo koju vrijednost veću od nula.
I sada će se prvi blok preklapati s drugim, a ne obrnuto, kao što je bio slučaj na početku.
Jedna od najboljih stvari kod CSS-a je to što nam stilovi daju mogućnost da pozicioniramo sadržaj i elemente na stranici na gotovo bilo koji zamisliv način. Ovo dodaje strukturu našem dizajnu i pomaže da sadržaj bude vizualniji.
Postoji nekoliko različitih tipova pozicioniranja u CSS-u, svaki od ovih tipova ima svoj opseg. U ovom poglavlju ćemo pogledati nekoliko različitih slučajeva upotrebe – kreiranje rasporeda za višekratnu upotrebu i jedinstveno pozicioniranje jednokratnih elemenata – i opisati nekoliko metoda za to.
Pozicioniranje preko float-a
Jedan od načina da se pozicioniraju elementi na stranici je preko svojstva float. Ovo svojstvo je prilično svestrano i može se koristiti na mnogo različitih načina.
U suštini, svojstvo float uzima element, uklanja ga iz normalnog toka stranice i pozicionira ga lijevo ili desno od njegovog roditeljskog elementa. Svi ostali elementi na stranici će se omotati oko takvog elementa. Na primjer, paragrafi će se omotati oko slike ako je element float svojstvo je postavljeno.
Kada se svojstvo float primeni na više elemenata odjednom, omogućava kreiranje rasporeda sa lebdećim elementima jedan pored drugog ili naspram drugog, kao što je prikazano u rasporedu sa više kolona.
Svojstvo float ima nekoliko vrijednosti, dvije najpopularnije su lijevo i desno, koje omogućavaju elementu da pluta lijevo ili desno od svog roditelja.
Img ( float: lijevo; )
plutaju u praksi
Napravimo opći izgled stranice sa zaglavljem na vrhu, dvije kolone u sredini i podnožjem na dnu. Idealno bi bilo da ova stranica bude označena elementima
,
,
......
Demonstracija rasporeda bez float-a
Evo elemenata I
Odsjek ( plutajući: lijevo; ) sa strane ( plutajući: desno; )
Za referencu, plutajući elementi su pozicionirani duž ivice roditeljskog elementa. Ako nema roditelja, plutajući element će biti pozicioniran duž ivice stranice.
Kada element postavimo na plutajući, uklanjamo ga iz normalnog toka HTML dokumenta. Ovo uzrokuje da zadana širina tog elementa postane širina njegovog sadržaja. Ponekad, kao kada kreiramo kolone za višekratnu upotrebu, ovo ponašanje je nepoželjno. Ovo se može popraviti dodavanjem svojstva širine sa fiksnom vrijednošću za svaku kolonu. Dodatno, kako bismo spriječili da lebdeći elementi dodiruju jedni druge, uzrokujući da sadržaj jednog elementa sjedi pored drugog, možemo koristiti svojstvo margine za postavljanje razmaka između elemenata.
U nastavku proširujemo prethodni blok koda dodavanjem margine i širine za svaku kolonu kako bismo bolje oblikovali željeni rezultat.
float može promijeniti vrijednost prikaza elementa
Za plutajući element, također je važno razumjeti da je element uklonjen iz normalnog toka stranice i da se zadana vrijednost prikaza elementa može promijeniti. Svojstvo float se oslanja na vrijednost prikaza elementa koja je postavljena na blok i može promijeniti zadanu vrijednost prikaza elementa ako već nije prikazana kao blok element.
Na primjer, element čiji je prikaz naveden kao inline, kao što je inline , zanemaruje sva svojstva visine ili širine. Međutim, ako navedete float za inline element, vrijednost prikaza će se promijeniti u blok i tada element već može preuzeti svojstva visine ili širine.
Kada plivamo element, moramo paziti na to kako on utječe na vrijednost svojstva prikaza.
Za dvije kolone možete postaviti float, jednu kolonu kao lijevu, a drugu kao desnu, ali za više kolona morat ćemo promijeniti naš pristup. Recimo, na primjer, želimo da imamo red od tri kolone između naših elemenata I
......
...
...
Da uredimo ova tri elementa u redu od tri kolone, moramo postaviti float za sve elemente kao levo. Također moramo prilagoditi širinu uzimajući u obzir dodatne kolone i postavljajući ih jedan do drugog.
Ovdje imamo tri kolone, sve sa jednakom širinom i vrijednošću margine, i float postavljenim lijevo.
Demonstracija rasporeda u tri stupca sa float-om
Brisanje i plutanje sadržaja
Svojstvo float je prvobitno dizajnirano da omogući sadržaju da teče oko slika. Slici se može dati plutajući i sav sadržaj oko te slike prirodno teče oko nje. Iako ovo odlično funkcionira za slike, svojstvo float nije bilo namijenjeno da se koristi u svrhe rasporeda i pozicioniranja i stoga dolazi s nekoliko zamki.
Jedna od ovih zamki je da se ponekad odgovarajući stilovi ne pojavljuju na elementu koji je susedan ili je roditelj lebdećeg elementa. Kada je element postavljen na plutajući, uklanja se iz normalnog toka stranice i, kao rezultat, može negativno utjecati na stilove elemenata oko tog lebdećeg elementa.
Često se vrijednosti margina i svojstava paddinga pogrešno tumače, zbog čega se stapaju u plutajući element. Ostala svojstva također mogu biti pogođena.
Još jedna greška je što se ponekad neželjeni sadržaj počinje omotati oko float elementa. Uklanjanje elementa iz toka dokumenta omogućava svim elementima oko plutajućeg elementa da ga zaobiđu i zauzmu svaki raspoloživi prostor oko lebdećeg elementa, što je često nepoželjno.
U našim prethodna dva primjera stupca, nakon što smo dodali float elementima I
Demonstracija rasporeda bez čišćenja plovka
Kako bismo spriječili da se sadržaj omota oko plutajućih elemenata, moramo obrisati float i vratiti stranicu u njen normalan tok. Pogledat ćemo kako očistiti plovke, a zatim ćemo pogledati njihov sadržaj.
Čišćenje plovaka
Brisanje float-a se događa pomoću svojstva clear, koje poprima nekoliko različitih vrijednosti: najčešće korištene vrijednosti su lijevo, desno i obje.
Div ( jasno: lijevo; )
Vrijednost lijevo briše lijevo plutajuće, dok vrijednost desno briše desna float. Vrijednost oba će, međutim, izbrisati lijevo i desno plutajuće i često je najidealnija opcija.
Vraćajući se na naš prethodni primjer, ako koristimo svojstvo clear sa vrijednošću oba na elementu
Podnožje (jasno: oba; )
Demonstracija rasporeda sa čišćenjem plovka
Content float
Umjesto brisanja float, druga opcija je da postavite sadržaj na float. Rezultat će biti prilično isti, ali float sadržaj zaista osigurava da će se svi naši stilovi ispravno prikazati.
Da biste postavili float sadržaj, plutajući elementi moraju biti unutar roditeljskog elementa, on će djelovati kao kontejner, ostavljajući tok dokumenta potpuno normalnim izvan njega. Stil za ovaj roditeljski element je predstavljen klasom grupe, kao što je prikazano ovdje:
Ovde se ne dešava mnogo, ali u suštini sve što CSS radi je da očisti sve plutajuće elemente unutar elementa grupe i vrati dokument u normalan tok.
Preciznije, pseudoelementi ::before i ::after, kao što je objašnjeno u lekciji 4, dinamički generišu elemente iznad i ispod elementa sa grupom klasa. Ovi elementi ne uključuju nikakav sadržaj i prikazuju se kao elementi tabele, slično blok elementima. Dinamički generirani element nakon elementa grupe briše float unutar elementa grupe, baš kao što je clear učinio prije. Konačno, element grupe također briše sve float koji se može pojaviti ispred njega u slučaju da postoji float sa vrijednošću lijevo ili desno. Uključen je i mali trik koji čini da stariji pretraživači rade lijepo.
Ovdje ima više koda od obične naredbe clear: both, ali može biti prilično korisna.
Uzimajući u obzir naš izgled stranice u dvije kolone, mogli bismo umotati I
Tehnika koja je ovdje prikazana poznata je kao "clearfix" i često se može vidjeti na drugim stranicama s imenom klase clearfix ili cf. Odlučili smo da koristimo grupu imena klase jer ona predstavlja grupu elemenata i bolje izražava sadržaj.
Kada su elementi postavljeni na plutajući, važno je pratiti kako oni utiču na tok stranice i osigurati da se tok stranice resetuje brisanjem ili plutajućim sadržajem kako je predviđeno. U suprotnom, praćenje float-a može izazvati mnogo glavobolja, posebno na stranicama koje sadrže više redova, svaki sa više kolona.
Na praksi
Vratimo se na stranicu Styles Conference i probamo dodati plutajuće sadržaju.
Prvo, prije primjene float-a na bilo koji element, pružimo sadržaj tim plutajućim elementima dodavanjem clearfixa našem CSS-u. U datoteci main.css, odmah ispod naših stilova mreže, dodaćemo clearfix ispod naziva grupe grupe, kao i ranije. /* ================================================= ====== Clearfix ======= ==================================== * / .group::before, .group::after (sadržaj: " "; prikaz: tabela; ) .group::after ( očisti: oba; ) .group ( očisti: oba; *zum: 1; )
Sada kada možemo koristiti float, hajde da ga definiramo za glavni
unutrašnji element kao lijevo i pustite da ostatak sadržaja u zaglavlju teče udesno.
Da biste to učinili, elementu dodajte klasu logotipa
. Zatim, unutar našeg CSS-a, dodaćemo novi stilski odjeljak za glavno zaglavlje. U ovom dijelu ćemo odabrati element
Dok smo ovdje, dodajmo malo više detalja našem logotipu. Počnimo s postavljanjem elementa ili prijelom reda između riječi “Stilovi” i “Konferencija” kako bi se tekst našeg logotipa pojavio u dva reda.
U CSS-u ćemo dodati obrub duž vrha našeg logotipa i okomiti padding tako da logo može slobodno "disati".
pojednostavljeno, želimo postaviti sadržaj na plutajući. Neposredni roditelj za
je element pa ćemo tome dodati grupnu klasu. Ovo će primijeniti stilove clearfixa koje smo ranije postavili na njega.
...
Element poprima oblik, pa hajde da pogledamo element
Za razliku od elementa međutim, nećemo primijeniti klasu direktno na plutajući element. Ovaj put ćemo dodati klasu roditelju float elementa i koristiti jedinstveni CSS selektor za odabir elementa i zatim mu dati float .
Počnimo dodavanjem osnovne klase podnožja elementu
Sada kada je klasa primarnog podnožja postavljena na element
/* ======================================== Glavni podrum ====== ===================================== */ .primary-footer small ( float: lijevo; )
Za provjeru - ovdje odabiremo element , koji bi trebao biti unutar elementa s vrijednošću atributa klase primarnog podnožja, kao što je naš element
Konačno, dodaćemo malo ispuna na vrh i dno elementa.
Rice. 5.01. Korištenje više plutajućih elemenata I
Pozicioniranje preko inline-bloka
Osim korištenja float-a, drugi način na koji možemo pozicionirati sadržaj je korištenje svojstva prikaza u kombinaciji sa vrijednošću inline-bloka. Metoda inline-block, kao što ćemo kasnije raspravljati, prvenstveno je korisna za postavljanje stranica ili za postavljanje elemenata u red jedan pored drugog.
Podsjetimo da vrijednost inline-bloka za svojstvo prikaza prikazuje elemente u liniji i omogućava im da preuzmu sva svojstva modela okvira, uključujući visinu, širinu, padding, ivicu i marginu. Korištenje inline-block-a nam omogućava da u potpunosti iskoristimo prednosti blok modela bez brige o uklanjanju bilo kakvih float-ova.
inline-blok u praksi
Pogledajmo naš primjer s tri stupca od početka. Počećemo tako što ćemo sačuvati naš HTML ovako:
......
...
...
Sada umjesto float za naša tri elementa promijenit ćemo njihovu prikazanu vrijednost u inline-block , ostavljajući svojstva margine i širine kao što su ranije bili. Kao rezultat, naš CSS će izgledati ovako:
Nažalost, ovaj kod sam po sebi nije dovoljan da izvede trik i posljednji element je gurnut na novu liniju. Zapamtite, budući da se elementi inline-bloka pojavljuju na liniji jedan pored drugog, oni uključuju jedan razmak između njih. Kada se veličina svakog pojedinačnog prostora doda širini i vrijednosti horizontalne margine svih elemenata u nizu, ukupna širina postaje prevelika, potiskujući posljednji element na novu liniju. Za prikaz svih stavki na jednom redu, trebali biste ukloniti razmak između svake
.
Demonstracija inline-blok elemenata sa razmakom
Uklanjanje prostora između inline-blok elemenata
Postoji nekoliko metoda za uklanjanje prostora između inline-blok elemenata, a neke su složenije od drugih. Fokusiraćemo se na dvije najjednostavnije metode, od kojih se obje javljaju unutar HTML-a.
Prvo rješenje je staviti svaku novu oznaku otvarajućeg elementa na istoj liniji kao i završna oznaka prethodnog elementa . Umjesto da koristimo novu liniju za svaki element, na kraju počinjemo elemente na istoj liniji. Naš HTML može izgledati ovako:
...
...
...
...
Pisanje inline-blok elemenata na ovaj način osigurava da nema razmaka između takvih elemenata u HTML-u. Stoga se prostor neće pojaviti kada se stranica prikaže.
Demonstracija inline-blok elemenata bez razmaka
Druga metoda za uklanjanje razmaka između inline-blok elemenata je otvaranje HTML komentara odmah nakon završne oznake elementa. Zatim zatvorite komentar neposredno prije otvaranja oznake sljedećeg elementa. Ovo omogućava elementima inline-bloka da započnu i završe na odvojenim redovima u HTML-u i "komentiraće" svaki potencijalni razmak između elemenata. Rezultirajući kod će izgledati ovako:
...
...
...
...
Nijedna od ovih opcija nije savršena, ali su korisna. Ja preferiram korištenje komentara za bolju organizaciju, ali koju opciju ćete izabrati ovisi isključivo o vama.
Kreirajte rasporede za višekratnu upotrebu
Kada pravite sajt, uvek je najbolje napisati modularne stilove koji se mogu ponovo koristiti na drugom mestu, a rasporedi za višekratnu upotrebu su na vrhu liste koda za višekratnu upotrebu. Izgledi se mogu kreirati pomoću plutajućih ili inline-blok elemenata, ali koji najbolje funkcionira i zašto?
Pitanje da li su plutajući ili inline-blok elementi bolji za strukturu stranice je otvoreno za debatu. Moj pristup je da koristim inline-blok elemente za kreiranje mreže ili izgleda stranice, a zatim koristim float kada želim da sadržaj teče oko elementa (što je ono za šta su plutajući elementi dizajnirani kada radite sa slikama). Generalno, takođe smatram da je lakše raditi sa elementima inline-bloka.
Međutim, koristite ono što vam najbolje odgovara. Ako vam je jedan pristup više poznat nego drugi, onda ga upotrijebite.
U pripremi su nove CSS specifikacije – posebno flex i grid svojstva – koje će vam pomoći da odlučite kako najbolje postaviti svoje stranice. Obratite pažnju na ove metode kada počnu da se pojavljuju.
Na praksi
Sa čvrstim razumijevanjem rasporeda za višekratnu upotrebu, vrijeme je da ga implementirate na našoj stranici Styles Conference.
Za web stranicu Styles Conference kreirat ćemo raspored u tri stupca koristeći inline-blok elemente. To ćemo učiniti tako da dobijemo tri kolone iste širine, odnosno dvije kolone čija je ukupna širina podijeljena između 2/3 za jednu i 1/3 za drugu.
Prvo ćemo kreirati klase koje definiraju širinu ovih stupaca. Ove dvije klase ćemo nazvati col-1-3 za jednu trećinu i col-2-3 za dvije trećine. U odeljku Grid naše main.css datoteke, idemo naprijed i definiramo ove klase i njihove odgovarajuće širine.
Želimo da se obje kolone pojavljuju kao inline blok elementi. Također moramo biti sigurni da je njihovo vertikalno poravnanje postavljeno na vrh svake kolone.
Kreirajmo dva nova selektora koji dijele prikaz i vertikalno poravnanje.
Pogledajte ponovo CSS. Napravili smo dva selektora klasa col-1-3 i col-2-3 odvojena zarezom. Zarez na kraju prvog selektora znači da ga prati drugi selektor. Nakon drugog selektora nalazi se otvorna vitičasta zagrada, koja označava da počinje opis stila. Koristeći zarez za odvajanje selektora, možemo vezati jedan stil za više selektora u isto vrijeme.
Želimo da stavimo malo razmaka između kolona kako bismo pomogli da razbijemo sadržaj. To se može učiniti dodavanjem horizontalnog odsječka u svaku kolonu.
Ovo dobro funkcionira, međutim, kada su dva stupca postavljena jedan pored drugog, širina prostora između njih će biti dvostruko veća od prostora od vanjskog ruba. Da bismo ovo izbalansirali, stavit ćemo sve naše kolone u mrežu i dodati im isti padding.
Upotrijebimo grid klasu da definiramo našu mrežu, a zatim damo isti horizontalni padding klasama grid, col-1-3 i col-2-3. Sa zarezima koji ponovo razdvajaju naše selektore, naš CSS izgleda ovako:
Kada postavljamo horizontalni padding, moramo biti oprezni. Zapamtite, u prošloj lekciji kreirali smo kontejner sa klasom kontejnera da centriramo sav naš sadržaj na stranicu širine 960 piksela. Trenutno, ako bismo postavili element mreže unutar elementa kontejnera, njihov horizontalni padding bi se skupio i naši stupci ne bi izgledali proporcionalni širini ostatka stranice.
To ćemo učiniti tako što ćemo stari skup pravila kontejnera rastaviti na sljedeće:
Sada će svaki element sa klasom kontejnera ili mreže biti širok 960 piksela i nalazi se u sredini stranice. Osim toga, zadržali smo postojeće horizontalne paddinge za bilo koji element s klasom kontejnera tako što smo ga premjestili u novi, zasebni skup pravila.
U redu, sav teži dio postavljanja mreže je završen. Sada je vrijeme da radimo sa našim HTML-om i vidimo kako ovi časovi rade.
Počećemo sa tizerima na početnoj stranici, u datoteci index.html, poređanim u tri kolone. Trenutno su tizeri umotani u element sa klasom kontejnera. Želimo promijeniti klasu kontejnera u grid tako da možemo početi postavljati stupce unutra.
...
...
...
...
I konačno, budući da je svaki od naših stupaca umetnuti blok element, moramo se pobrinuti da uklonimo svaki bijeli razmak između njih. Da bismo to učinili, koristit ćemo komentare i dodati dokumentaciju u svaki odjeljak kako bismo bolje organizirali naš kod.
...
...
...
Da bismo provjerili, ostavili smo komentar na liniji 3 koji identificira odjeljak „Zvučnici“ koji slijedi. Na kraju reda 7, otvaramo komentar odmah nakon završne oznake. Unutar ovog komentara, na liniji 9 definiramo sljedeći odjeljak "Raspored". Zatim zatvorite komentar na početku reda 11, neposredno prije početne oznake . Slična struktura komentara pojavljuje se u redovima 13 do 17 između dva elementa , neposredno prije odjeljka Mjesto održavanja. Uopšteno govoreći, komentarisali smo svaki potencijalni prazni prostor između kolona, dok smo istovremeno koristili iste komentare da identifikujemo naše sekcije.
Sada imamo višekratnu mrežu sa tri kolone koja podržava različite rasporede, koristeći širine kolone 1/3 i 2/3. Naša početna stranica sada sadrži tri kolone, koje razdvajaju sve teasere.
Rice. 5.02. Početna stranica Styles Conference sada uključuje izgled sa tri kolone
Demo i izvorni kod
Ispod možete pogledati web stranicu Styles Conference u njenom trenutnom stanju, kao i preuzeti trenutni izvorni kod stranice.
Jedinstveno pozicioniranje elemenata
Prije ili kasnije svi će poželjeti precizno pozicionirati element, ali float ili inline-block elementi ne dozvoljavaju takav trik. Plutajući elementi koji uklanjaju element iz toka stranice često proizvode neželjene rezultate jer se okolni elementi omotavaju oko plutajućeg elementa. Inline blok elementi, osim ako ne kreiramo kolone, mogu biti prilično nezgodni kada je u pitanju ispravno pozicioniranje. U ovakvim situacijama možemo koristiti svojstvo pozicije u kombinaciji sa svojstvima pomaka bloka.
Svojstvo položaja određuje kako je element pozicioniran na stranici i da li će biti prikazan u normalnom toku dokumenta. Koristi se zajedno sa svojstvima pomaka bloka top , right , bottom i left , koja određuju tačno gdje će se element postaviti pomicanjem elementa u različitim smjerovima.
Prema zadanim postavkama, vrijednost pozicije svakog elementa je postavljena na static, što znači da element postoji u normalnom toku dokumenta i ne uzima nikakva svojstva da bi ga pozicionirao. Statičnu vrijednost najčešće zamjenjuje vrijednost relativna ili apsolutna, što ćemo pogledati sljedeće.
Relativno pozicioniranje
Postavljanje svojstva položaja na relativno omogućava elementima da se pojave u normalnom toku stranice, rezervišući prostor za element kako je predviđeno i sprečavajući druge elemente da teče oko njega. Međutim, također vam omogućava da izmijenite poziciju elementa koristeći svojstva pomaka. Na primjer, razmotrite sljedeće HTML i CSS:
sa klasom ofseta vrijednost pozicije je postavljena na relativnu, kao i dva svojstva pomaka - lijevo i gore. Ovo zadržava originalnu poziciju elementa i drugim elementima nije dozvoljeno da se kreću u to područje. Dodatno, svojstva pomaka pomiču element tako što ga guraju 20 piksela s lijeve strane i 20 piksela od vrha originalne lokacije.
Za relativno pozicionirane elemente, važno je znati da svojstva pomaka bloka određuju gdje će se element pomjeriti, s obzirom na njegovu originalnu poziciju. Dakle, lijevo svojstvo sa vrijednošću od 20 piksela zapravo gura element udesno za 20 piksela. Svojstvo na vrhu sa vrijednošću od 20px tada će gurnuti element dolje za 20px.
Kada pozicioniramo element koristeći svojstva pomaka, element preklapa element ispod njega, umjesto da ga gura prema dolje kao što to čine svojstva margine ili paddinga.
Apsolutno pozicioniranje
Apsolutna vrijednost svojstva pozicije razlikuje se od relativne vrijednosti po tome što se apsolutno pozicionirani element ne pojavljuje u normalnom toku dokumenta, a originalni prostor i pozicija apsolutno pozicioniranog elementa nisu rezervirani.
Dodatno, apsolutno pozicionirani elementi se pomiču u odnosu na njihov najbliži relativno pozicionirani roditeljski element. Ako relativno pozicionirani roditelj ne postoji, tada će apsolutno pozicionirani element biti pozicioniran u odnosu na element
. Ovo je mala informacija; pogledajmo kako to funkcionira unutar nekog koda:
U ovom primjeru element je pozicioniran u odnosu na, ali ne uključuje svojstva pomaka. Stoga se njegova pozicija ne mijenja. Element
sa offset klasom uključuje vrijednost pozicije kao apsolutnu . Od elementa je najbliži relativno pozicionirani roditeljski element
, zatim element
će biti pozicioniran u odnosu na element
.
Za relativno pozicionirane elemente, svojstva pomaka određuju u kojem smjeru će element biti pomjeren u odnosu na sebe. Za apsolutno pozicionirane elemente, svojstva pomaka određuju u kojem smjeru će element biti pomjeren u odnosu na najbliži relativno pozicionirani roditelj.
Kao rezultat desnih i gornjih svojstava, element
pojavit će se 20 piksela s desne strane i 20 piksela od vrha unutra
.
Od elementa
pozicioniran apsolutno, nije pozicioniran u normalnom toku stranice i preklapaće sve elemente koji ga okružuju. Štaviše, početna pozicija
nije sačuvan i drugi elementi mogu zauzeti ovo mjesto. Općenito, većina pozicioniranja se može dogoditi bez korištenja svojstava položaja i offset svojstava, ali u nekim slučajevima mogu biti izuzetno korisni.
Sažetak
Naučiti kako pozicionirati sadržaj u HTML-u i CSS-u je ogroman korak ka ovladavanju ovim jezicima. Dodajte ovome blok model i na dobrom smo putu da postanemo front-end programeri.