Den float
eiendom i CSS brukes for posisjonering og layout på nettsider.
.module ( float: left; )
Verdier
none
: elementet flyter ikke. Dette er den opprinnelige verdien.left
: flyter elementet til venstre for beholderen.right
: flyter elementet til høyre for containeren.inherit
: elementet arver foreldrenes flyteretning.
display: block;
Hva betyr float?
For å forstå formålet og opprinnelsen til float
, kan vi se etter trykkdesign. I et utskriftsoppsett kan bilder settes inn på siden slik at teksten brytes rundt dem etter behov. Dette kalles ofte og "passende tekst". Her er et eksempel på det.


I sidelayoutprogrammer kan boksene som inneholder teksten bli bedt om å respektere tekstinnpakningen, eller å ignorere den. Hvis du ignorerer tekstfolien, kan ordene flyte rett over bildet som om det ikke engang var der. Dette er forskjellen mellom at bildet er en del av flyten på siden (eller ikke). Nettdesign er veldig lik.


I webdesign er sideelementer med CSS- float
egenskapen som er brukt på dem, akkurat som bildene i utskriftsoppsettet der teksten flyter rundt dem. Flyteelementer forblir en del av flyten på websiden. Dette er tydelig annerledes enn sideelementer som bruker absolutt posisjonering. Absolutt posisjonerte sideelementer fjernes fra flyten på websiden, som når tekstboksen i utskriftsoppsettet ble bedt om å ignorere sideomslaget. Absolutt plasserte sideelementer vil ikke påvirke posisjonen til andre elementer, og andre elementer vil ikke påvirke dem, enten de berører hverandre eller ikke.
Demo
Denne demoen viser en artikkel med to bilder: ett satt til float: left
og et sett til float: right
. Trykk på “toggle floats” -knappen for å slå flyter av og på.
Se pennfloateksemplet av CSS-Tricks (@ css-tricks) på CodePen.
Flyter for layout
Bortsett fra det enkle eksemplet på å pakke inn tekst rundt bilder, kan du bruke flater til å lage hele weboppsett .


Flyter er også nyttige for layout i mindre tilfeller. Ta for eksempel dette lille området på en webside. Hvis vi bruker float
for avatarbildet vårt, vil teksten i ruten flyte for å imøtekomme det når bildet endrer størrelse:


Det samme oppsettet kan oppnås ved å bruke relativ posisjonering på containeren og absolutt posisjonering på avataren også. Men når det er gjort på den måten, ville teksten ikke bli påvirket av avataren, og ville ikke være i stand til å reflektere over en størrelsesendring.


Demo
Denne demoen viser en avatar med float: left
anvendt. Trykk på “veksle bildestørrelse” -knappen for å se en bredere versjon av avatarbildet. Legg merke til at teksten flyter for å imøtekomme bildet i stedet for å løpe over bildet.
Se Pen Float Demo av CSS-Tricks (@ css-tricks) på CodePen.
Rydding av flottøren
Floats søstereiendom er clear
. Et element som har clear
egenskapen satt på, vil ikke bevege seg opp ved siden av flottøren slik flottøren ønsker, men vil bevege seg ned forbi flottøren. Igjen er en illustrasjon mer nyttig enn ord:


I eksemplet ovenfor svever sidefeltet til høyre og er kortere enn hovedinnholdsområdet. Bunnteksten kreves da for å hoppe opp i den tilgjengelige plassen som kreves av flottøren. For å løse dette problemet kan bunnteksten tømmes for å sikre at den holder seg under begge flytende kolonnene.
#footer ( clear: both; )


Clear har også fire gyldige verdier. Verdien both
er mest brukt, som tømmer flyter som kommer fra begge retninger. Verdiene left
og right
kan brukes til å bare fjerne flottøren fra henholdsvis en retning. Den opprinnelige verdien er none
, noe som vanligvis er unødvendig med mindre den brukes til å eksplisitt fjerne en clear
verdi som er angitt. Verdien inherit
får elementet til å arve foreldrenes clear
verdi. Merkelig nok støttet ikke Internet Explorer denne verdien før IE8.
Å fjerne bare left
eller right
flyte, selv om det er mindre vanlig i naturen, har definitivt sine bruksområder.


Den store kollapsen
En av de mer forvirrende tingene ved å jobbe med flyter er hvordan de kan påvirke elementet som inneholder dem (deres "foreldre" -element). Hvis et overordnet element bare inneholder flytende elementer, kollapser høyden til ingenting. Dette er ikke alltid åpenbart hvis foreldrene ikke har noen synlig bakgrunn, men det er viktig å være klar over.


Så kontraintuitivt som å kollapse kan virke, er alternativet verre. Tenk på dette scenariet:


