Diseño responsivo
💡 🎯 Al terminar esta lección podrás…
- Preparar una página para móviles con
viewporty un enfoque mobile-first. - Escribir media queries para ancho, color, movimiento y puntero.
- Usar
min(),max()yclamp()para valores fluidos. - Probar y depurar un diseño en distintos tamaños.
1.Qué es el diseño responsivo
Tu página la verá gente con un celular de 360px, una tableta, un portátil y un monitor de 27 pulgadas. Diseño responsivo es que una sola página se adapte bien a todos, sin versiones separadas.
Se apoya en tres ideas:
- Layout fluido: anchos relativos (
%,fr,max-width) en lugar de píxeles fijos. - Contenido flexible: imágenes y textos que se ajustan a su contenedor.
- Media queries: reglas que cambian el diseño en ciertos tamaños o condiciones.
⚠️ Importante · El viewport
Sin esta etiqueta en el <head>, los celulares muestran la página como si fuera de escritorio y la encogen:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
2.Primero el móvil (mobile-first)
La estrategia más sencilla: escribe tus estilos base pensando en la pantalla más pequeña y, a medida que el espacio crece, añade mejoras con media queries min-width.
| Aspecto | Mobile-first | Desktop-first |
|---|---|---|
| Estilos base | Para pantallas pequeñas | Para pantallas grandes |
| Media queries | @media (min-width: …) añaden complejidad | @media (max-width: …) quitan complejidad |
| Ventaja | El móvil carga menos CSS y el código es más simple | — |
/* Base: móvil, una columna */
.tarjetas { display: grid; gap: 16px; }
/* A partir de 600px: dos columnas */
@media (min-width: 600px) {
.tarjetas { grid-template-columns: repeat(2, 1fr); }
}
/* A partir de 960px: cuatro columnas */
@media (min-width: 960px) {
.tarjetas { grid-template-columns: repeat(4, 1fr); }
}
3.Media queries en detalle
| Condición | Ejemplo | Para qué |
|---|---|---|
| Ancho | (min-width: 768px), (max-width: 600px) | Cambiar el diseño según el espacio |
| Rango moderno | (600px <= width <= 900px) | Una franja concreta |
| Orientación | (orientation: landscape) | Horizontal o vertical |
| Esquema de color | (prefers-color-scheme: dark) | Tema oscuro del sistema |
| Movimiento reducido | (prefers-reduced-motion: reduce) | Quitar animaciones |
| Contraste | (prefers-contrast: more) | Más contraste |
| Puntero | (hover: hover), (pointer: coarse) | Distinguir ratón de pantalla táctil |
| Impresión | print | Estilos para imprimir |
@media (min-width: 768px) and (orientation: landscape) { … }
@media (max-width: 600px), print { … } /* coma = "o" */
@media not print { … }
/* Solo mostrar efectos hover donde hay ratón */
@media (hover: hover) { .tarjeta:hover { transform: translateY(-4px); } }
¿Qué puntos de ruptura usar?
No existen medidas «oficiales». Una referencia común:
| Nombre | Desde | Dispositivo típico |
|---|---|---|
| Móvil | (base) | Celulares |
| Tableta | 600px a 768px | Tabletas y celulares grandes en horizontal |
| Escritorio | 960px a 1024px | Portátiles |
| Pantalla ancha | 1280px o más | Monitores |
💡 Consejo · Rompe donde se rompe el contenido
Los mejores puntos de ruptura no son los de los dispositivos, sino los de tu diseño: reduce la ventana y añade una media query justo cuando algo se vea mal. Así tu diseño funciona en cualquier tamaño, no solo en los «típicos».
4.Valores fluidos: menos media queries
Con unas pocas funciones puedes lograr que tamaños y espacios se adapten de forma continua:
| Función | Qué hace | Ejemplo |
|---|---|---|
min(a, b) | El menor de los dos | width: min(100%, 700px) |
max(a, b) | El mayor de los dos | padding: max(16px, 4vw) |
clamp(mín, ideal, máx) | Un valor que crece pero con límites | font-size: clamp(1rem, 2.5vw, 1.5rem) |
calc() | Operaciones con unidades distintas | width: calc(100% - 2rem) |
.contenido {
width: min(100% - 2rem, 70rem); /* 1rem de aire a cada lado, máximo 70rem */
margin-inline: auto;
}
h1 { font-size: clamp(1.75rem, 1rem + 3vw, 3rem); }
.seccion { padding-block: clamp(2rem, 6vw, 5rem); }
5.Imágenes y medios responsivos
img, video, svg {
max-width: 100%;
height: auto; /* conserva la proporción */
display: block;
}
.hero-img {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover; /* recorta en vez de deformar */
}
- Ya viste en la lección 8 de HTML cómo ofrecer imágenes distintas con
srcsety<picture>. - Para videos incrustados con
<iframe>, mantén la proporción conaspect-ratio: 16 / 9; width: 100%; height: auto;. - Las imágenes de fondo también pueden adaptarse con media queries: una versión ligera en móvil y una grande en escritorio.
📌 Nota · Peso, no solo tamaño
Que una imagen de 4000px «quepa» en un celular con max-width: 100% no significa que cargue rápido: se descarga entera. Redimensiona y comprime antes de subir y usa srcset para los casos importantes.
6.Container queries: componentes que se adaptan a su espacio
Una media query mira la ventana. Pero un componente (una tarjeta) puede estar en una barra lateral estrecha o en una zona ancha en la misma pantalla. Con las container queries el componente responde al tamaño de su contenedor:
.envoltura { container-type: inline-size; }
.tarjeta { display: grid; gap: 8px; }
@container (min-width: 420px) {
.tarjeta { grid-template-columns: 120px 1fr; }
}
📌 Nota · Ya se pueden usar
Las container queries funcionan en todos los navegadores modernos. Son ideales para componentes reutilizables: la misma tarjeta se ve bien en cualquier parte, sin depender del ancho de la pantalla.
7.Cómo probar tu diseño responsivo
- Modo dispositivo: en las herramientas (F12), pulsa el icono de móvil o Ctrl + Shift + M. Elige un celular o arrastra el borde para cualquier ancho.
- Reduce la ventana de tu navegador de escritorio hasta 320px: es el ancho más pequeño razonable.
- Aumenta el zoom al 200%: así se ve en pantallas pequeñas y para quien agranda el texto.
- Prueba en un celular real, al menos una vez. Lo táctil (botones de 44px o más) no se aprecia en el escritorio.
- Gira el dispositivo: vertical y horizontal.
💡 Consejo · Qué buscar
Que no haya desplazamiento horizontal, que ningún texto se salga ni se superponga, que los botones sean fáciles de pulsar y que nada importante se oculte solo porque «no cabe».
8.Errores frecuentes
- Olvidar la etiqueta
viewporty preguntarse por qué las media queries no funcionan en el celular. - Anchos fijos en
px(width: 960px): causan scroll horizontal. - Mezclar
min-widthymax-widthsin plan y que las reglas se pisen. - Ocultar contenido en móvil (
display: none) en lugar de reorganizarlo. - Texto demasiado pequeño en móvil (menos de 16px).
- Botones y enlaces diminutos: el área táctil mínima recomendada es ~44×44px.
- Probar solo en tu pantalla.
📒 Apuntes para llevar
- Diseño responsivo = layout fluido + contenido flexible + media queries.
- Imprescindible:
<meta name="viewport" content="width=device-width, initial-scale=1.0">. - Mobile-first: estilos base para móvil y
@media (min-width: …)para añadir mejoras. - Las media queries también detectan
prefers-color-scheme,prefers-reduced-motion,hoveryprint. - Elige los puntos de ruptura donde tu diseño se rompe, no los de dispositivos concretos.
min(),max(),clamp()ycalc()permiten valores fluidos sin media queries.img { max-width: 100%; height: auto }yaspect-ratio/object-fitmantienen las imágenes ordenadas.- Las container queries adaptan un componente al tamaño de su contenedor.
9.Glosario
| Término | Significado |
|---|---|
| Responsivo | Diseño que se adapta a cualquier tamaño de pantalla. |
| Media query | Condición que activa estilos solo si se cumple. |
| Punto de ruptura | Ancho donde el diseño cambia. |
| Mobile-first | Estrategia que parte del móvil y añade mejoras con min-width. |
viewport | Área visible de la página; se configura con una etiqueta meta. |
clamp() | Valor que crece entre un mínimo y un máximo. |
| Container query | Regla que depende del tamaño del contenedor, no de la ventana. |
| Layout fluido | Diseño con medidas relativas que se estiran y encogen. |
🧠 Comprueba lo aprendido
Elige una respuesta en cada pregunta. Verás al instante si acertaste y por qué.
¿Qué hace @media (min-width: 600px)?
min-width significa «a partir de este ancho».
En una estrategia mobile-first, ¿qué tipo de media query se usa mayormente?
Los estilos base son para móvil y min-width añade mejoras al crecer.
Las media queries no funcionan en el celular. ¿Qué falta probablemente?
Sin viewport, el móvil renderiza como escritorio y encoge la página.
¿Qué hace font-size: clamp(1rem, 4vw, 2rem)?
El valor del centro se limita entre el mínimo y el máximo.
¿Qué ventaja tienen las container queries?
Permiten componentes reutilizables que se ven bien en cualquier sitio.
Tu progreso se guarda en este navegador y se refleja en el índice del curso.
💡 🚀 ¡Ahora te toca!
La práctica fija lo aprendido. Pasa al ejercicio de esta lección.