Flotación y Limpieza en CSS
Aprende a utilizar las propiedades float y clear en CSS para crear diseños y manejar el flujo de elementos en tu página web.
Cristian Escalante
Última actualización: 9 de abril de 2025
Flotación y Limpieza en CSS
Las propiedades float
y clear
han sido durante mucho tiempo herramientas fundamentales para crear diseños en CSS. Aunque en la actualidad existen métodos más modernos como Flexbox y Grid, entender cómo funcionan float y clear sigue siendo importante, tanto para mantener código heredado como para ciertos casos de uso específicos.
La propiedad float
La propiedad float
permite que un elemento se posicione a la izquierda o derecha de su contenedor, permitiendo que el texto y los elementos en línea se ajusten a su alrededor.
Valores básicos de float
.izquierda {
float: left;
}
.derecha {
float: right;
}
.sin-flotacion {
float: none;
}
Ejemplo práctico: Imágenes con texto alrededor
Uno de los usos más comunes de float
es colocar imágenes con texto fluyendo a su alrededor:
<div class="contenido">
<img src="imagen.jpg" alt="Descripción" class="imagen-flotante">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam auctor,
nisl eget ultricies tincidunt, nisl nisl aliquam nisl, eget ultricies nisl
nisl sit amet nisl. Nullam auctor, nisl eget ultricies tincidunt, nisl nisl
aliquam nisl, eget ultricies nisl nisl sit amet nisl.</p>
</div>
.imagen-flotante {
float: left;
margin-right: 15px;
margin-bottom: 10px;
width: 200px;
}
Creando diseños de columnas con float
Antes de Flexbox y Grid, era común usar float
para crear diseños de columnas:
<div class="contenedor">
<div class="columna">Columna 1</div>
<div class="columna">Columna 2</div>
<div class="columna">Columna 3</div>
</div>
.contenedor {
width: 100%;
}
.columna {
float: left;
width: 33.33%;
padding: 10px;
box-sizing: border-box;
}
El problema del colapso de contenedor
Cuando todos los elementos dentro de un contenedor están flotando, el contenedor puede "colapsar", es decir, no expandirse para contener sus elementos flotantes. Esto ocurre porque los elementos flotantes se sacan del flujo normal del documento.
<div class="contenedor">
<div class="elemento-flotante">Elemento flotante</div>
</div>
.contenedor {
border: 2px solid black;
}
.elemento-flotante {
float: left;
width: 100px;
height: 100px;
background-color: lightblue;
}
En este ejemplo, el contenedor tendrá una altura de 0 (excepto por los bordes), a pesar de contener un elemento de 100px de altura.
La propiedad clear
La propiedad clear
especifica si un elemento puede estar junto a elementos flotantes que lo preceden o si debe ser movido debajo de ellos. Esta propiedad es esencial para manejar el comportamiento de los elementos flotantes.
Valores de clear
.clear-left {
clear: left; /* No permite elementos flotantes a la izquierda */
}
.clear-right {
clear: right; /* No permite elementos flotantes a la derecha */
}
.clear-both {
clear: both; /* No permite elementos flotantes a ningún lado */
}
.clear-none {
clear: none; /* Permite elementos flotantes a ambos lados (valor predeterminado) */
}
Ejemplo práctico: Uso de clear
<div class="contenedor">
<div class="izquierda">Elemento flotante izquierdo</div>
<div class="derecha">Elemento flotante derecho</div>
<div class="nuevo-parrafo">Este párrafo comienza en una nueva línea</div>
</div>
.izquierda {
float: left;
width: 45%;
background-color: lightblue;
}
.derecha {
float: right;
width: 45%;
background-color: lightgreen;
}
.nuevo-parrafo {
clear: both;
background-color: lightyellow;
}
Técnicas para solucionar el colapso de contenedor
1. El elemento clear
Una solución simple es añadir un elemento adicional con clear: both
al final del contenedor:
<div class="contenedor">
<div class="elemento-flotante">Elemento flotante</div>
<div class="clear"></div>
</div>
.clear {
clear: both;
}
2. La técnica clearfix
Una solución más elegante es usar el "clearfix hack", que utiliza pseudoelementos para solucionar el problema:
.clearfix::after {
content: "";
display: table;
clear: both;
}
<div class="contenedor clearfix">
<div class="elemento-flotante">Elemento flotante</div>
</div>
3. Overflow
Otra técnica es usar la propiedad overflow
:
.contenedor {
overflow: auto; /* o hidden */
}
Esta técnica funciona porque crea un nuevo contexto de formato de bloque, pero puede tener efectos secundarios no deseados, como barras de desplazamiento o recorte de contenido.
Limitaciones y consideraciones
Problemas con float
- Los elementos flotantes pueden causar problemas de diseño inesperados
- El manejo de alturas desiguales puede ser complicado
- No es ideal para diseños complejos o responsivos
- Puede requerir muchos "hacks" para funcionar correctamente
Cuándo usar float hoy en día
A pesar de sus limitaciones, float
sigue siendo útil para:
- Colocar imágenes con texto alrededor
- Crear diseños simples de columnas cuando no se necesita soporte para IE10 o anterior
- Mantener código heredado que ya utiliza floats
- Casos específicos donde float proporciona el comportamiento exacto que se necesita
Alternativas modernas a float
Para la mayoría de los casos de uso de diseño, existen alternativas modernas más potentes:
Flexbox
Ideal para diseños unidimensionales (filas o columnas):
.contenedor {
display: flex;
justify-content: space-between;
}
.columna {
width: 32%;
}
Grid
Perfecto para diseños bidimensionales (filas y columnas):
.contenedor {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
Ejemplo completo: Combinando float con técnicas modernas
A veces, la mejor solución es combinar técnicas:
<div class="articulo">
<img src="imagen.jpg" alt="Descripción" class="imagen-flotante">
<h2>Título del artículo</h2>
<p>Contenido del artículo...</p>
</div>
<div class="galeria">
<div class="imagen">Imagen 1</div>
<div class="imagen">Imagen 2</div>
<div class="imagen">Imagen 3</div>
</div>
/* Uso de float para la imagen en el artículo */
.imagen-flotante {
float: left;
margin-right: 15px;
width: 200px;
}
.articulo {
overflow: auto; /* Contiene el elemento flotante */
margin-bottom: 20px;
}
/* Uso de flexbox para la galería de imágenes */
.galeria {
display: flex;
justify-content: space-between;
}
.imagen {
width: 32%;
height: 150px;
background-color: #f0f0f0;
}