Saltar al contenido principal
Leyendo: Pseudoclase hover + efectos
Apuntes de clase

Clase 10 · Pseudoclase hover + efectos

Las pseudoclases nos permiten estilar un elemento según su estado. Vemos :hover y los efectos que podemos aplicar con él: opacity, transform (translate, rotate, scale), transition, transition-delay y filter.

Descargar PDF

01 · Pseudoclases

Qué es una pseudoclase

Las pseudoclases se utilizan para hacer referencia a elementos HTML que tengan un cierto comportamiento o estado concreto.

Sintaxis
.nombre-clase:pseudoclase
02 · Pseudoclase :hover

Cómo funciona :hover

Las propiedades de nuestro enlace o elemento las definimos en nuestra clase .btn. En la pseudoclase solo pondremos lo que queremos cambiar o añadir respecto a la clase principal.

CSS
.btn{
    color: red;
    background-color: yellow;
    padding:8px 16px;
}

.btn:hover{
    background-color: black;
    border-radius: 12px;
}
Resultado

En el estado hover hemos cambiado background-color y añadido border-radius. El color y el margen (padding) siguen igual que en el estado inicial, por lo que no hay que volver a ponerlos en el hover.

02 · Pseudoclase :hover

¿Qué puedo modificar mediante hover?

  • color
  • background-color
  • padding
  • border
  • text-decoration
  • font-size
  • text-shadow
  • width / height
02 · Pseudoclase :hover

Ejemplo botón

Hover invirtiendo colores: cambiamos el color de fondo, el color del texto y el color del borde.

CSS
.btn{
    background-color: aquamarine;
    color: rgb(10, 148, 148);
    padding:8px 24px;
    border: 2px solid rgb(10, 148, 148);
    border-radius:25px;
    font-size:24px;
    text-decoration: none;
}

.btn:hover{
    background-color: rgb(10, 148, 148) ;
    color: aquamarine ;
    border: aquamarine ;
}
Resultado
02 · Pseudoclase :hover

Hover en otros elementos

Podemos cambiar el estado de cualquier elemento cuando nos situamos con el ratón sobre él (div, img, texto…). Ejemplo: cambiar la anchura de un div con texto.

CSS
.content{
    background-color: yellow;
    padding:16px;
    width:250px;
}

.content:hover{
    width:400px;
}
Resultado

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

03 · Opacity y transform

Opacity

Nos permite cambiar la transparencia de un elemento: de 0 (transparente) a 1 (opaco).

Valores de opacity
00.10.20.30.40.50.60.70.80.91

0 es transparente y 1 es opaco.

CSS
.content{
    opacity:0.1;
    background-color: yellow;
    padding:16px;
    width:250px;
}

.content:hover{
    opacity:1;
    width:400px;
}
Resultado

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa.

03 · Opacity y transform

Transform (movimiento, rotación y escala)

transform nos permite cambiar diferentes aspectos. Estos son los más utilizados:

  • Translate · nos permite mover elementos.
  • Rotate · nos permite girar elementos.
  • Scale · nos permite escalar elementos.

Lo aplicamos a divs e imágenes.

Con los textos no funciona bien. Documentación: w3schools · transform.

03 · Opacity y transform

Transform: translate

Podemos mover cada eje (x, y, z) de forma independiente: translateX(80px), translateY(80px) y translateZ(80px). O mover todos los ejes a la vez en una única línea, separados por comas (el orden es X-Y-Z): translate(80px, 60px).

CSS
.content:hover{
    transform:translateX(80px);
}

.content:hover{
    transform:translateY(60px);
}

.content:hover{
    transform:translate3d(80px,40px);
}
Resultado

Pasa el cursor sobre cada cuadrado.

X
translateX(80px)
Y
translateY(60px)
X · Y
translate(80px, 40px)

En la diapositiva el último ejemplo aparece como translate3d(80px,40px). translate3d() necesita tres valores; con dos valores se usa translate(80px, 40px), que es lo que reproduce la demo.

03 · Opacity y transform

Transform: rotate

Indicaremos la rotación en grados: deg. rotate gira sobre el centro, rotateX sobre el eje horizontal y rotateY sobre el eje vertical.

CSS
.content:hover{
    transform:rotate(80deg);
}

.content:hover{
    transform:rotateX(80deg);
}

.content:hover{
    transform:rotateY(80deg);
}
Resultado

Pasa el cursor sobre cada cuadrado.

rotate
rotate(80deg)
rotateX
rotateX(80deg)
rotateY
rotateY(80deg)
03 · Opacity y transform

Transform: scale

Podemos escalar cada eje (x, y) de forma independiente con scaleX(1.2) y scaleY(1.2), o ambos a la vez en una única línea, separados por comas (orden X-Y): scale(1.2) o scale(1.2, 0.8).

CSS
.content:hover{
    transform:scale(1.2, 0.8);
}
Resultado

Pasa el cursor sobre cada cuadrado.

scale
scale(1.2, 0.8)
scale
scale(2)

Indicamos el valor como factor de escalado:

  • 1 es el valor original (100%).
  • 1.2 sería aumentar a 120%.
  • 2 sería aumentar al 200%.
  • 0.8 sería disminuir a 80%.

Si ponemos un solo valor en scale(), afecta a ambos ejes.

04 · Transition

Transition

Nos permite hacer los cambios entre el estado normal y el estado hover de forma gradual. Indicamos el tiempo que dura la transición en segundos o milisegundos: transition: 0.6s; o transition: 600ms;.

CSS
.content{
    opacity:0.1;
    background-color: yellow;
    padding:16px;
    width:250px;
}

.content:hover{
    transition:0.5s;
    opacity:1;
    width:400px;
}
Resultado

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean commodo ligula eget dolor.

04 · Transition

Comportamiento de transition

Al hacer hover pasamos del estado normal (A) al estado hover (B) de forma gradual gracias al transition de la pseudoclase :hover. Al dejar de hacer hover, de B a A, no es gradual porque no hemos puesto transition en la clase original (A).

Transition solo en :hover
.content{
    background-color: red;
    width:80px;
    height:80px;
    border-radius: 80px;
}   /* No hay transición */

.content:hover{
    background-color: yellow;
    transform: translateY(-200px);
    transition:0.6s;
}

Si queremos que tanto al hacer hover como al dejar de hacer hover el cambio sea gradual, tenemos que poner transition tanto en la clase (A) como en la pseudoclase (B).

Transition en la clase y en :hover
.content{
    background-color: red;
    width:80px;
    height:80px;
    border-radius: 80px;
    transition:0.6s;
}

.content:hover{
    background-color: yellow;
    transform: translateY(-200px);
    transition:0.6s;
}
Resultado: sin transition en A (izquierda) y con transition en A y B (derecha)

Pasa el cursor y quítalo: fíjate en la vuelta al estado inicial. (En la demo el movimiento es de 70px para que quepa.)

Solo en :hover · la vuelta es brusca
En A y en B · ida y vuelta graduales
04 · Transition

Transition (aceleración)

La transición tiene un movimiento constante; podemos variar un poco la aceleración con los siguientes valores: ease, ease-in, ease-out y ease-in-out. Estos valores se indican después del tiempo que dura la transición.

CSS
.content{
    background-color: red;
    width:80px;
    height:80px;
    border-radius: 80px;
    transition:0.6s ease;
    transition-delay:0.8s;

}
04 · Transition

Transition-delay

Es el retardo con el que empieza la transición. Indicamos el tiempo en segundos o milisegundos: transition-delay: 0.6s; o transition-delay: 600ms;.

CSS
.content{
    background-color: red;
    width:80px;
    height:80px;
    border-radius: 80px;
    transition:0.6s;
    transition-delay:0.8s;

}


.content:hover{
    background-color: yellow;
    transform: translateY(-200px);
    transition:0.6s;
}
Resultado

Al hacer hover empieza sin retardo (el transition del hover no lleva delay); al quitar el cursor, la vuelta espera 0.8s antes de empezar.

05 · Filtros

Filtros

CSS nos permite aplicar diferentes filtros a imágenes y elementos con la propiedad filter:

  • Desenfoque (blur)
  • Brillo (brightness)
  • Contraste (contrast)
  • Sombra (drop-shadow, parecido a box-shadow)
  • Escala de grises (grayscale)
  • Tono (hue-rotate)
  • Invertir colores (invert)
  • Opacity (hace lo mismo que vimos antes)
  • Saturación (saturate)
  • Tono sepia (sepia)
CSS
filter: none;
filter: blur(5px);
filter: brightness(200%);
filter: contrast(200%);
filter: drop-shadow(8px 8px 10px gray);
filter: grayscale(100%);
filter: hue-rotate(90deg);
filter: invert(100%);
filter: opacity(30%);
filter: saturate(8);
filter: sepia(100%);
filter: contrast(200%) brightness(150%);
Resultado
Logotipo de HTML5 sin filtro
none
Logotipo de HTML5 con desenfoque
blur(5px)
Logotipo de HTML5 con más brillo
brightness(200%)
Logotipo de HTML5 con más contraste
contrast(200%)
Logotipo de HTML5 con sombra
drop-shadow(8px 8px 10px gray)
Logotipo de HTML5 en escala de grises
grayscale(100%)
Logotipo de HTML5 con el tono girado
hue-rotate(90deg)
Logotipo de HTML5 con colores invertidos
invert(100%)
Logotipo de HTML5 con opacidad al 30%
opacity(30%)
Logotipo de HTML5 muy saturado
saturate(8)
Logotipo de HTML5 en tono sepia
sepia(100%)
Logotipo de HTML5 con contraste y brillo
contrast(200%) brightness(150%)

Documentación: w3schools · filter.