Co robi float
float spycha element na jedną stronę kontenera i pozwala następującemu po nim tekstowi go opływać:
Margines na pływającym pudełku sprawia, że tekst go nie dotyka. Marginesami sterujesz tym odstępem; samemu tekstowi nie da się nadać marginesu od strony elementu pływającego.
Wartości
| Wartość | Wynik |
|---|---|
none (domyślnie) | Brak float |
left | Zepchnięty do lewej krawędzi |
right | Zepchnięty do prawej krawędzi |
inline-start | Zepchnięty na początek linii: w lewo po polsku, w prawo po arabsku albo hebrajsku |
inline-end | Zepchnięty na koniec linii |
inline-start i inline-end podążają za kierunkiem pisania, więc zbudowany z nimi układ poprawnie odwraca się na stronach pisanych od prawej do lewej. Element pływający staje się też blokiem: display: inline zamienia się w block, więc width i height działają nawet na span albo img.
Obrazki pływające w tekście
Klasyczne zastosowanie: obrazek w artykule, a wokół niego płynący tekst. Ustaw po jednym z każdej strony:
clear: koniec opływania
clear oznacza "zacznij pod wszystkimi wcześniejszymi elementami pływającymi po tej stronie". Użyj go na elemencie, który nie powinien stać obok elementu pływającego, na przykład na nagłówku następnej sekcji:
Pierwszy nagłówek wciska się obok elementu pływającego. Drugi zaczyna się pod nim. clear przyjmuje left, right, both, inline-start, inline-end i none.
Zapadający się rodzic i flow-root
Elementy pływające są poza zwykłym przepływem, więc kontener, którego wszystkie dzieci pływają, nie ma nic w przepływie i zapada się do zerowej wysokości. Jego tło i obramowanie kończą jako cienka linia nad elementami pływającymi:
display: flow-root tworzy nowy kontekst formatowania blokowego, który zawsze obejmuje swoje elementy pływające. Starszy kod używa do tego samego "clearfixa":
.clearfix::after {
content: "";
display: block;
clear: both;
}
overflow: hidden albo auto też obejmuje elementy pływające, ale z efektem ubocznym w postaci przycinania; zobacz overflow.
Float nie służy do układu
Przed flexboxem i gridem całe układy stron budowano z pływających kolumn, z clearfixami i obliczaniem szerokości na każdym kroku. Ta epoka się skończyła: float nie potrafi wyśrodkować, nie wyrówna wysokości kolumn i psuje się, gdy treść zmienia rozmiar. Do rzędów i kolumn używaj display: flex albo display: grid, a float zostaw do opływania czegoś tekstem. Żeby wyśrodkować obrazek zamiast go opływać, zobacz, jak wyśrodkować obrazek.
Opływanie kształtu
shape-outside pozwala tekstowi podążać za kształtem zamiast za prostokątem elementu pływającego. Działa tylko na elementach pływających:
.avatar {
float: left;
width: 120px; height: 120px;
border-radius: 50%;
shape-outside: circle(50%);
margin-inline-end: 16px;
}
Częste błędy
- Rodzic o zerowej wysokości. Wszystkie jego dzieci pływają. Dodaj
display: flow-root. - Float do kolumn albo nawigacji. Użyj flexboxa albo grida.
- Oczekiwanie
float: center. Taka wartość nie istnieje. Wyśrodkuj flexboxem, gridem albomargin: 0 auto. - Treść po elemencie pływającym, która go opływa, choć nie powinna. Nadaj jej
clear: bothalbo umieść element pływający i jego tekst w kontenerzeflow-root. - Fizyczne
leftirightw wielojęzycznej witrynie. Użyjinline-startiinline-end, żeby układ odwracał się w językach pisanych od prawej do lewej.
Najczęściej zadawane pytania
Co robi float w CSS?
Wyjmuje element ze zwykłego przepływu i spycha go do lewej albo prawej krawędzi kontenera. Tekst i treść liniowa, które następują po nim, go opływają.
Co robi clear?
clear przenosi element pod wszystkie wcześniejsze elementy pływające po wskazanej stronie: clear: left, clear: right albo clear: both. W ten sposób zatrzymujesz opływanie treścią elementu pływającego.
Dlaczego rodzic elementu pływającego ma zerową wysokość?
Elementy pływające są poza zwykłym przepływem, więc rodzic, który ma tylko pływające dzieci, nie ma treści w przepływie i się zapada. Dodaj rodzicowi display: flow-root, a urośnie, żeby objąć swoje elementy pływające.
Co to jest clearfix?
Sztuczka, dzięki której rodzic obejmuje swoje elementy pływające, tradycyjnie pseudoelement ::after z clear: both. Dziś display: flow-root na rodzicu robi to samo w jednej linii.
Czy używać float do układu strony?
Nie. Float służył do kolumn, zanim powstały flexbox i grid. Do układu używaj flexboxa albo grida, a float zostaw do jego pierwotnego zadania: opływania tekstem obrazka albo wyróżnionego cytatu.