Menu

Float i clear w CSS: opływanie obrazków tekstem

float spycha element na jedną stronę i pozwala tekstowi go opływać, tak jak w czasopismach umieszcza się zdjęcia. Poznaj float left, right i inline-start, clear, powód, dla którego rodzic zapada się wokół elementów pływających, jak naprawia to display: flow-root i dlaczego float nie służy już do układu strony.

Na tej stronie są działające edytory: edytuj, uruchamiaj i od razu zobacz wynik.

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
leftZepchnięty do lewej krawędzi
rightZepchnięty do prawej krawędzi
inline-startZepchnięty na początek linii: w lewo po polsku, w prawo po arabsku albo hebrajsku
inline-endZepchnię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 albo margin: 0 auto.
  • Treść po elemencie pływającym, która go opływa, choć nie powinna. Nadaj jej clear: both albo umieść element pływający i jego tekst w kontenerze flow-root.
  • Fizyczne left i right w wielojęzycznej witrynie. Użyj inline-start i inline-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.

Ilustracja języków programowania w Coddy

Ucz się programowania z Coddy

ZACZNIJ