Menu

Imagen de fondo en CSS: tamaño, posición, repetición y cover

background-image pone una imagen o un degradado detrás del contenido de un elemento. Aprende url() y los degradados, background-size (cover y contain), background-position, background-repeat, varias capas de fondo y la abreviatura background.

Esta página incluye editores ejecutables: edita, ejecuta y ve el resultado al instante.

Cómo poner una imagen de fondo

background-image pinta una imagen detrás del contenido, el padding y el borde del elemento. Por defecto empieza en la esquina superior izquierda de la caja de padding, mantiene su tamaño natural y se repite para llenar la caja:

En un proyecto real, url() apunta a un archivo: url("images/hero.jpg"). La ruta es relativa a la hoja de estilo que la contiene (o a la página, en un elemento <style>). Los ejemplos de esta página usan pequeñas imágenes SVG escritas en línea como URLs data: para que funcionen en cualquier lugar.

Dos cosas que conviene saber desde el principio:

  • Un fondo no le da tamaño a un elemento. Un div vacío con una imagen de fondo mide 0px de alto. Dale contenido, padding, una height o un aspect-ratio.
  • Una imagen de fondo es decoración. Los lectores de pantalla la saltan y no tiene texto alternativo. Una imagen que transmite significado va en un elemento <img>.

background-size: cover, contain y longitudes

background-size escala la imagen. Las dos palabras clave mantienen sus proporciones:

La imagen es el doble de ancha que de alta y cada caja es cuadrada.

ValorResultado
auto (por defecto)El tamaño propio de la imagen
coverEscala hasta llenar la caja por completo; lo que sobra se recorta
containEscala hasta que la imagen entera cabe; quedan franjas grises en dos lados
200px200px de ancho, alto proporcional
50% autoLa mitad del ancho de la caja, alto proporcional
100% 100%Exactamente el tamaño de la caja; deforma la imagen si las proporciones son distintas

cover es la opción habitual para banners principales y tarjetas. contain es para logos e ilustraciones que nunca deben recortarse.

background-position y background-repeat

background-position coloca la imagen dentro de la caja con palabras clave (top, center, bottom, left, right), porcentajes o longitudes. background-repeat controla la repetición. Prueba algunos valores:

Prueba las posiciones top right, bottom 10px right 20px y 25% 75%, y los valores de repetición repeat-x, repeat-y, space (repeticiones con huecos para que ninguna quede cortada) y round (repeticiones redimensionadas para que quepa un número entero).

Capas: varios fondos y texto encima

background-image acepta una lista separada por comas. La primera capa se dibuja encima. El uso común es un degradado semitransparente sobre una foto, para que el texto blanco se siga leyendo:

aspect-ratio le da altura a la caja vacía, y background-size: cover se aplica a las dos capas. Para más recetas de degradados, consulta degradados en CSS.

La abreviatura background

background define todas las propiedades de fondo en una línea. El tamaño debe ir justo después de la posición, separado por una barra, y el color va en la última capa:

.hero {
  background: url("hero.jpg") center / cover no-repeat, #1f2937;
}
/* the same as */
.hero {
  background-image: url("hero.jpg");
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  background-color: #1f2937;
}

El color de respaldo se ve mientras carga la imagen, y si falla. Cualquier propiedad que dejes fuera de la abreviatura se restablece a su valor por defecto, así que pon primero la abreviatura y después las propiedades individuales.

Otras propiedades de fondo

PropiedadQué hace
background-attachment: fixedLa imagen se queda fija mientras se desplaza la página (se ignora en Safari de iOS)
background-originSi la posición empieza en el borde, en el padding o en el contenido
background-clipDónde se pinta el fondo, incluido text para rellenar las letras
background-blend-modeMezcla las capas entre sí, como multiply

Errores comunes

  • Una ruta incorrecta. url() en una hoja de estilo es relativa al archivo CSS, no a la página HTML.
  • Un elemento vacío. No tiene altura, así que la imagen no tiene dónde verse.
  • Olvidar no-repeat con contain o con una imagen pequeña: se repite.
  • Estirar con 100% 100% cuando querías cover.
  • Imágenes importantes como fondos. Usa <img> con texto alternativo para el contenido; los fondos son invisibles para los lectores de pantalla.
  • Omitir las comillas alrededor de una URL data: que contiene espacios o comillas. Escribe siempre url("...").

Preguntas frecuentes

¿Cómo pongo una imagen de fondo en CSS?

Usa background-image: url("photo.jpg"); en el elemento. La ruta es relativa al archivo CSS (o a la página, en un atributo style o un elemento <style>). Dale un tamaño al elemento, porque un fondo nunca hace crecer a un elemento vacío.

¿Cómo hago que una imagen de fondo cubra todo el elemento?

Usa background-size: cover; con background-position: center;. La imagen escala hasta llenar la caja por completo, manteniendo sus proporciones, y lo que sobra se recorta.

¿Qué diferencia hay entre cover y contain?

cover llena toda la caja y recorta lo que no cabe. contain muestra la imagen entera y deja espacio vacío en dos lados cuando las proporciones son distintas.

¿Cómo evito que una imagen de fondo se repita?

Agrega background-repeat: no-repeat;. Por defecto una imagen de fondo se repite en las dos direcciones para llenar el elemento.

¿Por qué no se ve mi imagen de fondo?

Las causas habituales son una ruta incorrecta en url() (es relativa al archivo CSS), un elemento sin altura porque no tiene contenido, o una abreviatura background posterior que restableció la imagen.

Coddy programming languages illustration

Aprende a programar con Coddy

COMENZAR