CSS

CSS

Tutorial CSS: Elementos 'float' y 'clear'

Aprende el uso de las propiedades CSS float y clear para gestionar elementos flotantes y evitar problemas comunes en el diseño web.

Aprende CSS y certifícate

Propósito original de float y comportamiento básico

La propiedad float es una de las herramientas más tradicionales de CSS para controlar el flujo de los elementos en una página web. Originalmente, esta propiedad fue diseñada con un propósito muy específico: permitir que el texto fluya alrededor de imágenes, similar a lo que vemos en revistas y periódicos impresos.

Origen y propósito inicial

El propósito original de float era simple: crear diseños donde el texto pudiera rodear elementos como imágenes. Antes de que existieran sistemas de layout modernos como Flexbox o Grid, float era una de las pocas formas de crear diseños de múltiples columnas y posicionar elementos de manera flexible dentro del flujo del documento.

La sintaxis básica de float es sencilla:

.elemento {
  float: valor;
}

Donde valor puede ser:

  • left - El elemento flota hacia el lado izquierdo de su contenedor
  • right - El elemento flota hacia el lado derecho de su contenedor
  • none - El elemento no flota (valor predeterminado)
  • inherit - El elemento hereda el valor float de su elemento padre

Comportamiento básico de float

Cuando aplicamos float a un elemento, este se desplaza hacia el lado especificado (izquierda o derecha) hasta que toca el borde de su contenedor o hasta que toca otro elemento flotante. El comportamiento básico de float se puede resumir en estos puntos clave:

  1. Posicionamiento lateral: El elemento se mueve hacia el lado especificado.
  2. Eliminación del flujo normal: El elemento se elimina parcialmente del flujo normal del documento.
  3. Contenido circundante: El contenido que sigue al elemento flotante fluye alrededor de él.
  4. Dimensiones: El elemento flotante mantiene su espacio en el diseño.

Veamos un ejemplo básico de cómo funciona float con una imagen:

img.left-image {
  float: left;
  margin-right: 15px;
}
<p>
  <img class="left-image" src="imagen.jpg" alt="Descripción">
  Este es un párrafo de texto que fluirá alrededor de la imagen que 
  tiene aplicada la propiedad float: left. El texto continuará fluyendo 
  alrededor de la imagen hasta que llegue al final de la misma.
</p>

En este ejemplo, la imagen se posicionará a la izquierda y el texto del párrafo fluirá alrededor de ella por el lado derecho.

Características importantes de los elementos flotantes

Los elementos con la propiedad float aplicada presentan varias características distintivas:

  • Cambio a bloque: Los elementos flotantes se convierten automáticamente en elementos de tipo bloque, independientemente de su naturaleza original.

  • Ajuste de tamaño: Si no se especifica un ancho explícito, los elementos flotantes se reducen hasta el tamaño de su contenido.

  • Apilamiento horizontal: Múltiples elementos flotantes se posicionan uno al lado del otro (si hay espacio suficiente).

.box {
  float: left;
  width: 200px;
  height: 100px;
  margin: 10px;
  background-color: #e0e0e0;
}
<div class="container">
  <div class="box">Caja 1</div>
  <div class="box">Caja 2</div>
  <div class="box">Caja 3</div>
</div>

En este ejemplo, las tres cajas se posicionarán horizontalmente una al lado de la otra (si el contenedor tiene suficiente ancho).

Limitaciones del modelo float

Es importante entender las limitaciones inherentes al usar float:

  • Los elementos flotantes no son completamente eliminados del flujo del documento, lo que puede causar problemas de diseño inesperados.
  • Los contenedores padres no reconocen la altura de los elementos flotantes, lo que puede llevar al problema del "colapso de contenedor".
  • El posicionamiento preciso es difícil de lograr solo con float.
.container {
  border: 2px solid #333;
}

.box {
  float: left;
  width: 100px;
  height: 100px;
  background-color: #3498db;
}
<div class="container">
  <div class="box"></div>
</div>

En este ejemplo, el contenedor .container colapsará a una altura de 0 (excluyendo los bordes) porque no reconoce la altura del elemento flotante dentro de él.

