La propiedad float de CSS especifica cómo debe flotar un elemento. La propiedad clear de CSS especifica qué elementos pueden flotar junto al elemento borrado y de qué lado.

La propiedad float puede tener los siguientes valores:

  • left: El elemento flota a la izquierda de su contenedor.
  • right: El elemento flota a la derecha de su contenedor.
  • none: El elemento no flota (se mostrará justo donde aparece en el texto). este es el valor por defecto.
  • inherit: El elemento hereda el valor flotante de su padre.

En su uso más simple, la propiedad float se puede usar para envolver texto alrededor de imágenes.

Ejm

<!DOCTYPE html>
<html>
<head>
<style>
img {
float: right;
}
</style>
</head>
<body>

<h2>Float Right</h2>

<p>In this example, the image will float to the right in the paragraph, 
and the text in the paragraph will wrap around the image.</p>

<p><img src="pineapple.jpg" alt="Pineapple" style="width:170px;height:170px;margin-left:15px;">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, nulla et dictum 
interdum, nisi lorem egestas odio, vitae scelerisque enim ligula venenatis dolor. 
Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. 
Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, 
facilisis sed ornare eu, lobortis in odio. Praesent convallis urna a lacus 
interdum ut hendrerit risus congue. Nunc sagittis dictum nisi, 
sed ullamcorper ipsum dignissim ac. In at libero sed nunc venenatis
imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. 
Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta. 
Cras ac leo purus. Mauris quis diam velit.</p>

</body>
</html>

Ejm con no float

En el siguiente ejemplo, la imagen se mostrará justo donde aparece en el texto (float: none;):

<!DOCTYPE html>
<html>
<head>
<style>
img {
float: none;
}
</style>
</head>
<body>

<h2>Float None</h2>

<p>In this example, the image will be displayed just where 
it occurs in the text (float: none;).</p>

<p><img src="pineapple.jpg" alt="Pineapple" style="width:170px;height:170px;">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus imperdiet, 
nulla et dictum interdum, nisi lorem egestas odio, vitae scelerisque enim ligula 
venenatis dolor. Maecenas nisl est, ultrices nec congue eget, auctor vitae massa. 
Fusce luctus vestibulum augue ut aliquet. Mauris ante ligula, facilisis sed ornare eu, 
lobortis in odio. Praesent convallis urna a lacus interdum ut hendrerit risus congue. 
Nunc sagittis dictum nisi, sed ullamcorper ipsum dignissim ac. In at libero sed nunc 
venenatis imperdiet sed ornare turpis. Donec vitae dui eget tellus gravida venenatis. 
Integer fringilla congue eros non fermentum. Sed dapibus pulvinar nibh tempor porta. 
Cras ac leo purus. Mauris quis diam velit.</p>

</body>
</html>

Ejemplo: flotar uno al lado del otro

Normalmente, los elementos div se mostrarán uno encima del otro. Sin embargo, si usamos float: left podemos dejar que los elementos floten uno al lado del otro:

<!DOCTYPE html>
<html>
<head>
<style>
div {
float: left;
padding: 15px; 
}

.div1 {
background: red;
}

.div2 {
background: yellow;
}

.div3 {
background: green;
}
</style>
</head>
<body>

<h2>Float Next To Each Other</h2>

<p>In this example, the three divs will float next to each other.</p>

<div class="div1">Div 1</div>
<div class="div2">Div 2</div>
<div class="div3">Div 3</div>

</body>
</html>

La propiedad clear

Cuando usamos la propiedad float y queremos el siguiente elemento debajo (no a la derecha ni a la izquierda), tendremos que usar la propiedad clear. La propiedad clear especifica lo que debería suceder con el elemento que está al lado de un elemento flotante. Dicha propiedad tiene los siguientes valores:

  • none: El elemento no se empuja debajo de los elementos flotantes izquierdo o derecho. esto es por defecto.
  • left: El elemento se empuja debajo de los elementos flotantes izquierdos.
  • right: El elemento se empuja debajo de los elementos flotantes a la derecha.
  • both: El elemento se empuja debajo de los elementos flotantes izquierdo y derecho.
  • inherit: El elemento hereda el valor clear de su padre.

Al borrar flotantes, debe hacer coincidir el clear con el float: si un elemento flota hacia la izquierda, entonces debe borrar hacia la izquierda. Su elemento flotante seguirá flotando, pero el elemento borrado aparecerá debajo de él en la página web.

Ejm

<!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 - Observa que div2 está después de div1 en el código HTML.
Sin embargo, dado que div1 flota hacia la izquierda, 
el texto en div2 fluye alrededor de div1.</div>
<br><br>

<h2>With clear</h2>
<div class="div3">div3</div>
<div class="div4">div4 - Aquí, clear: left; mueve div4 hacia abajo debajo 
del div3 flotante. El valor "left" borra los elementos flotantes a la izquierda. 
También puedes borrar "right" y "both".</div>

</body>
</html>

Truco clearfix

Si un elemento flotante es más alto que el elemento contenedor, se «desbordará» fuera de su contenedor. Luego podemos agregar un truco clearfix para resolver este problema.

Ejm

<!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>

overflow: auto clearfix funciona bien siempre que puedas mantener el control de tus márgenes y relleno (de lo contrario, es posible que veas barras de desplazamiento). Sin embargo, el nuevo y moderno truco clearfix es más seguro de usar, y el siguiente código se usa para la mayoría de las páginas web.

Ejm

<!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>

He aquí unos ejemplos:

Sin embargo, esto no es muy flexible. Está bien si puede garantizar que las cajas siempre tendrán la misma cantidad de contenido. Pero muchas veces, el contenido no es el mismo. Si prueba el ejemplo anterior en un teléfono móvil, verá que el contenido del segundo cuadro se mostrará fuera del cuadro. Aquí es donde CSS3 Flexbox resulta útil, ya que puede estirar automáticamente las cajas para que sean tan largas como la caja más larga:

He aquí un ejemplo

También podemos utilizar float y clear para crear un menú, lo podemos ver en el siguiente ejemplo

Ejm

<!DOCTYPE html>
<html lang="es">
<head>
<style>
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}

li {
float: left;
}

li a {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}

li a:hover {
background-color: #111;
}

.active {
background-color: red;
}
</style>
</head>

<body>
<ul>
<li><a href="#"class="active">Home</a>
<li><a href="#">Noticias</a></li>
<li><a href="#">Contacto</a></li>
<li><a href="#">Sobre nosotros</a></li>
</ul>
</body>
</html>

Resumen

Propiedad Descripción
box-sizing Define cómo se calculan el ancho y la altura de un elemento: si deben incluir relleno y bordes, o no
clear Especifica lo que debería suceder con el elemento que está al lado de un elemento flotante
float Especifica si un elemento debe flotar a la izquierda, a la derecha o no flotar en absoluto
overflow Especifica qué sucede si el contenido desborda el cuadro de un elemento.
overflow-x Especifica qué hacer con los bordes izquierdo/derecho del contenido si se desborda el área de contenido del elemento.
overflow-y Especifica qué hacer con los bordes superior/inferior del contenido si se desborda el área de contenido del elemento.