La propiedad background

Establecer imágenes de fondo en CSS


Es posible que, buscando hacer un diseño más avanzado, en lugar de utilizar un color de fondo quieras utilizar imágenes. Para ello, CSS te proporciona la propiedad background-image, con la cuál puedes indicar imágenes de fondo o, como veremos más adelante, incluso gradientes o degradados de varios colores.

La propiedad background-image

En el caso de querer utilizar imágenes de fondo, como ya hemos dicho, utilizaremos la propiedad background-image y en el valor, el nombre de la imagen (o la dirección URL donde está alojada), siempre rodeada del texto url().

PropiedadValorSignificadoMás info
background-imagenoneNo utiliza ninguna imagen de fondo.
background-imageurl("imagen.jpg")Usa la imagen indicada como fondo.
background-imageimage-set(...)Indica una imagen con fallbacks.Ver fallbacks CSS
background-imageUtiliza un gradiente de tipo lineal, radial o cónico.Ver gradientes

En el caso de que sólo se coloque el nombre de la imagen (por ejemplo, imagen.jpg), el navegador buscará la imagen en la misma carpeta donde está el archivo CSS que estamos escribiendo. Esto es lo que se llama una ruta relativa. En el caso de que se coloque la ruta completa, por ejemplo https://lenguajecss.com/assets/logo.svg, se accederá a la imagen alojada en esa dirección URL. Esto es lo que se llama ruta absoluta.

Ojo: En el caso de que no se encuentre la imagen o el valor de background-image se haya establecido a none, no se utilizará ninguna imagen de fondo, y en su lugar se mostrará el color establecido con background-color. Esto puede observarse también si tenemos una imagen de fondo que no se repite.

Opciones de imagen de fondo

Una vez establecida una imagen de fondo con background-image, se puede personalizar la forma en la que se mostrará dicha imagen mediante propiedades como background-repeat, background-attachment o background-position, entre otras:

PropiedadDescripción
background-repeatEstablece el modo en el que se repite la imagen de fondo de ser muy pequeña.
background-attachmentIndica si la imagen de fondo permanece fija o se desplaza al hacer scroll.
background-position Establece una posición para la imagen de fondo, de modo que podemos moverla de sitio.
background-clipModo de recorte de la imagen de fondo. (Ver modelo de cajas).
background-originModo de posicionamiento de la imagen de fondo. (Ver modelo de cajas).
background-size Establece un tamaño diferente a la imagen de fondo.

Analicemos cada una de las propiedades a continuación:

La propiedad background-repeat

La propiedad background-repeat especifica si la imagen se repetirá horizontalmente (repeat-x), si se repetirá verticalmente (repeat-y), si lo hará en ambas direcciones (repeat) o en ninguna (no-repeat). Por defecto, si no se indica nada, esta propiedad está ajustada en repeat.

ValorSignificado
repeatRepite la imagen de fondo horizontal y verticalmente.
repeat-xRepite la imagen de fondo sólo horizontalmente (eje x).
repeat-yRepite la imagen de fondo sólo verticalmente (eje y).
spaceRepite la imagen y rellena con espacio los huecos.
roundRepite la imagen y amplia cada repetición para ajustar.
no-repeatLa imagen de fondo no se repite.

Existen también dos valores interesantes, space y round, los cuales asumen implícitamente que se repite el fondo. En el caso de que tengamos una imagen de fondo que se repita varias veces en mosaico, space evita que se corte la imagen, introduciendo un espacio entre las repeticiones individuales.

Por su parte, round lo que hace es ajustar la imagen individual, de modo que la expande o contrae para ajustarla al espacio disponible. En ambos casos la repetición de los fondos nunca se mostrará cortada.

space y round en Background-repeat CSS

Siempre se podrá combinar en cada eje, con valores mixtos, por ejemplo, utilizando background-repeat: space round, lo que aplicará space al eje X y round al eje Y. Si sólo se especifica uno, se aplicará a ambos ejes.

La propiedad background-attachment

La propiedad background-attachment especificará si la imagen de fondo seguirá el desplazamiento del usuario al hacer scroll por la página, es decir, si el usuario al hacer scroll y bajar para ver el contenido de la página, la imagen de fondo de desplazará hacia arriba siguiendo el flujo normal de una página. Este comportamiento se consigue con la opción scroll, que es la que viene establecida por defecto.

ValorSignificado
scrollCuando hacemos scroll la imagen de fondo se desplaza.
fixedCuando hacemos scroll, la imagen de fondo permanece fija.

Por el contrario, si indicamos el valor fixed, la imagen de fondo se quedará fijada y no se moverá mientras el usuario se desplaza por la página, algo que puede ser útil en muchos escenarios.

La propiedad background-position

La propiedad background-position permite desplazar la imagen en la zona especificada por y por . Por defecto, esos valores son 0% 0%, y pueden especificarse tanto con unidades (porcentajes, píxels, etc...) como mediante palabras clave que representan zonas predefinidas (top, left, right, bottom y center).

ValorSignificado
1 parámetro. Desplaza la imagen de fondo al punto (x, 50%).
2 parámetros. Desplaza la imagen de fondo al punto (x, y).

