float
Proprietatea în CSS este folosit pentru poziționarea și dispunerea pe paginile web.
.module ( float: left; )
Valori
none
: elementul nu plutește. Aceasta este valoarea inițială.left
: plutește elementul în stânga containerului său.right
: plutește elementul în dreapta containerului său.inherit
: elementul moștenește direcția de plutire a părintelui său.
display: block;
Ce înseamnă Float?
Pentru a înțelege scopul și originea float
, putem căuta să imprimăm designul. Într-un aspect de imprimare, imaginile pot fi setate în pagină astfel încât textul să se înfășoare în jurul lor, după cum este necesar. Aceasta se numește în mod obișnuit și adecvat „text wrap”. Iată un exemplu în acest sens.
În programele de dispunere a paginilor, casetelor care conțin textul li se poate spune să onoreze textul sau să îl ignore. Ignorarea textului va permite cuvintelor să curgă chiar deasupra imaginii de parcă nici măcar nu ar fi fost acolo. Aceasta este diferența dintre acea imagine care face parte din fluxul paginii (sau nu). Designul web este foarte asemănător.
În designul web, elementele de pagină cu float
proprietatea CSS aplicată acestora sunt la fel ca imaginile din aspectul de imprimare în care textul curge în jurul lor. Elementele plutitoare rămân o parte a fluxului paginii web. Acest lucru este distinct diferit de elementele de pagină care utilizează poziționarea absolută. Elementele de pagină poziționate absolut sunt eliminate din fluxul paginii web, ca atunci când i s-a spus căsuței de text din aspectul de imprimare să ignore înfășurarea paginii. Elementele de pagină poziționate absolut nu vor afecta poziția altor elemente, iar alte elemente nu le vor afecta, indiferent dacă se ating sau nu.
Demo
Această demonstrație prezintă un articol cu două imagini: una setată la float: left
și una setată la float: right
. Apăsați butonul „comutați plutitoarele” pentru a comuta plutitoarele off și pornit.
Vedeți Exemplul Float Pen de CSS-Tricks (@ css-tricks) pe CodePen.
Plute pentru aspect
În afară de exemplul simplu de înfășurare a textului în jurul imaginilor, flotantele pot fi folosite pentru a crea machete web întregi .
Flotantele sunt, de asemenea, utile pentru aspect în instanțe mai mici. Luați de exemplu această mică zonă a unei pagini web. Dacă folosim float
pentru imaginea noastră de avatar, atunci când imaginea respectivă își schimbă dimensiunea, textul din casetă se va reface pentru a o adapta:
Același aspect ar putea fi realizat folosind poziționarea relativă pe container și poziționarea absolută pe avatar. Dar, atunci când se face în acest fel, textul nu ar fi afectat de avatar și nu ar putea să reflueze o schimbare de dimensiune.
Demo
Această demonstrație arată un avatar cu float: left
aplicație. Apăsați butonul „comutați dimensiunea imaginii” pentru a vedea o versiune mai largă a imaginii avatarului. Observați că textul revine pentru a se potrivi imaginii în loc să treacă peste imagine.
Vedeți Demo-ul Pen Float de CSS-Tricks (@ css-tricks) pe CodePen.
Goliți plutitorul
Proprietatea soră a lui Float este clear
. Un element care are clear
proprietatea setată pe el nu se va deplasa în sus adiacent plutitorului ca și dorințele plutitorului, ci se va deplasa în jos pe lângă plutitor. Din nou, o ilustrare este mai utilă decât cuvintele:
În exemplul de mai sus, bara laterală este plutită spre dreapta și este mai scurtă decât zona principală de conținut. Footerul este apoi necesar să sară în acel spațiu disponibil, așa cum este cerut de flotant. Pentru a remedia această problemă, subsolul poate fi șters pentru a vă asigura că rămâne sub ambele coloane plutite.
#footer ( clear: both; )
Clear are și patru valori valabile. Valoarea both
este cea mai frecvent utilizată, care șterge plutitorii care vin din ambele direcții. Valorile left
și right
pot fi utilizate pentru a șterge plutitorul dintr-o singură direcție, respectiv. Valoarea inițială este none
, care este de obicei inutilă, cu excepția cazului în care este utilizată pentru a elimina în mod explicit o clear
valoare care a fost setată. Valoarea inherit
face ca elementul să moștenească valoarea părintelui său clear
. În mod ciudat, Internet Explorer nu a acceptat această valoare până la IE8.
Ștergerea doar a left
sau right
plutitorul, deși este mai puțin văzută în sălbăticie, are cu siguranță utilizările sale.
Marele prăbușire
Unul dintre lucrurile mai uimitoare legate de lucrul cu flotante este modul în care acestea pot afecta elementul care le conține (elementul „părinte”). Dacă un element părinte nu conține altceva decât elemente plutite, înălțimea sa se prăbușește la nimic. Acest lucru nu este întotdeauna evident dacă părintele nu conține niciun fundal vizibil vizibil, dar este important să fie conștienți.
Oricât de contraintuitiv ar părea colapsul, alternativa este mai rea. Luați în considerare acest scenariu:
Dacă elementul bloc de deasupra ar fi trebuit să se extindă automat pentru a găzdui elementul plutit, am avea o pauză nefirească de spațiu în fluxul de text dintre paragrafe, fără o modalitate practică de a-l fixa. Dacă ar fi cazul, noi, designerii, ne-am plânge mult mai greu despre acest comportament decât despre colaps.
Colapsarea trebuie întotdeauna tratată pentru a preveni aspectul ciudat și problemele legate de browser. O reparăm degajând plutitorul după elementele plutite din container, dar înainte de închiderea containerului.
Tehnici de curățare a plutitorilor
Dacă vă aflați într-o situație în care știți întotdeauna care va fi elementul care urmează, puteți aplica clear: both;
valoarea respectivului element și puteți face afaceri. Acest lucru este ideal deoarece nu necesită hacks fantezie și nici elemente suplimentare care îl fac perfect semantic. Desigur, lucrurile nu funcționează așa și trebuie să avem mai multe instrumente de compensare a flotorului în cutia noastră de instrumente.
- Metoda Div Divizională este, literalmente, o divizare goală.
element sau un alt element aleatoriu folosit, dar div este cel mai frecvent, deoarece nu are un stil implicit al browserului, nu are nicio funcție specială și este puțin probabil să aibă un stil generic cu CSS. Această metodă este disprețuită de puriștii semantici, deoarece nu are nicio semnificație contextuală pentru pagină și este acolo doar pentru prezentare. Desigur, în cel mai strict sens, au dreptate. Dar, face treaba și nu face rău nimănui. - Metoda Overflow se bazează pe setarea
overflow
proprietății CSS pe un element părinte. Dacă această proprietate este setată laauto
sauhidden
pe elementul părinte, părintele se va extinde pentru a conține flotantele, ștergând-o efectiv pentru elementele următoare. Această metodă poate fi frumos semantică, deoarece nu poate necesita elemente suplimentare. Cu toate acestea, dacă vă găsiți adăugând un noudiv
doar pentru a aplica acest lucru, este la fel de nesemantic cadiv
metoda goală și mai puțin adaptabil. De asemenea, rețineți că proprietatea de revărsare nu este specifică pentru curățarea plutitorilor. Aveți grijă să nu ascundeți conținutul sau să declanșați bare de derulare nedorite. - Metoda Easy Clearing (cunoscută și sub denumirea de „clearfix”) folosește un pseudoselector CSS inteligent (
:after
) pentru a șterge plutitoarele. În loc să setați revărsarea pe părinte, aplicați o clasă suplimentară precum „clearfix”. Apoi aplicați acest CSS:.clearfix:after ( content: ""; visibility: hidden; display: block; height: 0; clear: both; )
Aceasta va aplica un pic de conținut, ascuns vizualizării, după elementul părinte care șterge float-ul. Aceasta nu este întreaga poveste, deoarece codul suplimentar trebuie utilizat pentru a se potrivi browserelor mai vechi. Notă: Consultați și acest fragment care ține evidența celor mai recente și mai bune în clearfixes, inclusiv în noul „micro clearfix”.
Diferite scenarii necesită diferite metode de compensare prin flotare. Luați de exemplu o grilă de blocuri, fiecare dintre diferite tipuri.
Pentru a conecta vizual mai bine blocurile similare, vrem să începem un rând nou după cum ne place, în acest caz când culoarea se schimbă. Am putea utiliza fie metoda de revărsare, fie metoda de curățare ușoară, dacă fiecare dintre grupurile de culori avea un element părinte. Sau, folosim metoda div goală între fiecare grup. Trei divs de împachetare care nu existau anterior sau trei după divs care nu existau anterior. Vă voi lăsa să decideți care este mai bine.
Probleme cu plutitoarele
Plutitoarele sunt adesea bătute pentru că sunt fragile. Majoritatea acestei fragilități provin din bug-uri din IE6 și IE7. Pe măsură ce aceste browsere se estompează în trecut, aceste bug-uri se estompează odată cu ele. Dar, merită totuși să le înțelegeți dacă vreodată trebuie să depanați un „OldIE”.
- Pushdown este un simptom al unui element din interiorul unui obiect plutitor care este mai lat decât plutitorul în sine (de obicei o imagine). Cele mai multe browsere vor reda imaginea în afara flotantului, dar nu vor avea o parte care să afecteze alt aspect. Versiunile vechi ale IE au extins float-ul pentru a conține imaginea, afectând adesea în mod drastic aspectul. Un exemplu obișnuit este o imagine care iese din conținutul principal, împingeți bara laterală în jos.
Remediere rapidă: asigurați-vă că nu aveți nicio imagine care să facă acest lucru, utilizați
overflow: hidden;
pentru a tăia excesul. - Bug cu marjă dublă - Un alt lucru de reținut atunci când aveți de a face cu IE 6 este că, dacă aplicați o marjă în aceeași direcție ca float, aceasta va dubla marja. Remediere rapidă: setați
display: inline
pe flotor și nu vă faceți griji că va rămâne un element la nivel de bloc. - 3px Jog este atunci când un text care este lângă un element de plutit este misterios lovit departe de 3px ca un câmp de forță ciudat în jurul float. Fixare rapidă: setați o lățime sau o înălțime pe textul afectat.
- În IE 7, eroarea de marjă inferioară a fost atunci când un părinte plutitor are copii plutitori în interiorul acestuia, marja inferioară a acestor copii este ignorată de părinte. Remediere rapidă: folosind în schimb căptușeala inferioară pe părinte.
Alternative
Dacă aveți nevoie de text înfășurat în jurul imaginilor, nu există într-adevăr alternative pentru float. Apropo, verificați această tehnică destul de inteligentă pentru a înfășura textul în jurul unor forme neregulate. Dar pentru aspectul paginii, cu siguranță există opțiuni. Eric Sol are un articol despre A List Apart, Faux Absolute Positioning, care descrie o tehnică foarte interesantă care combină în multe feluri flexibilitatea plutitorilor cu puterea poziționării absolute.
CSS3 abordează aspectul paginii în câteva moduri:
- Flexbox
- Aspect cu mai multe coloane
- Aspectul grilei
Au fost discutate plutitoare poziționate absolut (de exemplu, vă poziționați în mod normal ca normal, dar elementul este încă în măsură să afecteze alte elemente, cum ar fi înfășurarea textului în jurul său), dar cred că ideea a fost abandonată datorită similitudinilor cu alte idei de aspect mai robuste.
Video
Am făcut un screencast cu ceva timp în urmă explicând multe dintre aceste concepte plutitoare.
Legate de
clear
position
Mai multe informatii
float
în specificația W3Cfloat
la MDN
Suport pentru browser
Crom | Safari | Firefox | Operă | IE | Android | iOS |
---|---|---|---|---|---|---|
Toate | Toate | Toate | Toate | Toate | Toate | Toate |