Diseño
Diseño responsive y el viewport: lo que ve tu móvil vs. lo que ve tu portátil
10 min de lectura
Un sitio que se ve perfecto en tu portátil probablemente fue diseñado para un portátil de 1440px. Ábrelo en un iPhone de 375px y entenderás por qué existe la meta viewport: sin ella, el navegador renderiza la página completa a 1440 píxeles de ancho, la encoge para que quepa en la pantalla del móvil y entrega una página tan diminuta que necesitas hacer pinch-zoom para leer cualquier cosa. El viewport es la ventana del navegador hacia tu página, y controlarlo es el primer paso más importante del diseño responsive.
Qué es realmente el viewport
El viewport no es la pantalla física. Son las dimensiones internas del área de contenido del navegador — la parte que realmente muestra tu HTML y CSS, excluyendo barras de desplazamiento, chrome del navegador y la interfaz del sistema operativo. En un navegador de escritorio el viewport suele coincidir con el tamaño de la ventana; en un móvil coincide con las dimensiones en píxeles CSS del dispositivo, no con el recuento de píxeles físicos.
Esta distinción entre píxeles CSS y píxeles de hardware es donde entra devicePixelRatio. Un iPhone 15 moderno reporta un viewport CSS de 393x852 puntos, pero la pantalla tiene 1179x2556 píxeles físicos — un devicePixelRatio de 3. Esto significa que cada píxel CSS ocupa un bloque de 3x3 píxeles de hardware, produciendo texto nítido y bordes afilados. No necesitas gestionar esto directamente; el navegador y el sistema operativo manejan la conversión. Pero explica por qué un viewport de 375px CSS no es una pantalla de baja resolución.
La meta viewport y qué controla
El viewport se configura con un solo elemento HTML que va dentro de la etiqueta <head>:
<meta name="viewport" content="width=device-width, initial-scale=1">Las dos directivas críticas son width=device-width y initial-scale=1. La primera le dice al navegador: ajusta el ancho del viewport CSS al ancho de pantalla del dispositivo en píxeles CSS, en vez de renderizar con un ancho de escritorio predeterminado de 980px. La segunda fija el zoom al 100% al cargar la página para que el contenido no se amplíe ni reduzca automáticamente.
Sin esta etiqueta, los navegadores móviles renderizan las páginas como si estuvieran en un escritorio. Safari en iOS usaba históricamente un viewport de 980px y lo escalaba para que cupiera en la pantalla. El resultado: texto que solo se lee tras pinch-zoom, elementos táctiles demasiado pequeños para tocar y formularios a los que hay que acercarse para rellenarlos. Todo framework CSS moderno — Bootstrap, Tailwind, Foundation — incluye esta etiqueta por defecto, por eso el problema parece haber desaparecido. Pero si construyes desde cero y la olvidas, la redescubrirás de inmediato.
Los breakpoints de CSS: convenciones, no leyes
Un breakpoint de media query es una anchura de CSS en la que tu diseño cambia. Los valores más usados son 640px, 768px, 1024px y 1280px, y se han mantenido porque corresponden aproximadamente a categorías de dispositivos reales:
| Breakpoint | Ancho CSS | Dispositivo típico objetivo | Cambio de diseño |
|---|---|---|---|
| sm | 640px | Móviles grandes (iPhone 14, Galaxy S23) | Columna simple se ensancha un poco |
| md | 768px | iPads en vertical, tablets pequeñas | Aparece barra lateral o la cuadrícula pasa a dos columnas |
| lg | 1024px | iPad en horizontal, portátiles pequeños | Navegación completa, cuadrícula de tres columnas |
| xl | 1280px | Portátiles y escritorios estándar | Ancho máximo del contenido, relleno amplio |
Estos números son convenciones heredadas de la configuración por defecto de Tailwind, y se ajustan bien a los dispositivos que más gente posee. Pero no los manda ninguna especificación. Tu diseño debe responder al contenido que contiene: si un componente de tarjeta se envuelve mal a 790px, pon tu breakpoint ahí. El propósito de los breakpoints es mantener el contenido legible y el diseño intencional en cada anchura, no dar con números redondos.
/* Mobile-first: los estilos base son para móviles */
.container {
padding: 1rem;
}
/* Tablet en adelante */
@media (min-width: 768px) {
.container {
padding: 2rem;
max-width: 720px;
margin: 0 auto;
}
}
/* Escritorio en adelante */
@media (min-width: 1280px) {
.container {
max-width: 1200px;
}
}Mobile-first: por qué funciona mejor
El enfoque mobile-first escribe el CSS base para pantallas pequeñas y añade complejidad con media queries de min-width a medida que la pantalla crece. La alternativa — desktop-first — empieza con un diseño de ancho completo y usa max-width para eliminar funcionalidades en pantallas más pequeñas. Se prefiere mobile-first porque produce CSS más ligero, más rápido y más fácil de mantener.
La razón principal es la mejora progresiva. Un móvil que carga un Stylesheet mobile-first recibe solo el CSS que necesita: menos reglas de cuadrícula, sin overrides de navegación de escritorio, menos carga de imágenes. Un escritorio que carga el mismo Stylesheet recibe los estilos base más los complementos de media query. Con desktop-first, el móvil tiene que cargar todo el CSS de escritorio y luego cargar reglas adicionales para deshacer lo que no necesita. El resultado: más bytes, renderizado más lento en conexiones lentas y mayor probabilidad de conflictos de especificidad.
También hay una ventaja de depuración: si algo se ve mal a 1440px, sabes exactamente qué media query inspeccionar. Si algo se ve mal a 375px en un enfoque desktop-first, el problema podría estar en los estilos base, el override de 768px, el de 1024px o el de 1280px. Mobile-first significa que las pantallas pequeñas siempre muestran la versión más simple.
px vs rem vs em: cuándo importa cada uno
CSS ofrece tres sistemas de unidades para dimensionar elementos, cada uno con un propósito diferente:
- px (píxeles): Unidades absolutas ligadas a píxeles CSS, no a píxeles de hardware. Úsalos para anchos de borde (1px solid), sombras y todo lo que deba mantenerse del mismo tamaño sin importar la configuración de tamaño de fuente del usuario. No uses px para tamaños de fuente en un diseño responsive — anula el propósito de la tipografía escalable.
- rem (raíz em): Relativo al tamaño de fuente del elemento raíz, que por defecto es 16px en todos los navegadores. Si fijas en tu cabeza que 1rem = 16px, las conversiones son directas: 1.5rem = 24px, 2rem = 32px. Todos los valores rem escalan juntos si cambias el tamaño raíz. Por eso rem es el estándar para tamaños de fuente, rellenos y márgenes responsive en CSS moderno.
- em: Relativo al tamaño de fuente del elemento mismo. El problema: em se compone. Un h2 con font-size: 2em dentro de un padre con 16px base renderiza a 38.4px (16 × 1.2 × 2). Este comportamiento anidado hace que em sea impredecible para espaciado, pero útil para dimensiones que intencionalmente escalan con el texto, como dimensiones de iconos junto a etiquetas.
| Unidad | Referencia | Se compone? | Mejor uso |
|---|---|---|---|
| px | Píxel CSS (absoluto) | No | Bordes, sombras, líneas finas |
| rem | Tamaño de fuente raíz (16px por defecto) | No | Tamaños de fuente, rellenos, márgenes |
| em | Tamaño de fuente padre o propio | Sí | Dimensiones de iconos junto a texto, altura de línea |
Una regla práctica: usa rem para todo lo que deba escalar con el layout general, px para lo que no deba escalar, y em solo cuando quieras que un valor crezca intencionalmente con el texto circundante. Si ves en un diseño responsive que los rellenos saltan inesperadamente entre breakpoints, el culpable casi siempre es espaciado basado em dentro de un cambio de tamaño de fuente.
Errores comunes que rompen el diseño responsive
El diseño responsive parece sencillo hasta que aparecen casos borde. Estos son los errores que atrapan a desarrolladores de todos los niveles de experiencia:
- Anchos fijos en píxeles en contenedores: Poner width: 960px en un contenedor crea un límite duro. En un tablet de 768px el contenedor se desborda y activa scroll horizontal. Usa max-width con valores porcentuales o rem en su lugar — el layout siempre puede encogerse.
- Desbordamiento del scrollbar en 100vw: La unidad
100vwsignifica 100% del ancho del viewport incluyendo cualquier barra de desplazamiento vertical. En una página con contenido desplazable esto causa un desbordamiento horizontal de aproximadamente 15-17px (el ancho del scrollbar). Usa100%en el body o un contenedor en su lugar — excluye la barra de desplazamiento. - Tamaños de fuente demasiado pequeños en móvil: Un body font-size de 14px o 16px se ve bien en escritorio pero puede sentirse apretado en móviles, especialmente para lectura prolongada. La solución no es aumentar el texto del escritorio sino establecer la base móvil un poco más alta (ej. 16-18px) y dejar que los breakpoints de escritorio reduzcan mediante proporciones rem si es necesario. Apple recomienda un mínimo de 11pt (aprox. 14.6px) para legibilidad.
- Imágenes sin restricción de ancho: Una imagen con ancho fijo o sin restricción empuja fuera de su contenedor. Aplica
max-width: 100%; height: auto;a todas las imágenes de contenido para que se encuegan con su padre. - Overflow oculto que enmascara problemas reales: Aplicar
overflow: hiddena un padre para ocultar el scroll horizontal es un parche de síntomas. El diseño sigue roto; simplemente no puedes verlo. Usa el inspector responsive del navegador para encontrar el elemento que causa el desbordamiento.
La trampa de 100vw es el error responsive más común
Los desarrolladores ponen una sección hero a ancho completo con width: 100vw esperando que llene la pantalla. En cualquier página con scrollbar visible, el hero es un poco más ancho que el viewport y genera scroll horizontal. El patrón correcto es usar width: 100% en un contenedor dentro del body, que naturalmente excluye el ancho de la scrollbar.
Cómo testan realmente los desarrolladores el responsive
Probar el diseño responsive requiere simular diferentes tamaños de viewport. Los desarrolladores usan tres enfoques principales:
- Barra de herramientas de dispositivos en DevTools: Chrome, Firefox y Safari todos proporcionan un modo responsive (Ctrl+Shift+M en Chrome) que te permite escribir cualquier anchura y altura de viewport, elegir de presets de dispositivos y alternar la emulación de dispositivos incluyendo eventos táctiles, cadenas de usuario y densidad de píxeles. Es la forma más rápida de atrapar fallos de diseño — redimensiona la anchura y observa dónde salen mal las cosas.
- Dispositivos reales: Los emuladores no son perfectos. El comportamiento táctil, la renderización de fuentes, el momentum de scroll y los teclados virtuales son todos diferentes en hardware real. Probar al menos en un iPhone y un Android atrapa problemas que los emuladores pasan por alto, especialmente alrededor de insets de área segura (notch y esquinas redondeadas) y el scroll elástico de iOS Safari.
- Herramientas de viewport responsive: Herramientas online te muestran qué dimensiones de viewport reporta tu navegador actualmente, las comparan con presets comunes de dispositivos y te ayudan a entender la diferencia entre píxeles CSS y píxeles físicos. Esto es particularmente útil para depurar por qué un diseño se ve correcto en DevTools pero ligeramente diferente en un dispositivo real — la respuesta suele ser el devicePixelRatio.
Testea en cada breakpoint, no solo en los extremos
No solo compruebes 375px y 1440px. La mayoría de fallos de diseño aparecen en los huecos entre breakpoints — a 680px cuando una barra lateral aún no se ha colapsado, o a 900px donde un elemento de la cuadrícula se estira de forma extraña. Redimensiona lentamente por todo el rango y observa los elementos que se desbordan, se superponen o pierden la alineación.
Herramientas de responsive en Convrs
Convrs incluye dos herramientas que te ayudan a entender y probar el comportamiento del viewport: el verificador de pantalla y viewport muestra las dimensiones de viewport en vivo de tu navegador, tu devicePixelRatio y una comparación con presets comunes de dispositivos — útil para entender por qué un diseño se ve diferente en tu máquina que en el móvil de un cliente, y el convertidor px-rem-em traduce instantáneamente entre unidades de píxeles CSS, valores rem y em en cualquier tamaño de fuente raíz. Ambas herramientas funcionan completamente en tu navegador, ningún dato sale de tu dispositivo.