Saltar al contenido principal
Leyendo: Background-image
Apuntes de clase

Clase 11 · Background-image

Con background-image ponemos imágenes de fondo y las controlamos con background-position, background-repeat y background-size. Vemos también cómo combinar color e imagen, usar varias imágenes, animarlas con :hover, crear degradados, fusionar imágenes con background-blend-mode, fijar el fondo con background-attachment, un caso práctico paso a paso y un caso práctico más (centrar con flex y padding).

PDF · Parte 1 PDF · Parte 2 PDF · Casos prácticos

01 · Propiedades básicas

Background-image

Nos permite poner una imagen de fondo indicando la ruta donde está guardada la imagen.

CSS
.fondo{
    background-image: url("img/mi-imagen.jpg");
}
Resultado

La ruta de url() es relativa al archivo CSS (o al HTML si el CSS está dentro de él). En la demo se usa la imagen de la luna de esta clase.

01 · Propiedades básicas

Background-position

Define la posición de la imagen de fondo. Posiciones definidas:

  • center
  • left
  • right
  • top
  • bottom
CSS
.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: center;
}
Resultado (imagen a 120px para ver el efecto)
left
center
right
01 · Propiedades básicas

Background-position en X y en Y

Podemos posicionar una imagen tanto en horizontal (X) como en vertical (Y). Si utilizamos 2 valores en la misma línea, el primero pertenece a X y el segundo a Y.

Podemos usar:

  • Valores definidos (top, bottom, center, left, right)
  • Píxeles (px)
  • Porcentaje (%)
CSS
.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: top center;
}

.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: top 25%;
}

.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: 20px 50%;
}
01 · Propiedades básicas

Background-repeat

Define si el fondo se repite y cómo se repite. Podemos definir:

  • Que no se repita (no-repeat)
  • Que se repita (repeat)
  • Que se repita horizontalmente, en X (repeat-x)
  • Que se repita verticalmente, en Y (repeat-y)

Probar online · w3schools

CSS
.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: top center;
    background-repeat: no-repeat;
}

.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: top 25%;
    background-repeat: repeat;
}

.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: 20px 50%;
    background-repeat: repeat-x;
}

.fondo{
    background-image: url("img/mi-imagen.jpg");
    background-position: 20px 50%;
    background-repeat: repeat-y;
}
Resultado (imagen a 60px)
repeat
repeat-x
repeat-y
01 · Propiedades básicas

Background-size

Define el tamaño de la imagen de fondo. Propiedades:

  • Tamaño: px o % (eje X + eje Y).
  • Cover: ocupa todo el espacio del contenedor.
  • Contain: coloca la imagen entera dentro del contenedor independientemente de su tamaño.
CSS
.fondo{
    width:800px;
    height:400px;
    background-image: url("moon.jpg");
    background-repeat: no-repeat;
    background-position: center top;
    background-size: contain;
}


    background-size: cover;

    background-size: 200px 80px;

    background-size: 50% 450px;
Resultado (cajas de 240×120px)
contain
cover
200px 80px
50% 450px
02 · Color y varias imágenes

Background: color + image

La propiedad background-color y background-image pueden funcionar a la vez. La imagen se coloca en una «capa» superior al color de fondo.

CSS
background-color: red;
background-image: url("moon.jpg");
background-repeat: no-repeat;
background-size: 250px;
background-position: center center;
Resultado
02 · Color y varias imágenes

Background: más de una imagen de fondo

Podemos separar por comas cada imagen que queramos añadir. Las propiedades repeat, size y position también las podemos separar por comas siguiendo el mismo orden que las imágenes.

CSS
background:url("mobile-01.png"), url("moon.jpg"), url("conexion-alpha.jpg");
background-color: red;
background-repeat: no-repeat;
background-size: 200px 200px, 200px 200px, cover;
background-position: top left, top center, center center;
transition:0.6s;
Resultado (la demo usa la luna y dos degradados en lugar de las imágenes del aula)
02 · Color y varias imágenes

Orden de las imágenes

Las imágenes se van colocando como si fuera por «capas». La primera imagen del código es la capa frente, la segunda la capa medio y la última es la de más al fondo.

CSS
background:url("mobile-01.png"), url("moon.jpg"), url("conexion-alpha.jpg");
background-color: red;
background-repeat: no-repeat;
background-size: 200px 200px, 200px 200px, cover;
background-position: top left, top center, center center;
transition:0.6s;
Esquema de capas
Esquema de tres capas de imagen: la capa fondo es una imagen de red azul, la capa medio es una foto de la luna y la capa frente es un móvil.
03 · Hover y degradado

