HTML atributi: tipovi i aplikacija. HTML referenca. Float i clear u CSS - alatima za raspored blokova Problemi sa float-om

Opis

Svojstvo CSS float vam omogućava da element učinite plutajućim pomicanjem na lijevu ili desnu ivicu nadređenog elementa, ovisno o tome koja je vrijednost postavljena. Ako plutajući element nema eksplicitno postavljenu širinu, on je komprimiran u širinu kako bi se uklopio u sadržaj.

Pretraživač obrađuje HTML kod dokumenta krećući se od vrha do dna, kada obrada koda dođe do plutajućeg elementa, pretraživač ga postavlja na prvo mjesto prema toku dokumenta, tj. ispod elementa gdje se nalazi u kodu dokumenta, tada uklanja plutajući element iz normalnog toka i pomiče ga što je više moguće na lijevu ili desnu ivicu roditeljskog elementa:

Budući da je plutajući element uklonjen iz toka dokumenta, preostali blok elementi koji se nalaze u kodu nakon njega se pomjeraju na svoje mjesto, kao da element nikada nije bio tamo.

Iako je plutajući element uklonjen iz normalnog toka, inline sadržaj je i dalje pogođen. Za razliku od blok elemenata, inline sadržaj postavljen u kodu nakon plutajućeg elementa uzima u obzir njegove granice i premotava se oko njega, odnosno tekst se premotava oko plutajućeg bloka:

Umjesto plutajućeg bloka s tekstualnim sadržajem, možete napraviti plutajuću sliku. U ovom slučaju, tekst će se omotati oko slike:

Naslov dokumenta

Koristeći CSS svojstvo float, slika je napravljena da pluta na lijevoj strani.

Tekst koji se nalazi u HTML kodu ispod slike će se omotati oko slike duž desne i donje strane.

Pokušajte »

Možete postaviti više od jednog plutajućeg elementa u isti red ako širina nadređenog elementa to dozvoljava. Ako roditeljski element nije dovoljno širok, plutajući elementi koji se ne uklapaju u liniju s drugim plutajućim elementima bit će gurnuti prema dolje.

  1. Plutajući elementi ne utiču na visinu roditelja, odnosno ako postoji kontejner i sadrži samo plutajuće elemente, tada će visina kontejnera biti nula. Ovaj problem možete riješiti na sljedeće načine:
  2. Primijenite svojstvo overflow sa vrijednošću auto ili hidden na kontejner, tada će plutajući elementi biti uzeti u obzir pri izračunavanju visine kontejnera. Ova metoda se može koristiti kada nije unaprijed poznato kolika bi trebala biti visina kontejnera.

Svojstvo float radi samo na blok elementima, tako da ako se svojstvo float primjenjuje na elemente nekog drugog tipa, oni se pretvaraju u blok tip.

Napomena: Apsolutni i fiksni pozicionirani elementi zanemaruju svojstvo float. Također, svojstvo float nema utjecaja na flexboxove.

Pogledajmo kako postaviti dva ili više slojeva jedan pored drugog horizontalno. Podrazumevano, upotreba oznake

da bi razvio sloj, on automatski kreira prelom linije nakon njega, tako da se nekoliko uzastopnih slojeva poreda okomito. Zanima nas kako napraviti istu stvar, ali horizontalno, tako da možemo napraviti dvije kolone. Postoje dva pristupa rješavanju ovog problema: prvi se zasniva na korišćenju parametra float, drugi se zasniva na pozicioniranju elemenata.

Korištenje parametra float

Za postavljanje dva sloja jedan pored drugog vodoravno, koristit ćemo parametar float style sa vrijednošću lijevo.

Ovaj element vam govori da poravnate sloj na lijevoj strani i da ga omotate na desnu stranu. Tako će susjedni drugi sloj biti spojen s prvim s desne strane.

Teoretski, parametar float treba postaviti samo za jedan od dva sloja. Međutim, pretraživač Internet Explorer u ovom slučaju dodaje mali razmak između slojeva, što nije uvijek poželjno, a Firefox prekriva slojeve jedan na drugi. Da bi sve izgledalo tačno onako kako želite, float bi trebao biti specificiran za sve slojeve (primjer 1).





Primjer 1: Dodavanje float parametra


...

...


Dvije kolone

Visina slojeva je određena njihovim sadržajem, tako da će pristup prikazan u ovom primjeru stvoriti dvije pravokutne površine različitih visina i boja.

