Som du kan se tar den första bilden faktiskt den högsta positionen. På samma sätt placeras den fjärde bilden på höger sida när linjen bryts. Det här är därför att du sällan ser att någon flyter en lista med navigeringselement till höger. Att göra så skruvar med ordningen och skulle kräva oönskade ändringar i HTML-hierarkin för att lösa.
Clearing Floats
Floats är praktiska för att utföra några bra layoutfeatures som att skapa kolumner innehåll. En gång deklarerat har de dock en effekt på resten av dokumentets flöde som du kanske eller kanske inte gillar! Låt oss till exempel säga att vi ville kasta in ett stycke efter ett block med vänsterflytande listobjekt som det vi hade ovan.
Resultatet kommer förmodligen inte att vara det du hoppades på:
Svaret här är att använda klar egendom, vilket gör det så att inga flytande föremål kan visas på en given sida av det element som det appliceras på. Låt oss säga att vi riktar oss till det andra listobjektet i vårt lilla galleri och tillämpar ett värde på ? Clear: left?.
Vad den här koden gör är att berätta för webbläsaren om att toppen av det andra listobjektet måste ligga under botten av eventuella vänstra flytande objekt före det (i det här fallet det första listobjektet). Om vi hade alla float alla dessa element till höger, skulle vi ha haft att använda ? klart: rätt? istället.
Observera att efter det här kvarstår resten av de flytande föremålen. Det beror på att de fortfarande är inställda att flyta till vänster, den klara egendomen avbryter inte detta på något sätt. Det betyder att vårt problem med stycket inte är fixat genom att rensa någon av listobjekten.
Istället måste det hända att styckeelementet, som är ett blocknivåelement som inte har floats, måste rensas. Detta kommer att se till att det visas under de flytande elementen istället för bredvid dem.
Vi behövde tekniskt bara en vänster klar här, men när en utvecklare vill vara säker på att rensa alla flottor är det vanligt att se både värde som används. Denna förändring fixade vårt problem snyggt!
Float Quirks och Clear Fixes
Det finns en särskild handling som äger rum när ett visst element innehåller endast flytande element: moderelementets höjd sammanfaller. För att illustrera detta, låt oss säga att vi ville lägga en bakgrundsfärg på den oordnade listan som vi använder i alla våra exempel. Om elementen i listan inte floats, behöver vi bara använda färgen till bakgrunden med hjälp av CSS.
Som du kan se i exemplet nedan har rutan som definierar den oordnade listan blivit grå och listobjekten är staplade ovanpå varandra.
Men den andra som vi flyter de här listobjekten, den UL innehåller bara flytande element, och så dess höjd kollapser, vilket ger en nybörjareutvecklare undra vad det hände med sin bakgrundsfärg.
Det finns ett antal sätt att lösa detta problem. Den enklaste och mest enkla lösningen är att helt enkelt tillämpa en explicit höjd på moderelementet, vilket är den oordnade listan.
Som du kan se gav detta oss verkligen vår bakgrundsfyllning. Detta är dock sällan den önskvärda kursen att ta helt enkelt eftersom det är mer praktiskt i det långa loppet om höjden automatiskt beräknas utifrån innehållet. Om vi lägger till ytterligare tre rader av bilder på vår lista, kommer den höjden inte att vara tillräcklig.
Clearfix till räddningen
Det är här termen? Clear fix ,? också skrivet? clearfix ,? kommer i spel. Clearfixes adresserar detta problem med kollapshöjd traditionellt genom användningen av klar fast egendom.
Vilka utvecklare brukade göra är att skapa ett tomt element (ofta en div) i deras HTML på samma nivå som de flytande objekten och tillämpa sedan en klass av? Clearfix? till den tomma behållaren. Tillbaka i CSS, skulle du då lägga till flotta på? Clearfix? fast egendom.
Detta fixar omedelbart problemet med kollapsad höjd:
Med tanke på vad vi redan har lärt oss vet vi exakt varför det här tricket fixade vårt problem. Anledningen till att höjden hade kollapsat är att föräldern bara innehöll flytande barn. Nu har det ett barn, om än en tom, som inte floats, så autohöjden fungerar som förväntat igen.
Problemet med den här metoden är att ingen tyckte om det extra fula elementet i HTML. Det var helt enkelt inte semantiskt, vilket innebar att det inte hjälpte till att kommunicera den tydliga hierarkin på sidan.
Den nya fina lösningen för detta problem är att dra nytta av svämma över egendom som reglerar funktionaliteten för innehåll som sträcker sig utanför gränserna för dess innehållande lådor. Det visar sig att om du sätter överflöd till dold eller bil På föräldraobjektet fixar det höjden!
Detta är definitivt den kortaste och mest eleganta lösningen för att lösa problemet med kollapsande höjd och bör gå till strategin. Med det sagt kommer det att finnas fall där du vill att överflödet av ett element ska ställas in synlig, vad ska du göra då?
Svaret är att använda Nick Gallaghers Micro Clearfix Hack, som använder något genius CSS för att åtgärda problemet. För det första använder den: före och: efter att lägga till något innehåll som vi kan använda för att skapa något i föräldern som inte floats. Men du vill verkligen inte ha något innehåll här, så vi lämnar det tomt men ställer in displayen till bordet för att skapa en anonym cell (tom och tar ingen plats) och slutligen använda vår gamla vänklara. Detta skapar det osynliga blocknivåobjektet som vi behöver för att fixa höjdsackumuleringen utan extra HTML-markup. Äldre versioner av IE kräver sin egen fix så det här kastas också.
Slutsats
I den här artikeln gick vi över en ton av stor information, både grundläggande och komplicerad. Vi började med en diskussion om hur floats är och hur de fungerar på en grundläggande nivå och fortsatte sedan med hur inställning av ett element för att flyta påverkar de kringliggande delarna av de involverade elementen så att du kan räkna ut hur du får dina marginaler att fungera som du vill att de ska.
Därefter flyttade vi på de grundläggande reglerna som styr positionen för ett flytande element och kom fram till några intressanta slutsatser för hur flytande element av varierande höjder kommer att placeras, liksom hur rätt flytande föremål uppträder i omvänd ordning.
Slutligen lagde vi tydligt hela berättelsen om hur en förälder som bara innehåller flytande barn kommer att ha en kollapsad höjd och hur du kan lösa det baserat på ditt specifika scenario.
Om floats var något som förvirrade dig innan du läste den här artikeln, gå med i klubben. De förvirrar oss alla först. Förhoppningsvis, även om du nu har en enastående kunskap om hur flottor fungerar och hur du kan använda dem för att uppnå vilken layout du vill ha. Lämna en kommentar nedan och meddela om du hittade den här informationen till hjälp.