Background-image + hover

Podemos cambiar las propiedades de tamaño y posición cuando nos ponemos encima del fondo con .fondo:hover.

  • Ejem1 · hacer zoom en una imagen de fondo.
  • Ejem2 · mover de izquierda a derecha una imagen de fondo.
Ejem1
.fondo{
    background-repeat: no-repeat;
    background-size: 100%;
    background-position: center center;
    transition:0.6s;
}

.fondo:hover{
    background-size: 120%;
    transition:0.6s;
}
Ejem2
.fondo{
    background-repeat: no-repeat;
    background-size: 100%;
    background-position: left center;
    transition:0.6s;
}

.fondo:hover{
    background-position: right center;
    transition:0.6s;
}
Resultado

Pasa el cursor sobre cada caja.

Ejem1 · zoom
Ejem2 · movimiento

En la demo de Ejem2 la imagen se reduce (background-size: 60%) para que quede espacio y se vea el desplazamiento; con 100% de ancho la imagen ocupa toda la caja en horizontal y solo podría moverse en vertical.

03 · Hover y degradado

Background-image degradado

Generaremos nuestros gradientes desde la siguiente web: cssgradient.io.

cssgradient.io
Generador de degradados de cssgradient.io con la barra de colores, el selector de color y el tipo de degradado lineal.
CSS
.fondo{
    background: rgb(238,174,202);
    background: linear-gradient(0deg, rgba(238,174,202,1) 0%, rgba(184,134,48,1) 13%,
    rgba(209,233,148,0.8204014027485994) 100%);
}
Resultado
04 · Background-blend-mode

Background-blend-mode

Esta opción sirve para cuando tenemos 2 imágenes de fondo: es el modo de fusión entre ellas, como el que podemos tener en Photoshop. Opciones:

  • multiply
  • screen
  • overlay
  • darken
  • lighten
  • color-dodge
  • saturation
  • color
  • luminosity
CSS
.fondo{
    background-image: url("img/mobile-01.png"), url("img/conexion-alpha.jpg");
    background-blend-mode: multiply;
}
Resultado (un móvil sobre un fondo azul, con tres modos de fusión)
screen
soft-light
multiply
05 · Background-attachment

Background-attachment

Esta opción sirve para definir cómo queremos que se posicione la imagen de fondo. Lo vamos a apreciar cuando la página tenga scroll, con movimiento vertical. Opciones:

  • Scroll (comportamiento por defecto): la imagen de fondo se mueve cuando hacemos scroll.
  • Fixed: la imagen de fondo se queda anclada al fondo. Para ello la imagen debe ser más grande, tener más altura que el contenedor; cuando hacemos scroll nos va mostrando diferentes partes de la imagen, actúa como una máscara.
CSS
background-image: url("img/road.jpg");
background-size: cover;
background-attachment: fixed;
05 · Background-attachment

Explicación: background-attachment: fixed

Definimos las dimensiones de nuestro <div> contenedor:

CSS
width:100%;
height:450px;

Con background-size: cover; hacemos que la imagen ocupe todo nuestro contenedor; recorta la imagen porque nuestro fondo tiene más altura.

Con background-attachment: fixed; hacemos que la imagen no se mueva junto al contenedor y, al hacer scroll, vamos viendo la imagen que se ha quedado fija, creando un efecto de máscara de capa.

CSS
background-image: url("img/road.jpg");
background-size: cover;
background-attachment: fixed;
Resultado (contenedor de 450px de alto)

Haz scroll con la página: la imagen se queda fija y el contenedor va mostrando distintas partes.

06 · Tabla resumen

Tabla resumen

NivelPropiedadQué hace
Básicobackground-imageDefine la imagen (o degradado) de fondo.
Básicobackground-positionPosiciona la imagen dentro del contenedor.
Básicobackground-repeatControla si la imagen se repite y cómo.
Básicobackground-sizeAjusta el tamaño de la imagen (cover, contain, medidas).
Avanzadobackground-attachmentDefine si el fondo se mueve con el scroll (scroll) o queda fijo (fixed).
Avanzadobackground-blend-modeFusiona entre sí las imágenes de fondo y el color de fondo.
CSS
/* Básico */
background-image: url("img/mobile-01.png"), url("img/conexion-alpha.jpg");
background-position: center center;
background-repeat: no-repeat;
background-size: cover;