Si sólo se especifica un valor, se tomará para el eje x, mientras que el valor del eje Y será automáticamente establecido a center (o 50%).

La propiedad background-clip / -origin

En CSS existen unas propiedades para indicar como afectará la imagen de fondo al elemento según su modelo de cajas. Es importantísimo que conozcas como funciona el modelo de cajas y concretamente la propiedad box-sizing para entender bien estas propiedades.

Dichas propiedades son las siguientes:

PropiedadValorSignificado
background-clipborder-box | padding-box | content-boxÁrea externa afectada por el fondo
background-originborder-box | padding-box | content-boxÁrea interna afectada por el fondo

Por un lado, la propiedad background-clip establece el área externa que afectará la imagen de fondo, mientras que background-origin establece el área interna que afectará la imagen de fondo. La primera utiliza border-box como valor por defecto, mientras que la segunda utiliza padding-box. Para entenderlo bien, juega a cambiar los valores en la siguiente demo:

.image {
  width: 472px;
  height: 472px;
  background: url("manzdev.png");
  border: 40px dashed #0004;
  padding: 20px;
  background-clip: var(--clip, border-box);
  background-origin: var(--origin, padding-box);
}

Ambas propiedades pueden tomar uno de los siguientes valores:

ValorSignificado
padding-boxLa imagen o color de fondo cubrirá la zona del espaciado y contenido.
border-boxLa imagen o color de fondo cubrirá la zona del borde, espaciado y contenido.
content-boxLa imagen o color de fondo cubrirá sólo la zona del contenido.

Consejo: Observa el borde grueso punteado que usamos en el ejemplo. Usando border-box la imagen de fondo se extenderá en todo el elemento, incluyendo borde, espaciado y contenido. El valor padding-box extenderá la imagen de fondo sólo mediante el padding y el contenido, y por último, la propiedad content-box extenderá la imagen de fondo sólo en la zona del contenido.

La propiedad background-size

Una propiedad muy interesante es background-size, la cuál nos permite dar un tamaño a la imagen de fondo. Podemos ajustar tanto el tamaño de ancho como el de alto, e incluso tenemos algunas palabras clave predefinidas para obtener un resultado específico. Veamos la sintaxis:

ValorSignificado
1 parámetro. Aplica un de (ancho × auto) a la imagen de fondo. Mantiene la proporción.
2 parámetros. Aplica un de (ancho × alto) a la imagen de fondo. Hay que vigilar la proporción.

Por defecto, una imagen de fondo toma automáticamente el tamaño de la imagen (que podría ser demasiado grande, por ejemplo). Para no tener que modificar la imagen original de forma manual con un editor de imágenes, podemos utilizar esta propiedad y ajustarla a nuestro agrado mediante CSS:

.element {
  width: 320px;
  height: 320px;
  background-image: url("https://manz.dev/manz-logo.png");

  /* La imagen es de 320x320 píxels, la cambiamos a 160x160 */
  background-size: 160px 160px;
}
<div class="element"></div>

Ten en cuenta que al indicar el tamaño de ancho y alto de forma manual, hay que vigilar el tamaño original de la fotografía para evitar que se deforme y aparezca estirada o deformada porque el nuevo tamaño no manteniene la proporción de aspecto.

Ten en cuenta que con background-size puedes utilizar los siguientes valores:

ValorSignificado
autoNo escala la imagen. Utiliza el tamaño original. Es el valor por defecto.
unidadIndicamos el tamaño específico que queremos usar (píxels o porcentaje, por ej.).
coverEscala el ancho de la imagen de fondo al ancho del elemento.
containEscala el alto de la imagen de fondo al alto del elemento.

Los dos últimos valores, cover y contain, sólo pueden indicarse en el caso de que se especifique un sólo parámetro como valor en la propiedad background-size.

Atajo: background

Es posible establecer todas estas propiedades anteriores en una sola regla de CSS a modo de atajo, y así ahorrar mucho espacio en escribir las propiedades anteriores por separado. Si alguno de los valores no necesitamos indicarlo, simplemente lo omitimos.

El atajo se construye con la propiedad background y sigue la siguiente estructura:

AtajoOrden
background /

Ten en cuenta que el parámetro / es opcional. De indicar el carácter /, la propiedad background se esperará el valor background-size a continuación. Veamos varios ejemplos del uso de la propiedad background (recuerda que si no necesitamos algún valor, simplemente podemos omitirlo):

.element {
  /* Atajo simple */
  background: #fff url("imagen.jpg") top center repeat-x;

  /* Atajo completo */
  background: deeppink url("imagen.jpg") 0 0 / 150px space scroll padding-box padding-box;

  /* Atajo múltiple */
  background:
      url("primer-plano.jpg") center center / cover,
      deeppink url("imagen.jpg") 0 0 / 150px space scroll padding-box padding-box;
}

El último caso del ejemplo utiliza fondos múltiples. Mediante la coma estamos describiendo dos fondos, si quieres aprender más sobre esto, visita el siguiente artículo: Fondos múltiples con CSS.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev