En este tutorial, vamos a construir desde cero un banner minimalista y responsivo con estética «Premium«: tipografÃa limpia, colores sofisticados y un efecto de zoom interactivo que elevará el nivel de tus proyectos. Todo esto usando HTML5 y CSS moderno. ¿Lo mejor? Es tan ligero que tu Google PageSpeed te lo agradecerá.
Para que nuestro banner sea verdaderamente minimalista y funcional, la estructura de HTML que vamos a usar debe ser tan limpia como el resultado visual. Al fin y al cabo, no queremos tener un exceso de etiquetas innecesarias, pero sà una jerarquÃa lógica.
Para esto, ahora te voy a explicar por qué usaremos exactamente un contenedor padre y dos hijos directos:
La AnatomÃa del Banner: HTML Semántico
Lo primero es crear la estructura HTML, la cual te dejo aqui debajo
<!-- BANNER MINIMALISTA -->
<div class="banner style-minimal">
<div class="banner-img" style="background-image: url('https://images.unsplash.com/photo-1515562141207-7a88fb7ce338?q=80&w=1000&auto=format&fit=crop');"></div>
<div class="banner-content">
<h2>The New Collection</h2>
<p>Elegance in Simplicity</p>
<a href="#" class="btn-outline">Show Now</a>
</div>
</div>
El Contenedor Padre (.banner)
el contenedor padre es el «escenario base» o el marco de nuestra obra. Su función es vital porque mantiene el Control del espacio, y para eso lo va a hacer definiendo, mas tarde con CSS, la altura minima y el ancho del banner. Cuando usemos Flexbox, este permitira la creacion del eje que permitira, al usar display: flex; , que el elemento padre, tome el control de sus hijos, permitiendo alinearlos lado a lado o uno sobre otro sin esfuerzo ni la necesidad de usar @media queries. Ademas, El Recorte(Clipping), permitira al padre a actuar como una ventana usando overflow: hidden. Si la imagen interna crece (el efecto zoom que crearemos en la seccion de CSS), el contenedor padre evita que se desborde y rompa el resto de la pagina web.
Primer Hijo Visual ( .banner-img )
Cuando separamos la imagen y la colocamos en su propio contenedor div, nos permitira mejores acciones de diseño. Mas adelante, veremos como usaremos acciones CSS para manejar la imagen, como:
Background-image: Vamos a estar usando Background-image para presentar la imagen como fondo.
Background-size: cover. Esto asegura que la imagen siempre llene su mitad del banner sin deformarse, sin importar si la pantalla es utra ancha o cuadrada.
- Ademas, permite independencia de animacion, lo que permite escalar (
scale) la imagen internamente sin mover el texto ni alterar el tamaño del banner.
Segundo Hijo Visual ( .banner-content )
Este contenedor contiene el bloque de texto. Como lo meantenemos en un contenedor independiente, como la imagen este nos permite:
- Tener un Texto Centrado Perfecto: Para esto, podemos usar Flexbox dentro de este hijo para que el titulo y el boton esten siempre en el centro matematico del copntenedor, tanto vertical como horizontalmente.
- Legibilidad: Esta parte nos permite aplicar un relleno (
padding) consistente que protege el texto, evitando que choque con los bordes del banner en pantallas pequeñas.
¿Por qué solo dos hijos?
La simplicidad de tener dos hijos solamente, uno para la imagen y otro para el texto, es la clave del diseño responsivo. Al tener solo dos bloques principales, le damos intrucciones claras al navegador, algo asi como: «Si hay espacio, ponlos juntos; si el espacio se reduce, apilalos».
Asi eliminas la necesidad de escribir cientos de lineas de codigo para ajustar cada elemento individualmente.
El Corazón de este Diseño: CSS Flexbox
El secreto de este banner minimalista y responsivo radica en cómo el contenedor padre gestiona el espacio.
Vamos a comenzar con el contenedor banner, aqui esta el codigo CSS:
.banner{
display: flex;
flex-wrap: wrap;
background: var(--white);
overflow: hidden;
min-height: 450px;
box-shadow: 0 15px 35px rgba(0,0,0,0.05);
}
Al aplicar display: flex; al contenedor, obligamos a los hijos (imagen y texto) a ponerse uno a lado del otro. Pero el verdadero truco de magia aqui es la linea flex-wrap: wrap;
- En Desktop: Hay espacio suficiente para los contenedores hijos, asi que se mantienen en una file (50% cada uno).
- En Movil: Cuando la pantalla se estrecha, Flexbox detecta que ya no caben de forma «comoda» y entonces, empuja automaticamente el segundo bloque (en este caso el texto) debajo de la imagen.
Estilos para los Contenedores hijos
Ahora vamos a continuar con los contenedores hijos. Asi que , en vez de fijar un ancho rigido como cuando se usa width:500px;, vamos a usar la propiedad flexible. Aqui debajo se los dejo:
.banner-img, .banner-content {
flex: 1 1 50%; /* Crece, se encoge y su base es el 50% */
min-width: 300px; /* El "umbral" de seguridad */
}
Esto le dice al navegador: «Intenta que cada uno ocupe la mitad, pero si el espacio baja de 300px, dales su propia lÃnea». Asà de simple conseguimos un diseño responsive sin escribir una sola Media Query complicada.
Imagen como Background
El estilo que vamos a usar para la imagen sera par controlar la imagen como fondo, debido a que estamos usando background-image para cargar la imagen que usaremos.
.banner-img{
background-size: cover;
background-position: center;
transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1);
min-height: 350px;
}


Centrado Absoluto del Texto (El dolor de cabeza resuelto)
Dentro de .banner-content, usamos Flexbox nuevamente, pero esta vez en dirección de columna. Luego usamos:
justify-content: center;(Centrado vertical)align-items: center;(Centrado horizontal)
/* Banner Content */
.banner-content{
display: flex; /* Usar flex para posicionar el texto */
flex-direction: column;
justify-content: center; /* Centrado vertical */
align-items: center; /* Centrado Horizontal */
padding: 60px 0;
text-align: center;
}
Esto garantiza que, sin importar cuánto texto escribas o qué tan alto sea el banner, el mensaje siempre estará en el «punto dulce» visual.
Proseguiremos conel estilo del titulo, el texto y el boton.
.banner-content h2{
color: var(--dark);
letter-spacing: 4px;
margin-bottom: 10px;
text-transform: uppercase;
}
.banner-content p {
text-transform: uppercase;
}
.btn-outline {
margin-top: 25px;
padding: 12px 30px;
border: 1px solid var(--gold);
color: var(--dark);
text-decoration: none;
transition: 0.3s;
}
.btn-outline:hover {
background: var(--gold);
color: var(--white);
}
Resultado de medio tiempo
Desktop

Mobile

Interactividad y Zoom
Ahora vamos a gregar los efector y la interaccion, lo que le da vida al banner.
Ya tenemos overflow:hidden; en el contenedor padre. Esto actua como un marco de cuadro; nada de lo que pase adentro puede salir de sus bordes. Ahora en la imagen vamos a agregar un estilo scale que se ejecuta cuando pasamos el cursor por encima del banner.
.banner:hover .banner-img {
transform: scale(1.08); /* Un aumento sutil del 8% */
}
Resultado Final: Todo el Código en un Solo Lugar Para ti
HTML
<div class="banner">
<div class="banner-img" style="background-image: url('https://images.unsplash.com/photo-1515562141207-7a88fb7ce338?q=80&w=1000&auto=format&fit=crop');"></div>
<div class="banner-content">
<h2>THE SOLSTICE COLLECTION</h2>
<p>Elegance in Simplicity</p>
<a href="#" class="btn-outline">SHOP NOW</a>
</div>
</div>
CSS
Pega esto en tu archivo .css o dentro de las etiquetas <style> en la cabecera de tu pagina
:root {
--gold: #b5a47d;
--dark: #1a1a1a;
--white: #ffffff;
}
/* BANNER MINIMALIST */
.banner{
display: flex;
flex-wrap: wrap;
background: var(--white);
overflow: hidden;
min-height: 450px;
box-shadow: 0 15px 35px rgba(0,0,0,0.05);
}
.banner-img, .banner-content{
flex: 1 1 50%;
min-width: 300px;
}
.banner-img{
background-size: cover;
background-position: center;
transition: transform 0.6s cubic-bezier(0.25, 1, 0.5, 1);
min-height: 350px;
}
.banner:hover .banner-img{
transform: scale(1.08);
}
/* Banner Content */
.banner-content{
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: 60px 0;
text-align: center;
}
.banner-content h2{
color: var(--dark);
letter-spacing: 4px;
margin-bottom: 10px;
text-transform: uppercase;
}
.banner-content p {
text-transform: uppercase;
}
.btn-outline {
margin-top: 25px;
padding: 12px 30px;
border: 1px solid var(--gold);
color: var(--dark);
text-decoration: none;
transition: 0.3s;
}
.btn-outline:hover {
background: var(--gold);
color: var(--white);
}
¡Ahora es tu turno!
¿Lograste implementarlo? Si tienes alguna duda sobre cómo personalizar los colores o las tipografÃas, déjala en los comentarios.
¿Te ha gustado este tutorial? No olvides compartirlo con otros desarrolladores que quieran elevar su nivel de UI sin complicarse la vida.