/* Avanzado */
background-attachment: fixed;
background-blend-mode: multiply;
07 · Caso práctico 1

Paso 1: estructura HTML

Creamos 3 contenedores a los que aplicaremos diferentes fondos, con las clases content, content2 y content3. Dentro de cada contenedor creamos otro contenedor hijo con la clase info, y dentro de este colocamos un <h1> y un <p>.

HTML
<body>
    <div class="content">
        <div class="info">
            <h2>Sección 01</h2>
            <p>
                Lorem ipsum dolor sit amet, consectetur
                arcu aliquet euismod. Praesent pulvinar
                eget odio molestie sollicitudin ut eget
            </p>
        </div>
    </div>

    <div class="content2">
        <div class="info">
            <h2>Sección 02</h2>
            <p>
                Lorem ipsum dolor sit amet, consectetur
                arcu aliquet euismod. Praesent pulvinar
                eget odio molestie sollicitudin ut eget
            </p>
        </div>
    </div>

    <div class="content3">
        <div class="info">
            <h2>Sección 01</h2>
            <p>
                Lorem ipsum dolor sit amet, consectetur
                arcu aliquet euismod. Praesent pulvinar
                eget odio molestie sollicitudin ut eget
            </p>
        </div>
    </div>
</body>
07 · Caso práctico 1

Paso 2: tamaño y borde

Definimos el tamaño de cada contenedor y aplicamos un borde de 1px para ver nuestros contenedores:

CSS
.content{
    /*tamaño contenedor*/
    width:100%;
    height:800px;
    border:1px solid black;
}

.content2{
    /*tamaño contenedor*/
    width:100%;
    height:450px;
    border:1px solid black;
}

.content3{
    /*tamaño contenedor*/
    width:100%;
    height:850px;
    border:1px solid black;
}
07 · Caso práctico 1

Paso 3 (.content): dos imágenes de fondo

  • 1. Colocamos 2 imágenes de fondo. Recordamos que la última imagen se coloca en la «capa 2» de fondo (capa1 = móvil, capa2 = fondo).
  • 2. Definimos el tamaño del móvil a 800px; no hace falta poner la altura a esta imagen porque adapta su proporción. Definimos el tamaño de la capa2 como cover para que ocupe todo el contenedor.
  • 3. Definimos que no se repita el fondo; este valor afecta a ambas imágenes.
CSS
background-image: url("img/mobile-01.png"), url("img/conexion-alpha.jpg");
background-size: 800px, cover;
background-repeat: no-repeat;
07 · Caso práctico 1

Paso 4 (.content): posición

  • 1. Posicionamos el móvil a la derecha y a 300px de altura en el eje Y; este último paso hace que sobrepase el límite del contenedor, recortando así la imagen.
  • 2. El fondo de la capa 2 lo centramos.
CSS
/*tamaño contenedor*/
width:100%;
height:800px;
border:1px solid black;

background-image: url("img/mobile-01.png"),url("img/conexion-alpha.jpg");
background-size: 800px, cover;
background-repeat: no-repeat;
background-position: right 300px, center;
07 · Caso práctico 1

Paso 5 (.content): modo de fusión

Añadimos el parámetro background-blend-mode para crear un efecto de fusión entre ambas imágenes.

CSS
/*tamaño contenedor*/
width:100%;
height:800px;
border:1px solid black;

background-image: url("img/mobile-01.png"),url("img/conexion-alpha.jpg");
background-size: 800px, cover;
background-repeat: no-repeat;
background-position: right 300px, center;

background-blend-mode:multiply;
07 · Caso práctico 1

Paso 6 y 7: contenedor hijo y alineación

Paso 6 (.info): definimos el tamaño de nuestro contenedor hijo info y le asignamos un padding (espaciado interior) y un fondo blanco semitransparente. Paso 7 (.content): volvemos a la clase content y alineamos todo el contenido («contenedor hijo») al centro en ambos ejes mediante flex.

Paso 6
.info{
    width:65%;
    padding:32px;
    background-color: rgba(255, 255, 255, 0.5);
}
Paso 7
.content{
    /*tamaño contenedor*/
    width:100%;
    height:800px;
    border:1px solid black;

    /*fondo*/
    background-image: url("img/mobile-01.png"),url("img/conexion-alpha.jpg");
    background-size: 800px, cover;
    background-repeat: no-repeat;
    background-position: right 300px, center;

    /*modo fusión fondo*/
    background-blend-mode:multiply;

    /*alineación contenido FLEX*/
    display: flex;
    justify-content: center;
    align-items: center;
}
07 · Caso práctico 1

Paso 8 (.content2): imagen fija

La clase info nos servirá para nuestras 3 secciones; copiaremos y pegaremos en las otras secciones el paso 7 de alineación mediante flex.

  • Añadimos una imagen de fondo.
  • Ponemos el tamaño en cover para que ocupe todo el contenedor; nuestra imagen tiene más altura que nuestro contenedor.
  • Asignamos background-attachment: fixed; para que nuestra imagen de fondo se quede fija. Probamos el resultado haciendo scroll.
CSS
.content2{
    /*tamaño contenedor*/
    width:100%;
    height:450px;
    border:1px solid black;

    background-image: url("img/road.jpg");
    background-size: cover;
    background-attachment: fixed;

    display: flex;
    justify-content: center;
    align-items: center;
}
07 · Caso práctico 1

Paso 9 (.content3): patrón con repeat

  • 1. Añadimos un color de fondo gris.
  • 2. Añadimos una imagen de fondo para crear un patrón.
  • 3. Repetimos el fondo.
  • 4. Ajustamos el tamaño de la imagen que se repetirá.
CSS
.content3{
    /*tamaño contenedor*/
    width:100%;
    height:850px;
    border:1px solid black;

    background-color: gainsboro;
    background-image: url("img/bg-dot.png");
    background-repeat: repeat;
    background-size: 12px;

    display: flex;
    justify-content: center;
    align-items: center;
}
07 · Caso práctico 1

Resultado del caso práctico

Sección 1: fondo con 2 imágenes, posicionado a medida y con modo de fusión entre ambas. Sección 2: fondo con imagen fija, crea un efecto de movimiento tipo parallax. Sección 3: fondo con un patrón mediante repeat.

Resultado (alturas reducidas para la demo; haz scroll para ver la imagen fija)

Sección 01

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer blandit scelerisque urna, ut consequat arcu aliquet euismod. Praesent pulvinar lobortis urna, eget odio molestie sollicitudin ut eget.

Sección 02

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer blandit scelerisque urna, ut consequat arcu aliquet euismod. Praesent pulvinar lobortis urna, eget odio molestie sollicitudin ut eget.

Sección 01

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer blandit scelerisque urna, ut consequat arcu aliquet euismod. Praesent pulvinar lobortis urna, eget odio molestie sollicitudin ut eget.

Resultado del caso práctico
Resultado final con tres secciones: fondo azul con un móvil y texto centrado, fondo de nubes y carretera con texto, y fondo gris con un patrón de puntos.
08 · Caso práctico 2

Caso práctico 2 · Paso 1: estructura HTML

Centrar contenido con Flex y Padding. Creamos 2 contenedores a los que aplicaremos diferentes fondos, con las clases content1 y content2. Dentro de cada contenedor creamos otro contenedor hijo con la clase info1 (o info2) y dentro de este un <h2> con la clase title1, un <p> con la clase text1 y un enlace con la clase button1. Replicamos las clases en el segundo contenedor.

HTML
<div class="content1">
    <div class="info1">
        <h2 class="title1">Título ección</h2>
        <p class="text1">
            Lorem ipsum dolor sit amet, consectetur
            ultrices urna, ac fringilla neque fermentum sed.
            Sed ultrices fringilla ipsum a dapibus. Donec
            Nullam iaculis arcu neque, vitae gravida libero
            nec pellentesque erat. Quisque hendrerit massa
            Morbi elementum varius porta.
        </p>
        <a href="" class="button1">Botón</a>
    </div>
</div>

<div class="content2">
    <div class="info2">
        <h2 class="title2">Título ección</h2>
        <p class="text2">
            Lorem ipsum dolor sit amet, consectetur
            ultrices urna, ac fringilla neque fermentum sed.
            Sed ultrices fringilla ipsum a dapibus. Donec
            Nullam iaculis arcu neque, vitae gravida libero
            nec pellentesque erat. Quisque hendrerit massa
            Morbi elementum varius porta.
        </p>
        <a href="" class="button2">Botón</a>
    </div>
</div>
08 · Caso práctico 2

Paso 2: fondo, info y botón

  • .content1: añadimos una imagen de fondo y una altura de 800px.
  • .info1: anchura del 60%. Añadimos padding y un color de fondo blanco con transparencia.
  • .title1 y .text1: asignamos color a ambas clases y un tamaño grande al título.
  • .button1: creamos un botón con las siguientes características.

Cuando hacemos hover queremos que el color de fondo del botón sea transparente; vemos una nueva propiedad del color: background-color: transparent;

CSS
/*contenido 1*/
.content1{
    background-image: url("img/blue-futre-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

    height:800px;
}

.info1{
    background-color: rgba(255, 255, 255, 0.443);
    width:60%;
    padding:80px;
}

.title1{
    font-size: 32px;
    color:white;
}

.text1{
    color:rgb(8, 8, 228);
}

.button1{
    background-color: white;
    color: rgb(8, 8, 228);
    padding:8px 16px;
    border: 2px white solid;
    transition: 0.6s;
    text-decoration: none;
}

.button1:hover{
    background-color: transparent;
    color: white;
    transition: 0.6s;
}
08 · Caso práctico 2

Paso 3: centrado con flex

Centramos el contenido que hay dentro de content1 aplicando flex. Ahora el div info1 que está dentro de content1 estará centrado en el eje principal (row) y en el eje secundario (column).

CSS
/*contenido 1*/
.content1{
    background-image: url("img/blue-futre-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

    height:800px;

    display: flex;
    justify-content: center;
    align-items: center;

}
Resultado (la demo usa un degradado en lugar de la imagen del aula y alturas reducidas)

Título ección

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pharetra ultrices urna, ac fringilla neque fermentum sed.

Botón
08 · Caso práctico 2

Paso 4: contenido 2 (sin medidas)

  • .content2: añadimos una imagen de fondo; no añadimos ninguna medida a nuestro contenedor padre.
  • .info2: añadimos padding y un color de fondo blanco con transparencia; no añadimos ninguna medida a nuestro contenedor hijo.
  • Duplicamos las clases title, text y button y les asignamos un 2 al final de la clase.
CSS
/*contenido 2*/
.content2{
    background-image: url("img/purple-future-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

}

.info2{
    background-color: rgba(255, 255, 255, 0.443);
    padding:80px;
}

.title2{
    font-size: 32px;
    color:white;
}

.text2{
    color:rgb(8, 8, 228);
}

.button2{
    background-color: white;
    color: rgb(8, 8, 228);
    padding:8px 16px;
    border: 2px white solid;
    transition: 0.6s;
    text-decoration: none;
}

.button2:hover{
    background-color: transparent;
    color: white;
    transition: 0.6s;
}
08 · Caso práctico 2

Paso 4: centrado con padding (explicación)

Para centrar el contenedor hijo respecto al padre vamos a añadir padding al contenedor padre.

  • Como el contenedor padre no tiene altura, coge la altura del contenedor hijo: ahora el contenedor padre y el hijo tienen las mismas dimensiones.
  • Al contenedor hijo tampoco le hemos dado medidas, por eso coge toda la anchura que puede (100%) y la altura se la determina el padding.
CSS
.content2{
    background-image: url("img/purple-future-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

    padding: 5% 16%;

}
Padding del padre y del hijo
Contenedor con fondo morado y neón; flechas rojas indican el padding del contenedor padre .content2 (5% 16%) y flechas verdes el padding del hijo .info2 (80px).
08 · Caso práctico 2

Resultado final del caso práctico 2

Contenido 1:

  • Definimos nosotros la medida de los contenedores.
  • Centramos mediante flex.

Contenido 2:

  • No definimos tamaño (la anchura siempre será la máxima, la altura la define lo que ocupen los elementos HTML).
  • Centramos añadiendo padding al contenedor padre.
CSS
/*contenido 1*/
.content1{
    background-image: url("img/blue-futre-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

    height:800px;

    display: flex;
    justify-content: center;
    align-items: center;
}

.info1{
    background-color: rgba(255, 255, 255, 0.443);
    width:60%;
    padding:80px;
}

/*contenido 2*/
.content2{
    background-image: url("img/purple-future-room.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;

    padding: 5% 16%;
}

.info2{
    background-color: rgba(255, 255, 255, 0.443);
    padding:80px;
}
Resultado (degradados en lugar de las imágenes del aula y medidas reducidas)

Título ección

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pharetra ultrices urna, ac fringilla neque fermentum sed.

Botón

Título ección

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus pharetra ultrices urna, ac fringilla neque fermentum sed.

Botón
Resultado del aula
Resultado final: arriba un contenedor con fondo azul futurista y un cuadro translúcido centrado; abajo un contenedor con fondo morado y neón con otro cuadro translúcido.