clear
Quando usamos a propriedade float
e queremos o próximo elemento abaixo (não à direita ou à esquerda), teremos que usar o clear
propriedade.
A propriedade clear
especifica o que deve acontecer com o elemento que está próximo a um elemento flutuante.
A propriedade clear
pode ter um dos seguintes valores:
none
- O elemento não é empurrado abaixo dos elementos flutuantes à esquerda ou à direita. Este é o padrão
left
- O elemento é empurrado abaixo dos elementos flutuantes à esquerda
right
- O elemento é empurrado abaixo dos elementos flutuantes à direita
both
- O elemento é empurrado abaixo dos elementos flutuantes esquerdo e direito
inherit
- O elemento herda o valor clear de seu pai
Ao limpar floats, você deve combinar o clear com o float: Se um elemento flutua para a esquerda, então você deve limpar para a esquerda. Seu elemento flutuante continuará flutuando, mas o elemento desmarcado aparecerá abaixo dele na web página.
Este exemplo limpa o float para a esquerda. Aqui, significa que o
div1 {
float: left;
}
div2 {
clear: left;
}
Experimente você mesmo →
<!DOCTYPE html>
<html>
<head>
<style>
.div1 {
float: left;
padding: 10px;
border: 3px solid #73AD21;
}
.div2 {
padding: 10px;
border: 3px solid red;
}
.div3 {
float: left;
padding: 10px;
border: 3px solid #73AD21;
}
.div4 {
padding: 10px;
border: 3px solid red;
clear: left;
}
</style>
</head>
<body>
<h2>Without clear</h2>
<div class="div1">div1</div>
<div class="div2">div2 - Notice that div2 is after div1 in the HTML code. However, since div1 floats to the left, the text in div2 flows around div1.</div>
<br><br>
<h2>With clear</h2>
<div class="div3">div3</div>
<div class="div4">div4 - Here, clear: left; moves div4 down below the floating div3. The value "left" clears elements floated to the left. You can also clear "right" and "both".</div>
</body>
</html>
Se um elemento flutuante for mais alto que o elemento que o contém, ele irá "transbordar" para fora de seu contêiner. Podemos então adicionar um hack clearfix para Resolva esse problema:
.clearfix {
overflow: auto;
}
Experimente você mesmo →
<!DOCTYPE html>
<html>
<head>
<style>
div {
border: 3px solid #4CAF50;
padding: 5px;
}
.img1 {
float: right;
}
.img2 {
float: right;
}
.clearfix {
overflow: auto;
}
</style>
</head>
<body>
<h2>Without Clearfix</h2>
<p>This image is floated to the right. It is also taller than the element containing it, so it overflows outside of its container:</p>
<div>
<img class="img1" src="pineapple.jpg" alt="Pineapple" width="170" height="170">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet...
</div>
<h2 style="clear:right">With Clearfix</h2>
<p>We can fix this by adding a clearfix class with overflow: auto; to the containing element:</p>
<div class="clearfix">
<img class="img2" src="pineapple.jpg" alt="Pineapple" width="170" height="170">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet...
</div>
</body>
</html>
O overflow: auto
clearfix funciona bem desde que você consiga manter o controle de suas margens e preenchimento (caso contrário, você pode ver barras de rolagem). O novo e moderno hack do clearfix, no entanto, é mais seguro de usar, e o código a seguir é usado para a maioria das páginas da web:
.clearfix::after {
content: "";
clear: both;
display: table;
}
Experimente você mesmo →
<!DOCTYPE html>
<html>
<head>
<style>
div {
border: 3px solid #4CAF50;
padding: 5px;
}
.img1 {
float: right;
}
.img2 {
float: right;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
</style>
</head>
<body>
<h2>Without Clearfix</h2>
<p>This image is floated to the right. It is also taller than the element containing it, so it overflows outside of its container:</p>
<div>
<img class="img1" src="pineapple.jpg" alt="Pineapple" width="170" height="170">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet...
</div>
<h2 style="clear:right">With New Modern Clearfix</h2>
<p>Add the clearfix hack to the containing element, to fix this problem:</p>
<div class="clearfix">
<img class="img2" src="pineapple.jpg" alt="Pineapple" width="170" height="170">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet...
</div>
</body>
</html>
Você aprenderá mais sobre o pseudoelemento ::after
em um capítulo posterior.