Usar varias imágenes de fondo en CSS es una de esas cosas que parecen más complejas de lo que realmente son. A mí me pasó la primera vez: agregué tres imágenes seguidas y terminé con un fondo “apelmazado” donde todo se superponía sin ton ni son. Luego entendí que el truco está en cómo CSS interpreta cada capa… y desde entonces no dejo de usarlo.
En esta guía te enseño a dominar múltiples fondos en CSS3, cómo funcionan, cómo se mezclan entre sí y cómo evitar los clásicos errores que hacen que nada se vea como debería.
Los fondos también llamados background para respetar el nombre de la propiedad de CSS, son empleados en nuestras aplicaciones para embellecer una página web.
Qué son los fondos múltiples en CSS y cómo funcionan
Cuando aplicas varias imágenes de fondo a un elemento, CSS las apila como si fueran capas. La regla general es simple:
- La última imagen listada es la que queda hasta abajo
- La primera es la que queda arriba del todo
Esto es clave para evitar confusiones, especialmente cuando mezclas imágenes, gradientes y texturas.
El orden de apilamiento: qué imagen se pinta primero
CSS pinta de abajo hacia arriba, pero tú declaras de arriba hacia abajo.
Por ejemplo:
background-image: url(top.png), url(middle.png), url(bottom.png);- bottom.png → queda al fondo
- middle.png → en medio
- top.png → arriba del todo
La primera vez que usé esta técnica yo pensaba que la imagen de arriba de la lista quedaba abajo, así que todo me salía al revés. Luego me di cuenta del patrón y fue como “ah, por fin tiene sentido”.
Reglas básicas: listas separadas por comas
Todo en fondos múltiples funciona con listas separadas por comas:
- imágenes
- posiciones
- tamaños
- repeticiones
- orígenes
- clips
Cada valor afecta a la capa correspondiente en el orden de la lista.
Te mostraré como podemos asignar múltiples fondos o imágenes a un mismo elemento HTML; con tan sólo separar cada una de los valores que queremos colocar ('url(ruta-imagen)') por comas (,) de la siguiente forma hacemos el cometido; por ejemplo:
.ejemplo1{
background-image: url(twitter-logo.png), url(facebook-logo.png), url(google-plus-logo.png);
}Y este es el resultado:
Usar background-image para aplicar varias capas de fondo
La forma más directa es usar:
background-image: url(x), url(y), url(z);Sintaxis correcta y errores frecuentes
Errores típicos que me pasaban al inicio:
- Mezclar comas con espacios donde no van.
- Poner menos posiciones de las necesarias.
- Dejar que las imágenes se repitan sin querer.
Ejemplo correcto:
background-image: url(twitter.png), url(facebook.png), url(google.png);Con esto tenemos las tres imágenes como fondo se superponen, pero hemos logrado el objetivo el cual es mostrar múltiples fondos o background en un mismo elemento; ahora podemos aplicar ciertas reglas a cada uno de los background ya definidos para evitar que se superpongan
Es decir por separados; para lograrlo debemos de seguir los mismos pasos; que consisten en separar los valores de los atributos por comas (,):
.ejemplo2{
background-image: url(twitter-logo.png), url(facebook-logo.png), url(google-plus-logo.png);
background-position: 110px 162px, 58px 80px, 0px 0px;
background-repeat: no-repeat;
} Vemos que de nuevo tenemos un background-image con tres fondos y dos nuevas reglas.
La primera propiedad background-position indican la posición que tomarán nuestros fondos: "url(facebook-logo.png)" se posiciona en las coordenadas "30px 80px"; es decir el fondo luego de la coma i (donde 1<=i<=3) le corresponde posicionarse en la coordenada luego de la coma i; existe una relación uno a uno entre el background-image y el background-position.
Para la segunda nueva regla "background-repeat" con el valor "no-repeat" le estamos indicando que NO repita la imagen sobre el elemento ni vertical ni horizontalmente; además de esto podemos ver que dicha propiedad sólo aparece una vez y esta afecta a los tres fondos.
Resumen de las propiedades background
Para trabajar con los fondos en CSS tenemos muchas propiedades de la familia background.
En esta entrada vimos tres propiedades como puedes consultar en lo explicado anteriormente, por una parte tenemos la propiedad background-image que permite indicar los fondos de las imágenes que vamos a emplear.
También tenemos la propiedad background-position para indicar la posición de las imágenes especificadas en la regla anterior y de esta forma no se solapen entre sí como ocurre en el primer escenario y por último tenemos la propiedad background-repeat para indicar si queremos que se repita el fondo, o se repita el fondo en alguno de los ejes X y Y o que simplemente no se repitan como hicimos anteriormente.
De tal forma tenemos muchas formas con la que trabajar con los fondos en CSS cosa que no teníamos en CSS en su versión uno, que si queríamos trabajar con múltiples fondos teníamos que hacer algo como lo siguiente:
<div id="fondo1">
<div id="fondo2">
<div id="fondo3">
contenido con tres fondos de imagen
</div>
</div>
</div>Y como podrás suponer, cada uno de estos div anidados tendría un fondo distinto a la cual le variamos la posición con la propiedad mencionada anteriormente; no hace falta decir que definir fondos anidados de esta forma es impráctica y con CSS3 podemos hacer las cosas mucho más sencillas.
Controlar superposiciones con background-position
Cada coordenada corresponde a una capa:
background-position: 110px 162px, 58px 80px, 0 0;Cuando lo descubrí se me quitó el dolor de cabeza: “ah, claro, la posición i controla la imagen i”. Antes simplemente agregaba background-position una vez y no entendía por qué no cambiaba nada.
Cuándo usar listas y cuándo usar un solo valor
- Si quieres control independiente, usa listas (una posición por imagen).
- Si quieres que todas las imágenes compartan el mismo comportamiento (como no repetir), usa un valor único:
background-repeat: no-repeat;Yo uso un solo background-repeat casi siempre, porque rara vez quiero repeticiones “múltiples”.
Propiedad shorthand background: la forma avanzada
Usar el atajo background es más elegante y potente:
background:
url(logo.png) no-repeat right top,
radial-gradient(transparent, #000) no-repeat 0 0 / cover,
url(bg.jpg) no-repeat center / cover;Combinar imágenes, posiciones, repeat y tamaño
Aquí puedes poner:
- la imagen
- su posición
- si se repite
- su tamaño
- su origen
Todo en un solo bloque. Es como escribir una mini receta por capa.
Mezclar imágenes con gradientes (casos reales)
Esto lo uso mucho cuando necesito hacer efectos de:
- overlays
- degradados suaves
- texturas sutiles
- sombras flotantes
Por ejemplo, un gradiente transparente encima de una textura puede dar un acabado muchísimo más profesional sin cargar más imágenes.
Ajustar tamaño, origen y clipping de cada fondo
background-size por capas
Puedes hacer:
background-size: 200px 200px, contain, cover;Cada valor va para cada fondo.
background-origin / background-clip explicados fácil
- origin → desde dónde se calcula el fondo
- clip → hasta dónde llega la pintura del fondo
Esto te sirve cuando las capas se “cortan” o no se alinean como esperabas.
Fondos múltiples en CSS1: el método antiguo (divs anidados)
Antes de CSS3, la única forma de tener varios fondos era… anidar DIVs como muñecas rusas.
Yo lo hice varias veces y siempre terminaba con HTML redundante y difícil de mantener:
<div id="fondo1">
<div id="fondo2">
<div id="fondo3">
...
</div>
</div>
</div>Y cada DIV tenía su fondo correspondiente.
Por qué era poco práctico y qué problemas daba
- HTML más largo
- CSS más repetitivo
- Difícil de ajustar posiciones
- A la mínima había que reescribir todo
Cuando probé CSS3 por primera vez y vi que podía hacer lo mismo en una sola línea con background-image, me dio la risa. Mucho más limpio.
Cuándo todavía puede tener sentido
Solo en casos muy específicos donde quieres efectos 3D independientes o animaciones con transform, pero ya casi nadie lo usa para fondos.
Ejemplos prácticos (con buenas prácticas modernas)
Logotipos superpuestos
Perfecto para mostrar redes sociales, marca + textura, etc.
background:
url(logo.png) no-repeat 20px 20px,
url(texture.png) repeat;Cuando lo hago así me permite mantener el logo “limpio” mientras debajo dejo una textura agradable.
Efectos de textura + gradients
background:
linear-gradient(to right, rgba(0,0,0,.4), transparent),
url(texture.jpg) repeat;Esto da un look profesional sin cargar varias capas HTML.
Hero sections con varias capas
Muy usado en webs modernas:
background:
url(hero-foreground.png) no-repeat bottom center / contain,
radial-gradient(ellipse, rgba(0,0,0,.3), transparent),
url(hero-bg.jpg) no-repeat center / cover;Errores comunes y cómo solucionarlos
- Fondos que no aparecen
- rutas incorrectas
- capa tapada por otra
- orden invertido
- Capas mal ordenadas
- Recuerda la regla: la primera se pinta arriba.
- Imágenes que se repiten sin querer
background-repeat: no-repeat;
- Si quieres controlar capa por capa:
background-repeat: no-repeat, repeat-x, repeat-y;
Preguntas frecuentes
- ¿Cuál es el orden de apilamiento de background-image?
- La primera imagen declarada queda arriba; la última queda abajo.
- ¿Puedo mezclar imágenes y gradientes?
- Sí, sin problema. Cada uno es una capa más.
- ¿Qué pasa si pongo menos posiciones que imágenes?
- Las posiciones faltantes se repiten desde el último valor válido.
- ¿Se puede incluir background-color junto con múltiples fondos?
- Sí, pero solo uno —el último— puede incluir color de fondo.
- ¿Cómo evito que las imágenes se superpongan?
- Define background-position por capas.
Conclusión
Usar múltiples imágenes de fondo con CSS es mucho más intuitivo cuando entiendes cómo funcionan las listas y el orden de apilamiento. A mí me cambió la manera de maquetar fondos desde que vi que podía controlar posiciones, repeticiones y tamaños de forma independiente sin anidar un solo div.
Es una técnica moderna, limpia, poderosa y con enorme potencial creativo para construir interfaces más ricas y atractivas.
Acepto recibir anuncios de interes sobre este Blog.
Aprende a usar múltiples imágenes de fondo con CSS3: sintaxis, posiciones, tamaños, ejemplos prácticos y trucos para evitar superposiciones.