Responsive Design y Media Queries
Volver a clases
UI/UX Design●●Intermedio

Responsive Design y Media Queries

120 min
5 vistas

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, rem usa el tamaño base del documento, em depende del padre, vh/vw dependen del viewport.
  • Imágenes fluidas: max-width: 100% evita que se salgan del contenedor y height: auto conserva la proporción.

Media Queries (Mobile First)

css
1.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

html
1<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>
css
1.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-label y foco en enlaces.

Optimización de Imágenes

  • Formatos recomendados (WebP, AVIF) y tamaños adecuados por viewport.
  • srcset/sizes para servir imágenes responsivas.
  • Lazy loading con loading="lazy".

Ejemplos de Código

3 ejemplos

Toggle de menú

javascript
1const toggle = document.querySelector('.menu-toggle');
2const menu = document.querySelector('.nav-menu');
3toggle.addEventListener('click', () => {
4  menu.classList.toggle('active');
5});

Imágenes adaptables

css
1img {
2  max-width: 100%;
3  height: auto;
4  display: block;
5}

Grid responsive con flex

css
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}

Recursos

3 recursos disponibles

¡Hora de Practicar!

PrácticaIntermedio15 min

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

EjercicioIntermedio15 min

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

TallerIntermedio20 min

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.

ALVESC ACADEMY - Plataforma Educativa