Casos de uso modernos

Aunque hoy en día existen alternativas más potentes como Flexbox y Grid, float sigue siendo útil en casos específicos:

  • Envolver texto alrededor de imágenes (su propósito original)
  • Crear diseños simples de varias columnas
  • Posicionar elementos pequeños como iconos junto al texto
  • Crear efectos de "pull-quote" en artículos
.pull-quote {
  float: right;
  width: 200px;
  padding: 15px;
  margin: 0 0 15px 15px;
  font-size: 1.5em;
  font-style: italic;
  background-color: #f9f9f9;
  border-left: 4px solid #333;
}

Este código crearía una cita destacada que se posicionaría a la derecha del texto principal, permitiendo que el contenido fluya alrededor de ella.

El comportamiento básico de float puede parecer simple, pero entender sus matices es fundamental para utilizarlo correctamente y evitar problemas comunes en el diseño de páginas web.

Efecto de float en elementos circundantes

Cuando aplicamos la propiedad float a un elemento, no solo afectamos a dicho elemento, sino que también generamos un impacto significativo en los elementos que lo rodean. Entender estos efectos es crucial para crear diseños predecibles y evitar comportamientos inesperados.

Comportamiento de elementos en línea

Los elementos en línea (como texto, enlaces, o elementos <span>) que siguen a un elemento flotante se reorganizan automáticamente para fluir alrededor del elemento flotado:

.floating-box {
  float: left;
  width: 150px;
  height: 150px;
  margin-right: 15px;
  background-color: #3498db;
}
<div class="floating-box"></div>
<p>Este texto fluirá naturalmente alrededor del cuadro azul flotante. Observa cómo el texto se ajusta al espacio disponible, creando un efecto de envoltura alrededor del elemento con float. Este comportamiento es exactamente lo que hace útil a float para diseños donde el contenido debe rodear elementos como imágenes.</p>

En este ejemplo, el párrafo (que normalmente ocuparía todo el ancho disponible) se ajusta para fluir alrededor del cuadro flotante, creando un efecto de "envoltura".

Comportamiento de elementos de bloque

Los elementos de bloque que siguen a un elemento flotante presentan un comportamiento más complejo:

  • El contenido del elemento de bloque fluye alrededor del elemento flotante
  • Pero el cuadro del elemento de bloque actúa como si el elemento flotante no existiera

Esto crea una situación donde el elemento de bloque mantiene su ancho completo, pero su contenido se desplaza para evitar superponerse con el elemento flotante:

.floating-box {
  float: left;
  width: 150px;
  height: 150px;
  background-color: #3498db;
}

.block-element {
  background-color: #f1c40f;
  padding: 10px;
  border: 2px dashed #e74c3c;
}
<div class="floating-box"></div>
<div class="block-element">
  Este es un elemento de bloque que sigue a un elemento flotante. 
  Observa cómo el contenido (este texto) fluye alrededor del elemento 
  flotante, pero el fondo y el borde del elemento de bloque ocupan 
  todo el ancho disponible, ignorando el elemento flotante.
</div>

Este comportamiento puede resultar confuso al principio, ya que el borde y el fondo del elemento de bloque parecerán "pasar por debajo" del elemento flotante, mientras que su contenido fluye alrededor.

El fenómeno de "line box"

Para entender mejor cómo los elementos circundantes interactúan con elementos flotantes, es útil conocer el concepto de line box (caja de línea):

  • Cuando un elemento flota, las cajas de línea adyacentes se acortan para hacer espacio
  • Las cajas de línea se ajustan hasta el borde del elemento flotante
  • Si no hay suficiente espacio horizontal, las cajas de línea se desplazan hacia abajo
.container {
  width: 500px;
  border: 1px solid #333;
}

.float-right {
  float: right;
  width: 200px;
  height: 150px;
  background-color: #9b59b6;
  margin-left: 15px;
}