Glavna karakteristika ovog pristupa je da kada se prozor pretraživača smanji na 750 piksela ili manje, slojevi se nalaze vertikalno jedan ispod drugog (slika 1). Drugim riječima, raspored se „razbija“ u zasebne blokove.

Rice. 1. Prikaz rasporeda prilikom smanjenja veličine prozora pretraživača

Da biste spriječili da se ova situacija dogodi, trebali biste koristiti parametar margine.

Upotrijebimo ponovo parametar float da pozicioniramo stupce jedan pored drugog, ali ga dodamo samo za prvi sloj. U ovom slučaju, u stilu drugog sloja, treba postaviti parametar margin-left, čija je vrijednost jednaka širini lijevog stupca. Ali ovdje postoji jedan trik - širina desne kolone se ne može podesiti, jer će to dovesti do pomjeranja blokova u Internet Explorer pretraživaču kada se prozor pretraživača smanji. A to je upravo ono što pokušavamo izbjeći. Stoga ćemo postaviti ukupnu širinu rasporeda koristeći drugi sloj, nazvati ga kontejner, a preostali slojevi će se nalaziti unutar njega (primjer 2). U ovom slučaju, širina desnog stupca može se izostaviti, jer će zauzeti sav raspoloživi prostor.

Primjer 2: Izgled u dvije kolone





Primjer 1: Dodavanje float parametra






Kod ove metode rasporeda, kada se smanji širina prozora pretraživača, slojevi ostaju na svojim izvornim mjestima, ali se pojavljuje horizontalna traka za pomicanje. Postoje i male razlike između pretraživača koje se odnose na margine i padding oko sadržaja postavljenog unutar kolona. Ali ove razlike nisu značajne i mogu se lako ispraviti korištenjem parametara paddinga i margina.

Ako planirate da postavite još jedan sloj ispod nakon kolona, ​​tada biste trebali koristiti parametar clear style za njega. Činjenica je da pretraživači drugačije uređuju ovaj osnovni sloj, tako da bi trebalo da poništite akciju premotavanja, što je upravo ono što clear radi (primer 3).

Primjer 3: Korištenje parametra brisanja





Primjer 1: Dodavanje float parametra


...

...

...


Stil za ovaj primjer će ostati nepromijenjen i samo će dodati oznaku

sa jasnom: lijevom oznakom. Vrijednost ovog parametra je obično ista kao float.

Nastavi

Prilikom postavljanja rasporeda sa dvije kolone, vrlo je uobičajeno koristiti parametar float, koji se dodaje svakom sloju. Iako je ovaj atribut namijenjen za razvoj toka, zbog svoje svestranosti je odavno prihvaćen od strane dizajnera izgleda.

Ova metoda izrade rasporeda sa više kolona ima i određeni nedostatak, koji se očituje u činjenici da kada se prozor pretraživača smanji na određenu veličinu, kolone "skaču" jedna ispod druge. Da biste to izbjegli, dodatno koristite atribut stila margin-left, dodajući ga u desnu kolonu. U ovom slučaju, slojevi ostaju na svojim originalnim mjestima, bez obzira na veličinu prozora pretraživača.

Pozdrav, dragi čitaoci blog stranice. Danas nastavljamo sa proučavanjem klasičnog CSS-a, a zatim imamo plutajuće elemente kreirane pomoću Float-a. Dotaknut ćemo se i svrhe Clear (oba, lijevo, desno) pravila i pogledati primjere horizontalnog menija i rasporeda u tri kolone da vidimo kako se sve to može koristiti u praksi.

Malo ranije smo već pogledali mnoge aspekte jezika za označavanje stila, o kojima možete saznati iz naracije sastavljene usput. Kaskadne tablice stilova mnogo je teže proučavati od čistog HTML-a, a ako vam se u početku nešto čini komplikovano i nerazumljivo, onda tu nema ničeg čudnog ili zastrašujućeg. Probajte u praksi, poboljšajte se i sve će se srediti. Sretno!

Float - kreiranje plutajućih elemenata u CSS kodu

Kada u dokument ubacimo nekoliko oznaka za redom, očekujemo da se pojave na stranici približno istim redoslijedom kojim su napisane u kodu. Na primjer, prilikom kreiranja teksta ubacujemo naslove, pasuse, liste itd., tako da ih vidimo istim redoslijedom na web stranici.

