Publicado el 08.10.2022 a las 18:08
Te enseño cómo crear un efecto overlay sólo con CSS, sin librerías 😎
Un ejemplo de lo que te voy a enseñar a programar, pasa el cursor por encima de la imagen o si estás con un móvil o tablet haz clic en la imagen 👇
Un HTML muy básico, prácticamente una plantilla de HTML 5 básica con un div con la clase img:
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Overlay efect</title> </head> <body> <div class="img"></div> </body> </html>
Tomo una imagen random de Internet y la pongo como fondo de mi div con la clase img
.img { width: 90%; height: 450px; margin: 0 auto; /* El div se centra en el eje x */ margin-top: 50px; background-image: url('https://images.unsplash.com/photo-1522252234503-e356532cafd5?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1025&q=80'); background-size: cover; background-position: center; position: relative; /* Para que el seudoelemente esté dentro del elemento con esta clase */ overflow: hidden; /* Para que todo lo que salga del div con esta clase no se muestre */ }
.img::after { content: "Estás en fjmduran.com"; font-size: 2rem; font-weight: 500; color: black; background-color: rgba(240, 240, 240, 0.75); position: absolute; inset: 0; /* Con las siguientes 2 líneas consigo centrar el contenido en el div tanto en X como en Y */ display: grid; place-items: center; transform: translateY(100%); /* Lo saco del div para que no se vea */ transition: transform .4s; }
.img:hover::after { transform: translateY(0); /* Lo muevo al div */ }
.img { width: 90%; height: 450px; margin: 0 auto; /* El div se centra en el eje x */ margin-top: 50px; background-image: url('https://images.unsplash.com/photo-1522252234503-e356532cafd5?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1025&q=80'); background-size: cover; background-position: center; position: relative; /* Para que el seudoelemente esté dentro del elemento con esta clase */ overflow: hidden; /* Para que todo lo que salga del div con esta clase no se muestre */ } .img::after { content: "Estás en fjmduran.com"; font-size: 2rem; font-weight: 500; color: black; background-color: rgba(240, 240, 240, 0.75); position: absolute; inset: 0; /* Con las siguientes 2 líneas consigo centrar el contenido en el div tanto en X como en Y */ display: grid; place-items: center; transform: translateY(100%); /* Lo saco del div para que no se vea */ transition: transform .4s; } .img:hover::after { transform: translateY(0); /* Lo muevo al div */ }
Hasta luego 🖖