.text-content span {
  background-color: #e74c3c;
  color: white;
}
<div class="container">
  <div class="float-right"></div>
  <div class="text-content">
    <span>Esta línea se acorta</span> para hacer espacio al elemento flotante.
    <br>
    <span>Esta línea también se acorta</span> adaptándose al espacio disponible.
    <br>
    <span>Las líneas continúan ajustándose</span> hasta que pasan el elemento flotante.
    <br>
    <span>Una vez pasado el elemento flotante</span>, las líneas vuelven a ocupar todo el ancho disponible.
  </div>
</div>

En este ejemplo, los elementos <span> con fondo rojo ilustran cómo las cajas de línea se acortan para adaptarse al elemento flotante.

Elementos flotantes consecutivos

Cuando varios elementos tienen aplicada la propiedad float en la misma dirección, se alinean horizontalmente uno junto al otro (si hay espacio suficiente):

.float-box {
  float: left;
  width: 100px;
  height: 100px;
  margin-right: 10px;
  background-color: #2ecc71;
  color: white;
  text-align: center;
  line-height: 100px;
}
<div class="container">
  <div class="float-box">Box 1</div>
  <div class="float-box">Box 2</div>
  <div class="float-box">Box 3</div>
  <p>Este texto comenzará después de los elementos flotantes si no hay espacio horizontal suficiente. De lo contrario, fluirá alrededor de ellos.</p>
</div>

Si no hay suficiente espacio para que todos los elementos flotantes se alineen en una sola fila, los elementos adicionales "caerán" a la siguiente línea disponible, creando un efecto similar a un flujo de elementos.

Interacción con márgenes y rellenos

Los márgenes de los elementos circundantes interactúan de manera particular con los elementos flotantes:

  • Los márgenes horizontales crean espacio entre el elemento flotante y el contenido circundante
  • Los márgenes verticales no colapsan entre elementos flotantes y elementos circundantes
.float-left {
  float: left;
  width: 150px;
  height: 150px;
  background-color: #1abc9c;
  margin: 20px;
}

.surrounding-text {
  margin: 15px;
}
<div class="container">
  <div class="float-left"></div>
  <p class="surrounding-text">
    Este párrafo tiene un margen de 15px. Observa cómo interactúa con el margen 
    del elemento flotante. Los márgenes no colapsan entre elementos flotantes y 
    elementos en el flujo normal, sino que se suman.
  </p>
</div>

En este ejemplo, el espacio entre el elemento flotante y el texto será la suma de ambos márgenes (20px + 15px = 35px), a diferencia del comportamiento normal de colapso de márgenes verticales.

Elementos con altura insuficiente

Un efecto particularmente interesante ocurre cuando un elemento flotante es más alto que el contenido circundante:

.tall-float {
  float: left;
  width: 100px;
  height: 300px;
  background-color: #34495e;
  margin-right: 15px;
}

.short-paragraph {
  background-color: #ecf0f1;
  padding: 10px;
}
<div class="container">
  <div class="tall-float"></div>
  <p class="short-paragraph">Este es un párrafo corto que no tiene suficiente contenido para igualar la altura del elemento flotante.</p>
  <p>Este segundo párrafo también fluirá alrededor del elemento flotante, comenzando inmediatamente después del primer párrafo.</p>
  <p>Los párrafos continuarán fluyendo alrededor del elemento flotante hasta que uno de ellos se extienda más allá de la altura del elemento flotante.</p>
</div>

En este caso, múltiples elementos consecutivos fluirán alrededor del elemento flotante hasta que uno de ellos se extienda más allá de la altura del elemento flotante o hasta que se utilice la propiedad clear (que veremos en la siguiente sección).

Efectos en elementos con posicionamiento

Los elementos con posicionamiento absoluto o fijo ignoran completamente los elementos flotantes:

.float-element {
  float: left;
  width: 150px;
  height: 150px;
  background-color: #f39c12;
}

.positioned-element {
  position: absolute;
  top: 50px;
  left: 50px;
  width: 200px;
  height: 100px;
  background-color: rgba(231, 76, 60, 0.7);
}
<div class="container" style="position: relative; height: 300px;">
  <div class="float-element"></div>
  <div class="positioned-element">Este elemento posicionado absolutamente ignora por completo el elemento flotante.</div>
