Niedawno przeglądałem kod strony i zobaczyłem, że każdy <div>
ma swoją klasę clearfix
.
Po szybkim wyszukiwaniu w Google dowiedziałem się, że czasami jest to IE6, ale czym właściwie jest poprawka?
Czy możesz podać kilka przykładów układu z poprawką, w porównaniu do układu bez poprawki?
div
wola zostanie w pełni rozwinięta do odpowiedniej wysokości, aby zamknąć pływające elementy potomne. webtoolkit.info/css-clearfix.htmlOdpowiedzi:
Jeśli nie potrzebujesz obsługiwać IE9 lub niższej wersji, możesz swobodnie korzystać z Flexboksa i nie musisz używać układów swobodnych.
Warto zauważyć, że dziś stosowanie elementów pływających w układzie jest coraz bardziej zniechęcane przy użyciu lepszych alternatyw.
display: inline-block
- LepszyFlexbox jest obsługiwany przez Firefox 18, Chrome 21, Opera 12.10 i Internet Explorer 10, Safari 6.1 (w tym Mobile Safari) i domyślną przeglądarkę Androida 4.4.
Szczegółowa lista przeglądarek znajduje się na stronie : https://caniuse.com/flexbox .
(Być może po całkowitym ustaleniu pozycji może to być absolutnie zalecany sposób układania elementów.)
Clearfix to sposób, w jaki element automatycznie usuwa swoje elementy potomne , dzięki czemu nie trzeba dodawać dodatkowych znaczników. Zwykle jest stosowany w układach pływających, w których elementy są unoszone w stos, aby można je było układać poziomo.
Clearfix jest sposobem na rozwiązanie problemu kontenera o zerowej wysokości dla elementów pływających
Usunięcie poprawki wykonuje się w następujący sposób:
Lub, jeśli nie potrzebujesz obsługi IE <8, następujące są również w porządku:
Zwykle musisz zrobić coś w następujący sposób:
Z clearfix potrzebujesz tylko:
Przeczytaj o tym w tym artykule - Chris Coyer @ CSS-Tricks
źródło
content: "\00A0";
\ 00A0 reprezentuje białą spację, prosta biała spacja nie działa dobrze :) przepraszam. :)display: inline-block
jest lepsze niż zmienne dla układu opartego na blokach. Bloki śródliniowe są, jak sama nazwa wskazuje, układane liniowo - większość układów jest oparta na blokach, a umieszczenie tych bloków w kontekście formatowania wbudowanego po prostu nie ma sensu. Musisz także poradzić sobie z różnymi problemami związanymi z formatowaniem wbudowanym, takimi jak białe elementy między elementami, inne elementy wbudowane, zmiana rozmiaru, wyrównanie itd., Jak zauważyło wiele innych. To prawda, że układy zmiennoprzecinkowe też nie mają większego sensu, ale przynajmniej zmiennoprzecinkowe mają tę zaletę, że są oparte na blokach.Pozostałe odpowiedzi są poprawne. Ale chcę dodać, że jest to relikt czasów, gdy ludzie po raz pierwszy uczyli się CSS i wykorzystywani byli
float
do robienia całego ich układu.float
ma na celu robienie rzeczy takich jak pływające obrazy obok długich serii tekstu, ale wiele osób używało go jako głównego mechanizmu układu. Ponieważ tak naprawdę nie było do tego przeznaczone, potrzebujesz hacków takich jak „clearfix”, aby działało.Te dni
display: inline-block
to solidna alternatywa ( z wyjątkiem IE6 i IE7 ), chociaż pojawiają się bardziej nowoczesne przeglądarki z jeszcze bardziej przydatnymi mechanizmami układu pod nazwami takimi jak Flexbox, układ siatki itp.źródło
inline-block
nie jest ścisłym ulepszeniem w stosunku do liczb zmiennoprzecinkowych z powodu problemu odstępów między blokami , gdzie białe znaki w HTML przekładają się na znaki spacji oddzielające bloki.inline-block
wymaga własnych obejść , podobnie jakfloat
wymaga poprawki.clearfix
Pozwala pojemnik owinąć jego płynęły dzieci. Bezclearfix
podobnej stylizacji pojemnik nie otacza pływających elementów potomnych i zapada się, tak jakby jego pływające elementy były ustawione absolutnie.Istnieje kilka wersji poprawki, w których kluczowymi autorami są Nicolas Gallagher i Thierry Koblentz .
Jeśli chcesz obsługiwać starsze przeglądarki, najlepiej użyć tej poprawki:
W SCSS możesz użyć następującej techniki:
Jeśli nie zależy ci na obsłudze starszych przeglądarek, istnieje krótsza wersja:
źródło
div
zawijanie elementów pływających? Czy możesz mi pomóc to sobie wyobrazić?Aby zaoferować aktualizację sytuacji w drugim kwartale 2017 r.
Nowa właściwość wyświetlania CSS3 jest dostępna w Firefox 53, Chrome 58 i Opera 45.
Sprawdź dostępność dowolnej przeglądarki tutaj: http://caniuse.com/#feat=flow-root
Element (z właściwością display ustawioną na flow-root) generuje blokowe pudełko kontenerowe i określa jego zawartość za pomocą układu przepływu. Zawsze ustanawia nowy kontekst formatowania bloku dla swojej zawartości.
Oznacza to, że jeśli użyjesz rodzica div zawierającego jedno lub kilka pływających dzieci, ta właściwość zapewni, że rodzic otoczy wszystkie swoje dzieci. Bez potrzeby hackowania poprawki. Na dowolnych elementach podrzędnych, nawet na ostatnim elemencie obojętnym (jeśli korzystałeś z wariantu clearfix z: przed ostatnim elementem podrzędnym).
źródło
flow-root
.Mówiąc najprościej, clearfix to hack .
Jest to jedna z tych brzydkich rzeczy, z którymi wszyscy musimy po prostu żyć, ponieważ jest to naprawdę jedyny rozsądny sposób zapewnienia, aby pływające elementy potomne nie przepełniały ich rodziców. Istnieją inne schematy układu, ale obecnie pływanie jest zbyt powszechne w projektowaniu / tworzeniu stron internetowych, aby zignorować wartość włamania do poprawki.
Osobiście skłaniam się ku rozwiązaniu Micro Clearfix (Nicolas Gallagher)
odniesienie
źródło
Techniką powszechnie stosowaną w układach zmiennoprzecinkowych CSS jest przypisywanie garści właściwości CSS do elementu, o którym wiesz, że będzie zawierał elementy pływające. Technika, która jest powszechnie implementowana przy użyciu definicji klasy o nazwie
clearfix
(zwykle) implementuje następujące zachowania CSS:Celem tych połączonych zachowań jest utworzenie kontenera
:after
z aktywnym elementem zawierającym pojedynczy „.” oznaczony jako ukryty, który usunie wszystkie istniejące zmiennoprzecinkowe i skutecznie zresetuje stronę do następnego fragmentu treści.źródło
Inną (i być może najprostszą) opcją, aby uzyskać poprawkę, jest użycie
overflow:hidden;
elementu zawierającego. Na przykładOczywiście można tego użyć tylko w przypadkach, w których nigdy nie chcesz, aby treść się przepełniła.
źródło
Wypróbowałem zaakceptowaną odpowiedź, ale nadal miałem problem z wyrównaniem zawartości. Dodanie selektora „: przed”, jak pokazano poniżej, rozwiązało problem:
MNIEJ powyżej skompiluje się do CSS poniżej:
źródło
Oto inna metoda ta sama rzecz, ale trochę inna
różnicą jest kropka zawartości, która jest zastępowana przez
\00A0
==whitespace
Więcej na ten temat http://www.jqui.net/tips-tricks/css-clearfix/
Oto jego kompaktowa wersja ...
źródło
.clearfix {...}
,html[xmlns] .clearfix {...}
,* html .clearfix {...}
, I.clearfix {...}
wszystko wybrać to samo i nadpisać nawzajem. To jest trochę zuchwałe i nie jest tak naprawdę potrzebne.\00A0
myślę, że było tak z powodu kompatybilności między przeglądarkami i znajomości czasu.