Mobile-first, unidades relativas, media queries y navbar hamburguesa para navegación adaptable.
Viewport y Unidades Responsive
- Meta viewport: Indica al navegador cómo escalar el contenido en pantallas pequeñas. Sin esta etiqueta, el diseño se ve "alejado" en móvil.
- Unidades relativas:
%se adapta al contenedor,remusa el tamaño base del documento,emdepende del padre,vh/vwdependen del viewport. - Imágenes fluidas:
max-width: 100%evita que se salgan del contenedor yheight: autoconserva la proporción.
Media Queries (Mobile First)
css1.container { padding: 1rem; } 2.grid { display: flex; flex-direction: column; gap: 1rem; } 3 4@media (min-width: 768px) { 5 .grid { flex-direction: row; flex-wrap: wrap; } 6 .grid-item { flex: 1 1 45%; } 7} 8 9@media (min-width: 1024px) { 10 .grid-item { flex: 1 1 30%; } 11} 12 13@media (prefers-color-scheme: dark) { 14 body { background: #1a1a1a; color: #fff; } 15}
- Enfoque mobile-first: estilos base para móvil y mejoras progresivas.
- Breakpoints comunes (480/768/1024/1440) y orientación.
Navbar Hamburguesa
html1<nav class="navbar"> 2 <div class="logo">MiSitio</div> 3 <button class="menu-toggle" aria-label="Abrir menú">☰</button> 4 <ul class="nav-menu"> 5 <li><a href="#home">Inicio</a></li> 6 <li><a href="#about">Nosotros</a></li> 7 <li><a href="#services">Servicios</a></li> 8 <li><a href="#contact">Contacto</a></li> 9 </ul> 10</nav>
css1.navbar { display: flex; justify-content: space-between; align-items: center; padding: 1rem; background: #333; color: #fff; } 2.menu-toggle { display: block; background: none; border: none; color: #fff; font-size: 1.5rem; cursor: pointer; } 3.nav-menu { display: none; position: absolute; top: 60px; left: 0; right: 0; background: #333; flex-direction: column; padding: 1rem; } 4.nav-menu.active { display: flex; } 5@media (min-width: 768px) { 6 .menu-toggle { display: none; } 7 .nav-menu { display: flex; position: static; flex-direction: row; gap: 2rem; } 8}
- Manejo de estado (clase
.active) con JavaScript básico para abrir/cerrar menú. - Consideraciones de accesibilidad:
aria-labely foco en enlaces.
Optimización de Imágenes
- Formatos recomendados (WebP, AVIF) y tamaños adecuados por viewport.
srcset/sizespara servir imágenes responsivas.- Lazy loading con
loading="lazy".
Ejemplos de Código
3 ejemplos
Grid responsive con flex
1.grid {
2 display: flex;
3 flex-direction: column;
4 gap: 1rem;
5}
6@media (min-width: 768px) {
7 .grid {
8 flex-direction: row;
9 flex-wrap: wrap;
10 }
11 .grid-item { flex: 1 1 45%; }
12}
13@media (min-width: 1024px) {
14 .grid-item { flex: 1 1 30%; }
15}Toggle de menú
1const toggle = document.querySelector('.menu-toggle');
2const menu = document.querySelector('.nav-menu');
3toggle.addEventListener('click', () => {
4 menu.classList.toggle('active');
5});Imágenes adaptables
1img {
2 max-width: 100%;
3 height: auto;
4 display: block;
5}Recursos
4 recursos disponibles
¡Hora de Practicar!
Práctica guiada - Landing responsive
Landing responsive
Construir una landing con hero, features y galería adaptable; aplicar breakpoints 768/1024/1440 y probar en Responsive Mode.
Desafío de Código
Ejercicios - Media queries
Media queries
(1) Ajustar paddings por breakpoint,
(2) cambiar columnas de una grilla según ancho,
(3) implementar modo oscuro con prefers-color-scheme,
(4) crear navbar hamburguesa funcional.
Taller Práctico
Proyecto de la semana
Desafío practico
Landing page responsive completa: header con logo y menú hamburguesa, hero con CTA, sección de características, galería 2/3/4 columnas según viewport, formulario de contacto y footer en 3 columnas. Mobile-first, imágenes optimizadas y colores consistentes.
Reto de Lectura
Reto de Lectura — Las media queries que se pisan
Este CSS 'responsive' se comporta distinto de lo que su autor cree. Predice qué se ve en 3 anchos de pantalla y explica por qué el orden lo rompe todo.
Un compañero entregó este CSS y jura que "en su compu se ve bien". Sin ejecutarlo, predice el color de fondo de .hero en pantallas de 1200px, 800px y 375px, y explica por qué no es lo que el autor esperaba.
css1/* "Mobile first"... ¿seguro? */ 2.hero { background: white; padding: 40px; } 3 4@media (max-width: 900px) { 5 .hero { background: lightblue; padding: 24px; } 6} 7 8@media (max-width: 500px) { 9 .hero { background: lightgreen; padding: 12px; } 10} 11 12/* Regla agregada "para arreglar el tablet" al final del archivo */ 13@media (max-width: 1000px) { 14 .hero { background: pink; } 15}
Preguntas:
- ¿Qué fondo tiene
.heroa 1200px, a 800px y a 375px? (Cuidado con la de 375px.) - El autor quería: blanco en desktop, azul en tablet, verde en móvil. ¿Qué regla se lo arruina y por qué?
- Reordena/corrige el CSS para lograr la intención original. ¿Qué convención evita este problema para siempre?
- Bonus: estas reglas son desktop-first (
max-width). Reescríbelas mobile-first (min-width).
Clase 6 de 33 en la ruta Desarrollo web