</div>

En este ejemplo, el elemento con posicionamiento absoluto se superpondrá al elemento flotante sin tenerlo en cuenta, ya que los elementos posicionados operan en un "contexto de apilamiento" diferente.

Entender estos efectos en los elementos circundantes es fundamental para utilizar float de manera efectiva y predecir cómo se comportará el diseño en diferentes situaciones.

Propiedad clear para controlar flujo alrededor de floats

La propiedad clear es la herramienta complementaria perfecta para trabajar con elementos flotantes en CSS. Mientras que float permite que los elementos se desplacen a un lado y que el contenido fluya a su alrededor, clear nos permite controlar este comportamiento y determinar qué elementos deben ignorar los floats precedentes.

Sintaxis básica de clear

La sintaxis de la propiedad clear es sencilla:

.elemento {
  clear: valor;
}

Donde valor puede ser:

  • none - El elemento no se desplaza para evitar elementos flotantes (valor predeterminado)
  • left - El elemento se desplaza hacia abajo para evitar elementos flotantes a la izquierda
  • right - El elemento se desplaza hacia abajo para evitar elementos flotantes a la derecha
  • both - El elemento se desplaza hacia abajo para evitar elementos flotantes en ambos lados
  • inherit - El elemento hereda el valor clear de su elemento padre

Funcionamiento de clear

Cuando aplicamos clear a un elemento, estamos indicando que ese elemento debe posicionarse por debajo de cualquier elemento flotante que lo preceda en la dirección especificada:

.box {
  float: left;
  width: 100px;
  height: 100px;
  margin: 10px;
  background-color: #3498db;
}

.clear-box {
  clear: left;
  background-color: #e74c3c;
  padding: 10px;
}
<div class="container">
  <div class="box">Flotante 1</div>
  <div class="box">Flotante 2</div>
  <div class="clear-box">Este elemento se posicionará debajo de los elementos flotantes a la izquierda</div>
</div>

En este ejemplo, el elemento .clear-box se posicionará debajo de los elementos flotantes, en lugar de fluir alrededor de ellos.

Valor clear: both

El valor both es el más utilizado en la práctica, ya que garantiza que el elemento se posicione debajo de cualquier elemento flotante anterior, independientemente de si está flotando a la izquierda o a la derecha:

.left-float {
  float: left;
  width: 150px;
  height: 150px;
  background-color: #2ecc71;
  margin-right: 15px;
}

.right-float {
  float: right;
  width: 150px;
  height: 100px;
  background-color: #9b59b6;
  margin-left: 15px;
}

.clear-element {
  clear: both;
  background-color: #f1c40f;
  padding: 10px;
}
<div class="container">
  <div class="left-float"></div>
  <div class="right-float"></div>
  <p>Este texto fluirá entre los elementos flotantes.</p>
  <div class="clear-element">Este elemento aparecerá debajo de ambos elementos flotantes.</div>
</div>

Solución al colapso de contenedores

Uno de los usos más comunes de clear es resolver el problema del colapso de contenedores. Cuando un contenedor tiene solo elementos flotantes en su interior, su altura colapsa a cero porque los elementos flotantes están fuera del flujo normal:

.container {
  border: 2px solid #333;
  /* Sin solución, este contenedor colapsará */
}

.float-box {
  float: left;
  width: 100px;
  height: 100px;
  margin: 10px;
  background-color: #3498db;
}
<div class="container">
  <div class="float-box"></div>
  <div class="float-box"></div>
</div>

Existen varias técnicas para solucionar este problema utilizando clear:

1. Elemento de limpieza (clearfix)

La técnica más tradicional consiste en añadir un elemento vacío al final del contenedor con clear: both:

.clear {
  clear: both;
  display: block;
  height: 0;
  visibility: hidden;
}
<div class="container">
  <div class="float-box"></div>
  <div class="float-box"></div>
  <div class="clear"></div>
</div>

2. Técnica clearfix moderna con pseudo-elementos

La solución más moderna y elegante utiliza pseudo-elementos para crear un elemento de limpieza sin necesidad de añadir HTML adicional:

.clearfix::after {
  content: "";
  display: block;
  clear: both;
}
<div class="container clearfix">
  <div class="float-box"></div>
  <div class="float-box"></div>
</div>

Esta técnica es ampliamente utilizada en el desarrollo web moderno y es considerada una buena práctica para manejar elementos flotantes.

Uso de clear en diseños de columnas

La propiedad clear es especialmente útil cuando creamos diseños de múltiples columnas con float:

.column {
  float: left;
  width: 30%;
  margin: 0 1.5%;
  padding: 10px;
  background-color: #ecf0f1;
}

.footer {
  clear: both;
  background-color: #34495e;
  color: white;
  padding: 20px;
  text-align: center;
}
<div class="container clearfix">
  <div class="column">Columna 1</div>
  <div class="column">Columna 2</div>
  <div class="column">Columna 3</div>
  <div class="footer">Este pie de página aparecerá debajo de todas las columnas</div>
</div>

En este ejemplo, el pie de página se posicionará correctamente debajo de todas las columnas flotantes gracias a clear: both.

Casos de uso específicos

Imágenes con leyendas

Un caso de uso común es cuando queremos que una leyenda aparezca debajo de una imagen flotante, en lugar de al lado:

.image-container {
  float: left;
  margin: 0 15px 15px 0;
}

.image-container img {
  display: block;
  max-width: 100%;
}

.caption {
  clear: left;
  background-color: #f9f9f9;
  padding: 5px;
  font-size: 0.9em;
  text-align: center;
}
<div class="image-container">
  <img src="imagen.jpg" alt="Descripción">
  <div class="caption">Leyenda de la imagen</div>
</div>
<p>Este texto fluirá alrededor del conjunto de imagen y leyenda.</p>

Separación de secciones

La propiedad clear también es útil para separar secciones de contenido cuando se utilizan elementos flotantes:

.section {
  clear: both;
  padding: 20px 0;
  border-top: 1px solid #ddd;
}
<div class="container clearfix">
  <div class="float-element"></div>
  <p>Contenido que fluye alrededor del elemento flotante...</p>
  
  <div class="section">
    <h2>Nueva sección</h2>
    <p>Esta sección comienza debajo de cualquier elemento flotante anterior.</p>
  </div>
</div>

Consideraciones importantes

Al trabajar con clear, es importante tener en cuenta algunas consideraciones:

  • La propiedad clear solo afecta a la posición vertical del elemento, no a su posición horizontal.
  • Un elemento con clear se posicionará debajo del elemento flotante más alto en la dirección especificada.
  • La propiedad clear no "cancela" o "detiene" un float; simplemente controla cómo otros elementos interactúan con elementos flotantes.
.tall-float {
  float: left;
  width: 100px;
  height: 200px;
  background-color: #3498db;
}

.short-float {
  float: left;
  width: 100px;
  height: 100px;
  background-color: #2ecc71;
}

.clear-element {
  clear: left;
  background-color: #e74c3c;
  padding: 10px;
}
<div class="container clearfix">
  <div class="tall-float"></div>
  <div class="short-float"></div>
  <div class="clear-element">Este elemento se posicionará debajo del elemento flotante más alto (el azul)</div>
</div>

Alternativas modernas

Aunque float y clear siguen siendo útiles para casos específicos, las técnicas modernas de diseño como Flexbox y CSS Grid ofrecen alternativas más potentes y flexibles para crear layouts:

/* Ejemplo equivalente usando Flexbox */
.flex-container {
  display: flex;
  flex-wrap: wrap;
}

.flex-item {
  flex: 0 0 30%;
  margin: 0 1.5%;
  padding: 10px;
  background-color: #ecf0f1;
}

.footer {
  flex-basis: 100%;
  background-color: #34495e;
  color: white;
  padding: 20px;
  text-align: center;
}

Sin embargo, entender clear sigue siendo importante para:

  • Mantener código heredado
  • Trabajar con navegadores antiguos
  • Implementar casos específicos donde float sigue siendo la solución más simple
  • Comprender la evolución de las técnicas de diseño web