Hvis blokkelementet på toppen automatisk hadde utvidet seg for å imøtekomme det flytende elementet, ville vi ha et unaturlig avstandsbrudd i tekstflyten mellom avsnitt, uten praktisk måte å fikse det på. Hvis dette var tilfelle, ville vi designere klage mye hardere over denne oppførselen enn vi gjør om å kollapse.
Å kollapse må nesten alltid håndteres for å forhindre merkelig layout og problemer i tvers av nettlesere. Vi fikser det ved å rydde flottøren etter de flytende elementene i containeren, men før containeren lukkes.
Teknikker for rydding av flyter
Hvis du er i en situasjon der du alltid vet hva det påfølgende elementet kommer til å være, kan du bruke clear: both;
verdien på det elementet og gå videre med virksomheten din. Dette er ideelt, da det ikke krever noen fancy hacks og ingen ekstra elementer som gjør det perfekt semantisk. Selvfølgelig fungerer ting vanligvis ikke slik, og vi må ha flere verktøy for flyting i verktøyboksen.
- Den tomme div-metoden er bokstavelig talt en tom div.
element eller et annet tilfeldig element brukt, men div er det vanligste fordi det ikke har noen nettleserstil styling, ikke har noen spesiell funksjon, og det er lite sannsynlig at det blir generisk stylet med CSS. Denne metoden blir foraktet av semantiske purister, siden den ikke har noen kontekstuell betydning for siden og er der kun for presentasjon. I strengeste forstand har de selvfølgelig rett. Men det blir jobben gjort og skader ingen. - Overflow-metoden er avhengig av å sette
overflow
CSS-egenskapen på et overordnet element. Hvis denne egenskapen er satt tilauto
ellerhidden
på det overordnede elementet, utvides den overordnede for å inneholde flottørene og fjerner den effektivt for påfølgende elementer. Denne metoden kan være vakkert semantisk, da den kanskje ikke krever flere elementer. Imidlertid, hvis du finner deg selv å legge til et nyttdiv
bare for å bruke dette, er det like usemantisk som den tommediv
metoden, og mindre tilpasningsdyktig. Vær også oppmerksom på at overløpsegenskapen ikke er spesifikt for å rydde flyter. Vær forsiktig så du ikke skjuler innhold eller utløser uønskede rullefelt. - Easy Clearing-metoden (ellers kjent som “clearfix”) bruker en smart CSS-pseudovelger (
:after
) for å fjerne flyt. I stedet for å sette overløpet på foreldrene, bruker du en ekstra klasse som "clearfix" til den. Bruk deretter denne CSS:.clearfix:after ( content: ""; visibility: hidden; display: block; height: 0; clear: both; )
Dette vil bruke en liten bit innhold, skjult fra visningen, etter det overordnede elementet som rydder flottøren. Dette er ikke helt hele historien, ettersom tilleggskode må brukes til å imøtekomme eldre nettlesere. Merk: Se også dette utdraget som holder oversikt over det siste og beste innen clearfixes, inkludert den nyere "micro clearfix."
Ulike scenarier krever forskjellige flytningsmetoder. Ta for eksempel et rutenett av blokker, hver av forskjellige typer.


For å bedre koble lignende blokker visuelt, vil vi starte en ny rad som vi vil, i dette tilfellet når fargen endres. Vi kunne bruke enten overløps- eller enkel ryddemetode hvis hver av fargegruppene hadde et overordnet element. Eller vi bruker den tomme div-metoden mellom hver gruppe. Tre innpakningsdeler som ikke tidligere eksisterte eller tre etter divs som ikke tidligere eksisterte. Jeg lar deg bestemme hvilken som er bedre.


Problemer med flyter
Flyter blir ofte slått på for å være skjøre. Størstedelen av denne skjørheten kom fra feil i IE6 og IE7. Når disse nettleserne forsvinner inn i fortiden, falmer disse feilene sammen med dem. Men det er fortsatt verdt å forstå dem hvis du noen gang trenger å feilsøke en "OldIE".
- Pushdown er et symptom på at et element i et flytende element er bredere enn selve flottøren (vanligvis et bilde). De fleste nettlesere vil gjengi bildet utenfor flottøren, men ikke at delen som stikker ut påvirker annet oppsett. Gamle versjoner av IE utvidet flottøren til å inneholde bildet, og påvirket ofte layoutet drastisk. Et vanlig eksempel er et bilde som stikker ut av hovedinnholdet og skyver sidefeltet nedenfor.
Rask løsning: Sørg for at du ikke har noen bilder som gjør dette, bruk for
overflow: hidden;
å kutte overflødig. - Double Margin Bug - En annen ting å huske når du arbeider med IE 6 er at hvis du bruker en margin i samme retning som flottøren, vil den doble margen. Rask løsning: sett
display: inline
på flottøren, og ikke bekymre deg, det forblir et element på blokknivå. - Den 3px Jog er når tekst som er opp ved siden av en fløt element mystisk sparket bort av 3px som en merkelig Forcefield rundt flottøren. Rask løsning: angi en bredde eller høyde på den berørte teksten.
- I IE 7, den bunnmargen Bug var da om en fløt forelder har fløt barn inni den, er bunnmargen på de barna oversett av foreldrene. Rask løsning: Bruk bunnpolstring på foreldrene i stedet.
Alternativer
Hvis du trenger tekstinnpakning rundt bilder, er det virkelig ingen alternativer for å flyte. Når du snakker om det, sjekk ut denne ganske smarte teknikken for å pakke tekst rundt uregelmessige former. Men for sideoppsett er det definitivt valg. Eric Sol har en artikkel om A List Apart, Faux Absolute Positioning, som beskriver en veldig interessant teknikk som på mange måter kombinerer fleksibiliteten til flottører med styrken til absolutt posisjonering.
CSS3 takler sidelayout på et par måter:
- Flexbox
- Layout med flere kolonner
- Rutenettoppsett
Absolutt posisjonerte flyter (f.eks. At du absolutt posisjonerer som normalt, men elementet er fremdeles i stand til å påvirke andre elementer, som å ha tekstfolie rundt det) ble diskutert, men jeg tror ideen ble skrinlagt på grunn av likheter med andre mer robuste layoutideer.
Video
Jeg gjorde en screencast for en stund tilbake og forklarte mange av disse flytebegrepene.
I slekt
clear
position
Mer informasjon
float
i W3C-spesifikasjonenfloat
ved MDN
Nettleserstøtte
Chrome | Safari | Firefox | Opera | DVS | Android | iOS |
---|---|---|---|---|---|---|
Alle | Alle | Alle | Alle | Alle | Alle | Alle |