Propriedade clear: Limpando os floats
Saiba como evitar problemas de layout causados por elementos flutuantes.
Na lição anterior sobre float, você aprendeu que elementos flutuantes são retirados do fluxo normal do documento. Isso é ótimo para fazer texto envolver imagens ou criar layouts de coluna, mas também causa um problema comum: o colapso do contêiner pai e o posicionamento incorreto de elementos subsequentes.
A propriedade clear é a solução para esses problemas. Ela impede que um elemento seja posicionado ao lado de elementos flutuantes. Em outras palavras, ela "limpa" os floats, garantindo que o elemento com clear comece abaixo de qualquer elemento flutuante anterior.
Pense em clear como uma "barreira" ou "parede" que você coloca na sua página. Se há balões flutuando (float) para a esquerda ou direita, essa barreira garante que nada mais possa subir e ficar ao lado deles. Tudo que vem depois da barreira (clear) será forçado a começar abaixo de todos os balões flutuantes.
Como funciona clear
A propriedade clear aceita os seguintes valores:
none(padrão): O elemento não é impedido de flutuar ao lado de outros elementos flutuantes.left: O elemento é movido para baixo de qualquer elemento flutuante à sua esquerda.right: O elemento é movido para baixo de qualquer elemento flutuante à sua direita.both: O elemento é movido para baixo de qualquer elemento flutuante à sua esquerda ou direita. Este é o valor mais comum e seguro para limpar floats.inherit: O elemento herda o valorclearde seu pai.
Técnicas de Limpeza de Floats (Clearfix)
Existem algumas técnicas principais para "limpar" os floats e resolver os problemas de layout:
1. Usando um Elemento Vazio com clear: both; (Não Recomendado)
Você pode adicionar um
divvazio (ou outro elemento) logo após os elementos flutuantes e aplicarclear: both;a ele.Problema: Adiciona HTML semântico desnecessário (HTML "lixo").
<div style="float: left;">...</div> <div style="float: left;">...</div> <div style="clear: both;"></div> <!-- Elemento vazio -->
2. Aplicando overflow: hidden; (ou auto, scroll) ao Contêiner Pai
Aplicar
overflow: hidden;(ouauto,scroll) ao elemento pai dos floats cria um novo "contexto de formatação de bloco" (Block Formatting Context - BFC). Um BFC contém seus floats internos, impedindo que o pai colapse.Vantagem: Não adiciona HTML extra.
Desvantagem: Pode cortar conteúdo que transborda (se houver
overflow: hidden;) ou adicionar barras de rolagem indesejadas (se houveroverflow: auto;ouscroll)..container-pai { overflow: hidden; /* Ou auto, scroll */ }
3. A Técnica clearfix (Mais Comum e Recomendada)
Esta é a técnica mais robusta e amplamente utilizada. Ela usa pseudo-elementos (
::after) para adicionar um "elemento de limpeza" invisível ao final do contêiner pai, sem adicionar HTML extra.Como funciona:
content: "";: Adiciona um conteúdo vazio.display: table;: Faz com que o pseudo-elemento se comporte como uma célula de tabela, o que ajuda a criar um novo BFC.clear: both;: Garante que o pseudo-elemento comece abaixo de todos os floats.
.clearfix::after { content: ""; display: table; clear: both; }E no HTML:
<div class="container-pai clearfix"> <div style="float: left;">...</div> <div style="float: left;">...</div> </div>
Exemplo Prático:
<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<title>Propriedade Clear</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f4f4f4;
}
.box {
width: 100px;
height: 100px;
background-color: lightblue;
border: 1px solid blue;
margin: 10px;
text-align: center;
line-height: 100px;
font-weight: bold;
color: #333;
}
.float-left {
float: left;
}
.float-right {
float: right;
}
.container {
width: 80%;
margin: 20px auto;
background-color: #fff;
border: 2px solid #ccc;
padding: 15px;
margin-bottom: 40px;
}
.footer {
background-color: #333;
color: white;
padding: 10px;
text-align: center;
margin-top: 20px;
}
/* --- Técnicas de Limpeza --- */
/* 1. Elemento Vazio (Não recomendado, mas para demonstração) */
.clear-div {
clear: both;
height: 0; /* Para não ocupar espaço visual */
overflow: hidden; /* Para garantir que não haja altura */
}
/* 2. Overflow no Pai */
.container-overflow {
overflow: hidden; /* Ou auto, scroll */
}
/* 3. Clearfix (Mais comum) */
.clearfix::after {
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<h1>Propriedade `clear`</h1>
<h2>Problema: Contêiner Pai Colapsado</h2>
<p>O contêiner abaixo contém apenas elementos flutuantes. Observe como o rodapé se posiciona incorretamente, "subindo" para o espaço do contêiner.</p>
<div class="container">
<div class="box float-left">Float Left</div>
<div class="box float-left">Float Left</div>
<div class="box float-right">Float Right</div>
</div>
<div class="footer">Rodapé (Posicionado Incorretamente)</div>
<hr>
<h2>Solução 1: Elemento Vazio com `clear: both;`</h2>
<p>Adicionamos um `div` vazio com `clear: both;` dentro do contêiner.</p>
<div class="container">
<div class="box float-left">Float Left</div>
<div class="box float-left">Float Left</div>
<div class="box float-right">Float Right</div>
<div class="clear-div"></div> <!-- Elemento de limpeza -->
</div>
<div class="footer">Rodapé (Posicionado Corretamente)</div>
<hr>
<h2>Solução 2: `overflow: hidden;` no Contêiner Pai</h2>
<p>Aplicamos `overflow: hidden;` ao contêiner pai.</p>
<div class="container container-overflow">
<div class="box float-left">Float Left</div>
<div class="box float-left">Float Left</div>
<div class="box float-right">Float Right</div>
</div>
<div class="footer">Rodapé (Posicionado Corretamente)</div>
<hr>
<h2>Solução 3: Técnica `clearfix` no Contêiner Pai</h2>
<p>Aplicamos a classe `clearfix` ao contêiner pai.</p>
<div class="container clearfix">
<div class="box float-left">Float Left</div>
<div class="box float-left">Float Left</div>
<div class="box float-right">Float Right</div>
</div>
<div class="footer">Rodapé (Posicionado Corretamente)</div>
</body>
</html>
Resultado:
- No primeiro exemplo, sem limpeza, o
footersubirá e se sobreporá ao conteúdo flutuante, pois ocontainerpai terá altura zero. - Nos exemplos com as soluções de limpeza, o
footerse posicionará corretamente abaixo docontainer, pois a altura docontainerserá restaurada.
Boas Práticas:
- Sempre Limpe: Se você usa
float, sempre limpe os floats no contêiner pai ou no elemento que vem depois dos floats. - Prefira
clearfix: A técnicaclearfixé geralmente a mais recomendada por ser robusta e não ter os efeitos colaterais deoverflow: hidden;(como cortar conteúdo) ou de elementos HTML vazios. clear: both;é o mais seguro: Ao usarclearem um elemento,clear: both;é o valor mais comum, pois limpa tanto floats à esquerda quanto à direita.- Alternativas Modernas: Lembre-se que Flexbox e Grid são as soluções modernas e preferidas para layouts de coluna, pois eles gerenciam o fluxo dos itens automaticamente, eliminando a necessidade de
floateclearpara esse propósito.
Compreender e aplicar a propriedade clear é essencial para garantir que seus layouts baseados em float sejam estáveis e se comportem como esperado, evitando surpresas desagradáveis no posicionamento dos elementos.