La propiedad clear es una herramienta fundamental que, junto con float, nos permite crear diseños web funcionales controlando cómo los elementos interactúan entre sí en el flujo del documento.

Aprende CSS online

Otros ejercicios de programación de CSS

Evalúa tus conocimientos de esta lección Elementos 'float' y 'clear' con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de CSS

Accede a todas las lecciones de CSS y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción A Css

CSS

Introducción Y Entorno

Entorno Para Desarrollar Css

CSS

Introducción Y Entorno

Sintaxis

CSS

Sintaxis De Selectores Y Propiedades

Selectores Básicos

CSS

Sintaxis De Selectores Y Propiedades

Herencia Y Cascada

CSS

Sintaxis De Selectores Y Propiedades

Pseudo-clases Y Pseudo-elementos

CSS

Sintaxis De Selectores Y Propiedades

Colores En Css

CSS

Sintaxis De Selectores Y Propiedades

Unidades De Medida

CSS

Sintaxis De Selectores Y Propiedades

Especificidad

CSS

Sintaxis De Selectores Y Propiedades

Estilos De Fuente

CSS

Estilización De Texto Y Fondo

Propiedades De Texto

CSS

Estilización De Texto Y Fondo

Sombras En Texto Y Cajas

CSS

Estilización De Texto Y Fondo

Propiedades De Fondo

CSS

Estilización De Texto Y Fondo

Fuentes Web

CSS

Estilización De Texto Y Fondo

Efectos De Texto: Gradientes, Recortes

CSS

Estilización De Texto Y Fondo

Tipografía Avanzada

CSS

Estilización De Texto Y Fondo

Modelo De Caja

CSS

Modelo Caja

Propiedades De Posicionamiento

CSS

Modelo Caja

Propiedad 'Display'

CSS

Modelo Caja

Elementos 'Float' Y 'Clear'

CSS

Modelo Caja

Rellenos Y Márgenes

CSS

Modelo Caja

Bordes Y Contornos

CSS

Modelo Caja

Absolute, Fixed, Sticky Y Z-index

CSS

Posicionamiento

Flexbox Para Crear Layouts Y Estructuras

CSS

Flexbox

Css Grid Para Crear Layouts Y Estructuras

CSS

Flexbox

Propiedades Del Contenedor Flex

CSS

Flexbox

Propiedades De Los Items Flex

CSS

Flexbox

Columnas Y Filas En Grid

CSS

Css Grid

Espaciado Y Alineación

CSS

Css Grid

Tipografía Responsive

CSS

Diseño Responsive

Fundamentos Del Diseño Responsive

CSS

Diseño Responsive

Imágenes Responsive

CSS

Diseño Responsive

Funciones Matemáticas

CSS

Variables Y Funciones Css

Transformaciones 2d

CSS

Transformación, Transición, Animación

Transformaciones 3d

CSS

Transformación, Transición, Animación

Animaciones

CSS

Transformación, Transición, Animación

Transiciones

CSS

Transformación, Transición, Animación

Css Para Formularios

CSS

Css Avanzado

Accesibilidad Web Con Css

CSS

Css Avanzado

Container Queries

CSS

Css Avanzado

Selectores Avanzados

CSS

Css Avanzado

Animaciones Y Transiciones

CSS

Técnicas Modernas Y Metodologías

Variables En Css

CSS

Técnicas Modernas Y Metodologías

Diseño Responsive Con Media Queries

CSS

Técnicas Modernas Y Metodologías

Metodologías De Escritura En Css

CSS

Técnicas Modernas Y Metodologías

Accede GRATIS a CSS y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender el propósito original y el comportamiento básico de la propiedad CSS 'float'.
  • Analizar cómo los elementos flotantes afectan a los elementos circundantes en el flujo del documento.
  • Aprender a utilizar la propiedad 'clear' para controlar el posicionamiento respecto a elementos flotantes.
  • Identificar y resolver problemas comunes asociados con elementos flotantes, como el colapso de contenedores.
  • Conocer casos de uso modernos y limitaciones de 'float' y 'clear' en comparación con técnicas actuales como Flexbox y Grid.