Recentemente, eu estava olhando o código de algum site e vi que todos <div>
tinham uma classe clearfix
.
Após uma rápida pesquisa no Google, soube que às vezes é para o IE6, mas o que é realmente uma correção?
Você poderia fornecer alguns exemplos de um layout com um clearfix, comparado a um layout sem um clearfix?
div
seja totalmente expandida para a altura adequada para incluir seus filhos flutuantes. webtoolkit.info/css-clearfix.htmlRespostas:
Se você não precisa oferecer suporte ao IE9 ou inferior, pode usar o flexbox livremente e não precisa usar layouts flutuantes.
Vale ressaltar que hoje, o uso de elementos flutuantes no layout está ficando cada vez mais desencorajado com o uso de melhores alternativas.
display: inline-block
- MelhorO Flexbox é suportado no Firefox 18, Chrome 21, Opera 12.10 e Internet Explorer 10, Safari 6.1 (incluindo o Mobile Safari) e no navegador padrão do Android 4.4.
Para uma lista detalhada de navegadores, consulte: https://caniuse.com/flexbox .
(Talvez uma vez que sua posição esteja completamente estabelecida, talvez seja a maneira absolutamente recomendada de apresentar elementos.)
Um clearfix é uma maneira de um elemento limpar automaticamente seus elementos filhos , para que você não precise adicionar marcações adicionais. Geralmente é usado em layouts de flutuador, onde os elementos são flutuados para serem empilhados horizontalmente.
O clearfix é uma maneira de combater o problema do contêiner de altura zero para elementos flutuantes
Um clearfix é executado da seguinte maneira:
Ou, se você não precisar de suporte do IE <8, o seguinte também é bom:
Normalmente você precisaria fazer o seguinte:
Com o clearfix, você só precisa do seguinte:
Leia sobre isso neste artigo - por Chris Coyer @ CSS-Tricks
fonte
content: "\00A0";
o \ 00A0 representa um espaço em branco, um espaço em branco simples não funciona bem :) desculpe. :)display: inline-block
é melhor do que flutua no layout baseado em bloco. Blocos embutidos são, como o próprio nome indica, colocados embutidos - a maioria dos layouts são baseados em blocos e ter esses blocos dispostos em um contexto de formatação embutido simplesmente não faz sentido. Você também precisa lidar com vários problemas associados à formatação em linha, como espaço em branco entre elementos, outros elementos em linha, dimensionamento, alinhamento e assim por diante, como muitos outros apontaram. É verdade que os layouts de flutuador também não fazem muito sentido, mas pelo menos os flutuadores têm o benefício de serem baseados em blocos.As outras respostas estão corretas. Mas quero acrescentar que é uma relíquia da época em que as pessoas aprendiam CSS pela primeira vez e abusavam
float
de todo o layout.float
destina-se a fazer coisas como imagens flutuantes ao lado de longas execuções de texto, mas muitas pessoas o usaram como mecanismo de layout principal. Como não foi realmente feito para isso, você precisa de hacks como "clearfix" para fazê-lo funcionar.Nos dias de hoje
display: inline-block
é uma alternativa sólida ( exceto IE6 e IE7 ), embora navegadores mais modernos venham com mecanismos de layout ainda mais úteis sob nomes como flexbox, layout de grade etc.fonte
inline-block
não é uma melhoria estrita em relação às flutuações devido ao problema de espaçamento entre blocos , onde o espaço em branco no HTML se traduz em caracteres de espaço que separam os blocos.inline-block
requer soluções próprias , assim comofloat
requer clearfix.O
clearfix
permite que um contêiner envolva seus filhos flutuantes. Sem umclearfix
estilo equivalente ou equivalente, um contêiner não envolve seus filhos flutuantes e cai, como se seus filhos flutuassem estivessem posicionados absolutamente.Existem várias versões do clearfix, com Nicolas Gallagher e Thierry Koblentz como autores principais.
Se você deseja suporte para navegadores mais antigos, é melhor usar este clearfix:
No SCSS, você pode usar a seguinte técnica:
Se você não se importa com o suporte a navegadores antigos, há uma versão mais curta:
fonte
div
wrap os elementos flutuantes? Você pode me ajudar a visualizá-lo?Para oferecer uma atualização sobre a situação no segundo trimestre de 2017.
Uma nova propriedade de exibição CSS3 está disponível no Firefox 53, Chrome 58 e Opera 45.
Verifique a disponibilidade de qualquer navegador aqui: http://caniuse.com/#feat=flow-root
O elemento (com uma propriedade display configurada como flow-root) gera uma caixa de contêiner de bloco e expõe seu conteúdo usando o layout de fluxo. Ele sempre estabelece um novo contexto de formatação de bloco para seu conteúdo.
Significando que se você usar uma div pai contendo um ou vários filhos flutuantes, essa propriedade garantirá que o pai encerre todos os filhos. Sem a necessidade de um hack do clearfix. Em nenhum filho, nem mesmo no último elemento fictício (se você estivesse usando a variante clearfix com: before nos últimos filhos).
fonte
flow-root
é a solução real.Simplificando, o clearfix é um hack .
É uma daquelas coisas feias com as quais todos temos que conviver, pois é realmente a única maneira razoável de garantir que os elementos filhos flutuantes não transbordem de seus pais. Existem outros esquemas de layout por aí, mas a flutuação é muito comum hoje em dia no design / desenvolvimento da web para ignorar o valor do hack do clearfix.
Pessoalmente, me inclino para a solução Micro Clearfix (Nicolas Gallagher)
referência
fonte
Uma técnica comumente usada em layouts baseados em float CSS está atribuindo um punhado de propriedades CSS a um elemento que você sabe que conterá elementos flutuantes. A técnica, geralmente implementada usando uma definição de classe chamada
clearfix
, (geralmente) implementa os seguintes comportamentos CSS:O objetivo desses comportamentos combinados é criar em um contêiner
:after
o elemento ativo que contém um único '.' marcado como oculto, que limpará todos os carros alegóricos existentes e redefinirá efetivamente a página para o próximo conteúdo.fonte
A outra opção (e talvez a mais simples) para obter um clearfix é usar
overflow:hidden;
o elemento que o contém. Por exemploObviamente, isso só pode ser usado em casos em que você nunca deseja que o conteúdo seja excedido.
fonte
Tentei a resposta aceita, mas ainda tinha um problema com o alinhamento do conteúdo. A adição de um seletor ": before", como mostrado abaixo, corrigiu o problema:
MENOS acima serão compilados para CSS abaixo:
fonte
Aqui está um método diferente, mesma coisa, mas um pouco diferente
a diferença é o ponto de conteúdo que é substituído por um
\00A0
==whitespace
Mais sobre isso http://www.jqui.net/tips-tricks/css-clearfix/
Aqui está uma versão compacta dele ...
fonte
.clearfix {...}
,html[xmlns] .clearfix {...}
,* html .clearfix {...}
, E.clearfix {...}
toda escolha a mesma coisa e substituir uns aos outros. Isso é um pouco hacky e não é realmente necessário.\00A0
, acho que foi por causa da compatibilidade entre navegadores e do conhecimento da época.