Ali postoje dva pravila u CSS-u koja ovo mogu promijeniti. Govorimo o plutanju i poziciji. Kada se ova dva pravila ne primjenjuju na oznake, ova opcija se u normalnom toku naziva kodom.

Ovo pravilo ima tri moguće vrijednosti (prema W3C specifikaciji), pri čemu je zadana vrijednost Nema, tj. U početku nemamo plutajuće elemente:

Vrijednosti Lijevo i desno To je ono što vam omogućava da kreirate plivanje. U ovom slučaju, svojstva takve oznake će se promijeniti i ona će drugačije komunicirati s drugima. Pogledajmo sve ovo na primjeru. Uzmimo jedan inline Span tag i dva elementa Div bloka.

Zapamtite, u članku o dodjeli sam rekao da ova pravila neće raditi za inline elemente, tj. Ne možete postaviti visinu i širinu za njih. Stoga, da demonstriram promjenu svojstava plutajućeg elementa, dodajem pravila visine i širine u inline Span tag, što prirodno ne bi funkcioniralo u normalnoj situaciji.

Mala slova

Blocky
Blocky

Hajde sada da napišemo float pravilo za Span sa vrijednošću Left i vidimo šta će iz toga proizaći (radi jasnoće, našem novopečenom plutajućem bloku dat ćemo i marginu od 5px sa svih strana (margina: 5px) kako bi bio njegov odnos sa susjednim jasnije oznake:

Naš element počinje da lebdi ulijevo (jer smo specificirali float:left). U isto vrijeme, širina i visina specificirana u pravilima visine i širine su radile, uprkos činjenici da je Span izvorno bio oznaka linije. Osim toga, radila je i margina visine (uvlačenje prema susjedima), što je u početku bilo beskorisno za oznake linija.

Iz ovoga zaključujemo da nakon pisanja float element je postao potpuno drugačiji i za razliku od onoga što je bio ranije. Osim toga, počeo je drugačije komunicirati s drugim oznakama.

Metode interakcije zavise od toga koja je vrijednost specificirana za njega, ali u osnovi ćemo raditi sa blokovima (zato se raspored naziva blok), za koje ovo CSS pravilo ima blok vrijednosti.

Najčešće će to biti Div kontejner - idealan za pravljenje blok dijagrama, jer inicijalno ima nula vrijednosti, a njegova visina i širina su postavljene na Auto. To. Div je blok blok, kao i Span, koji također ima sve na nuli.

No, vratimo se na našu ovcu, naime, opisati ćemo sve promjene koje se događaju s oznakom kada se na nju primjenjuje pravilo Float s vrijednošću lijevo ili desno:


Očisti (oba, lijevo, desno) i horizontalni meni na Float

Postavlja se pitanje: da li je moguće prisiliti blokove koji se nalaze u kodu ispod plutajućeg elementa (sa float:lijevo ili desno) da stupe u interakciju s njim (tj. podesiti njihov položaj ovisno o veličini plutajućih blokova)? Ispostavilo se da je to moguće, a CSS to omogućava posebno pravilo Clear. Ima četiri važeće vrijednosti (nijedna nije zadana):

Kada napišemo CSS pravilo Clear za bilo koju Html oznaku, to znači da će upravo ovaj element morati uzeti u obzir sve blokove koji lebde i stoje ispred njega u kodu:

  1. Lijevo, ako je specificirano clear:left
  2. Desno kada desno
  3. Svugdje sa jasno:oba (znači na obje strane)

Pokušajmo pogledati clear:left primjer za snimak ekrana dat malo iznad (zapisaćemo ga za zeleni Div kontejner):

Float block

Blocky
Blocky

To. prisilili smo Div kontejner da vidi i poštuje element koji lebdi s njegove lijeve strane. Ako napišete clear:right za istu oznaku, onda neće doći do promjena, jer nema blokova koji plutaju udesno (sa desnim) u našem kodu prije ove oznake.

Ako koristite clear:both, tada će se uzeti u obzir svi plutajući blokovi (i lijevo i desno - koji god se nađu). Oba se koriste u slučajevima kada nije poznato na kojoj će se strani pojaviti plutajući i visoki element. Ovo je ono što danas najčešće možete pronaći u kodu.

Pa, pogledajmo mali primjer da vidimo zašto bi to moglo biti Float je korišten u izgledu web stranice. Činjenica je da pomoću plutajućih blokova možete kreirati horizontalni meni iz obične liste. Hajde da u početku imamo nešto ovako: