
Cómo crear un Navbar Responsive solo con HTML y CSS
Crea un menú de navegación responsive profesional con HTML y CSS. Aprende Flexbox, Media Queries y el truco del Checkbox Hack para móviles, sin una sola línea de JavaScript.
HTML y CSSCSS y diseño adaptativoUsarás animaciones fluidas, variables CSS y diseño adaptativo para lograr un resultado profesional sin JavaScript.
Construimos la base. Tenemos un contenedor principal (.carousel) que actúa como 'ventana', y dentro, una 'pista' (.carousel-inner) que contiene todos los slides. Esta pista es la que moveremos horizontalmente para crear el efecto de desplazamiento.
<div class="carousel">
<div class="carousel-inner">
<div class="carousel-item">
<img src="..." class="carousel-image" alt="playa" />
<div class="carousel-caption">
<h2 class="carousel-title">Playa rocosa</h2>
<p class="carousel-text">Descubrí una costa única...</p>
<button class="carousel-button">Ver más</button>
</div>
</div>
<div class="carousel-item">...</div>
<div class="carousel-item">...</div>
</div>
</div>
<div class="carousel">
<div class="carousel-inner">
<div class="carousel-item">
<img src="..." class="carousel-image" alt="playa" />
<div class="carousel-caption">
<h2 class="carousel-title">Playa rocosa</h2>
<p class="carousel-text">Descubrí una costa única...</p>
<button class="carousel-button">Ver más</button>
</div>
</div>
<div class="carousel-item">...</div>
<div class="carousel-item">...</div>
</div>
</div>Definimos variables CSS para controlar fácilmente la cantidad de slides y la altura. El contenedor principal usa overflow: hidden para ocultar todo lo que esté fuera de la 'ventana' visible, creando el efecto de máscara.
/* Reset básico (mejor que el selector universal)
- Evita que el navegador agregue márgenes/padding por defecto.
- Lo aplicamos solo a html y body para no “romper” estilos internos de otros elementos (como inputs, botones, etc.).*/
html, body {
margin: 0;
padding: 0;
}
.carousel {
/* Variables para fácil configuración */
--slides: 3; /* Cantidad total de slides */
--h: 35dvw; /* Altura proporcional al ancho del viewport */
width: 100%;
height: var(--h);
overflow: hidden; /* La magia: oculta los slides que no están en foco */
}El .carousel-inner es donde ocurre la acción. Usamos display: flex para poner los slides en fila y calc() para definir el ancho total basado en la cantidad de slides (3 slides = 300% de ancho) . Aquí vinculamos la animación slide.
.carousel-inner {
display: flex; /* Alinea los slides horizontalmente */
height: 100%;
/* Ancho dinámico: Si son 3 slides, ancho = 300% */
width: calc(var(--slides) * 100%);
/* La animación que mueve la pista */
animation: slide 20s infinite ease-in-out;
will-change: transform; /* Optimización de rendimiento */
}
.carousel-item {
position: relative;
/* Cada slide ocupa exactamente una fracción del ancho total (100% / 3) */
flex: 0 0 calc(100% / var(--slides));
height: 100%;
display: flex;
place-content: center;
place-items: center;
}
.carousel-image {
position: absolute;
inset: 0; /* Top, Right, Bottom, Left en 0 */
width: 100%;
height: 100%;
object-fit: cover; /* Recorta la imagen para llenar el contenedor */
z-index: 1; /* Queda por detrás del texto */
}El texto va sobre la imagen. Usamos un fondo semitransparente con rgb(0 0 0 / 0.5) para garantizar legibilidad y unidades relativas (dvw) para que el tamaño del texto y los botones escale perfectamente con la pantalla.
.carousel-caption {
position: relative;
z-index: 2; /* Por encima de la imagen */
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 40dvw; /* Ancho relativo al viewport */
padding: 5dvw;
gap: 3dvw;
border-radius: 2dvw;
background: rgb(0 0 0 / 0.5); /* Fondo oscuro semitransparente */
color: #fff;
text-align: center;
}
.carousel-title {
font-size: 1.6dvw; /* Tipografía responsiva */
font-weight: 700;
}
.carousel-text {
/* Texto un poco más chico */
font-size: 1dvw;
}Aprendé desde cero con clases 100% en vivo, grupos súper reducidos y acompañamiento real. Todo el contenido está diseñado y dictado por el creador de la plataforma, para que aprendas de verdad, sin videos fríos ni cursos masivos.
HTML, estilos modernos con CSS y diseño rápido con Tailwind para lanzar tus primeros sitios responsivos y profesionales.10 clases en vivo con profesores expertosVer próximas fechasKeyframes)Aquí está el cerebro del carrusel. Usamos porcentajes negativos de translateX para mover la pista. Lo importante son las pausas: notarás que hay rangos (ej: 0% a 22.5%) donde el valor no cambia, esto permite que el slide se quede quieto para que el usuario pueda leerlo.
@keyframes slide {
/* Slide 1: Quieto del 0% al 22.5% */
0%, 22.5% { transform: translateX(0%); }
/* Slide 2: Quieto del 25% al 47.5% (-33.33% es 1/3 del ancho) */
25%, 47.5% { transform: translateX(-33.333%); }
/* Slide 3: Quieto del 50% al 72.5% (-66.66% es 2/3 del ancho) */
50%, 72.5% { transform: translateX(-66.666%); }
/* Vuelta al Slide 2 (efecto rebote o ciclo) */
75%, 97.5% { transform: translateX(-33.333%); }
/* Vuelta al inicio */
100% { transform: translateX(0%); }
}
@keyframes slide {
/* Slide 1: Quieto del 0% al 22.5% */
0%, 22.5% { transform: translateX(0%); }
/* Slide 2: Quieto del 25% al 47.5% (-33.33% es 1/3 del ancho) */
25%, 47.5% { transform: translateX(-33.333%); }
/* Slide 3: Quieto del 50% al 72.5% (-66.66% es 2/3 del ancho) */
50%, 72.5% { transform: translateX(-66.666%); }
/* Vuelta al Slide 2 (efecto rebote o ciclo) */
75%, 97.5% { transform: translateX(-33.333%); }
/* Vuelta al inicio */
100% { transform: translateX(0%); }
}Utilizamos la media query @media (orientation: portrait) para detectar si el dispositivo está en vertical (como un celular). Ajustamos la altura (--h) para que sea más alto y redefinimos los tamaños de fuente y padding para que sean legibles en pantallas estrechas.
@media (orientation: portrait) {
.carousel {
/* En vertical usamos el 65% de la altura de la pantalla */
--h: 65dvh;
}
.carousel-caption {
/* Ancho casi total y texto más grande */
width: 70%;
padding: 6dvw;
gap: 4dvw;
border-radius: 4dvw;
}
.carousel-title { font-size: 5dvw; }
.carousel-text { font-size: 3.2dvw; }
.carousel-button {
width: 70%;
padding: 3.2dvw;
font-size: 3.4dvw;
}
}El resultado es un componente robusto que mantiene la relación de aspecto cinematográfica en escritorio y cambia a un formato de 'historia' vertical en móviles, todo controlado por CSS moderno.


HTML y CSSCrea un menú de navegación responsive profesional con HTML y CSS. Aprende Flexbox, Media Queries y el truco del Checkbox Hack para móviles, sin una sola línea de JavaScript.

HTML y CSSUsarás animaciones fluidas, variables CSS y diseño adaptativo para lograr un resultado profesional sin JavaScript.