¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Fundamentos de la web móvil

Aquí está la lección completa para leer. Crea una cuenta gratuita para practicarla en un laboratorio en vivo.

Laboratorio de contenedores13 min de lectura7 comandos

¿Por qué la página se ve diminuta en mi móvil?

Seguro que has abierto una página web en el móvil y has tenido que pellizcar y ampliar para leer una sola línea. La página estaba hecha para una pantalla ancha y el móvil la dibujó pequeña. Unas pocas líneas de código le dicen al móvil cómo dibujarla bien, y esta lección las examina.

Al terminar esta lección

Nota

Puedo encontrar las partes de una página web que hacen que funcione en un móvil.

Palabras clave

  • Viewport (área de visualización): la parte de la pantalla en la que se dibuja la página.
  • Adaptable (responsive): un diseño que cambia según el ancho de la pantalla.
  • Media query: una regla de CSS que solo se aplica cuando se cumple una condición, por ejemplo un ancho mínimo.
  • Manifiesto: un archivo pequeño que le dice al móvil el nombre, los iconos y los colores de una aplicación web.
  • Service worker: un script que el navegador conserva y que puede responder a peticiones con una copia guardada.
  • Caché: un almacén de copias guardadas de archivos.

Para empezar: lo que ya sabes

Nota

Responde mentalmente. 1. ¿Para qué sirve el CSS en una página web? 2. ¿Un dedo es más grande o más pequeño que un puntero de ratón? 3. ¿Qué le pasa a una página web cuando no hay red? Respuestas: define el aspecto de la página; más grande; normalmente no carga, que es el problema que resuelve el último paso.

Antes de empezar

Nota

Pulsa Iniciar el laboratorio en la barra de arriba de la lección y espera a que diga que está en marcha. Hay un solo contenedor, jupyter, y el terminal llega a su Python con docker exec jupyter, que ejecuta una orden dentro de él. El enlace JupyterLab abre su página web, en el puerto 8888, y el enlace Preview (vista previa) muestra el registro de hábitos, en el puerto 8000. Cada botón Ejecutar de abajo escribe su orden en el terminal de tu laboratorio, una detrás de otra en la misma sesión. Para verlas o escribir las tuyas, pulsa Abrir terminal (pestaña nueva) en la barra.

La aplicación web es una carpeta, y un servidor pequeño la muestra

ls app lista la aplicación web: una página, sus estilos, su script, un manifiesto, un service worker y dos iconos. El segundo script le pide tres de ellos al servidor de vista previa y muestra la respuesta. Cada uno responde 200, que significa que se encontró, y el manifiesto tiene su propio tipo, application/manifest+json. Ahora abre el enlace Preview en tu navegador, estrecha la ventana y mira cómo cambia el diseño.

Comando
docker exec jupyter ls app

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comando
docker exec jupyter python3 steps/serve.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

La etiqueta viewport le dice al móvil qué ancho usar

El script lee index.html y busca una etiqueta meta llamada viewport. La encuentra, con width=device-width, initial-scale=1: dibujar la página tan ancha como la pantalla, a tamaño normal. Pruébalo: borra esa línea en JupyterLab, guarda, vuelve a ejecutar el script y dirá MISSING (falta). Un móvil dibujaría entonces la página como si la pantalla fuera mucho más ancha y la encogería.

Comando
docker exec jupyter python3 steps/viewport.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Los puntos de ruptura cambian el diseño a un ancho dado

La hoja de estilos es primero móvil: las reglas simples son las del móvil, y las media queries añaden reglas a medida que la pantalla se ensancha. El script encuentra tres. Dos son anchos, 600 px y 900 px, y la tercera no es un ancho sino una preferencia por el modo oscuro. Ensancha la ventana de tu navegador por encima de 600 px y el formulario se pone en una fila. Por encima de 900 px, la lista pasa a dos columnas.

Comando
docker exec jupyter python3 steps/breakpoints.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un pulgar necesita espacio

La yema de un dedo cubre mucho más que un puntero de ratón y tapa lo que pulsa. Este laboratorio usa 44 píxeles como la línea que debe alcanzar un botón. El script lista cada tamaño de la hoja de estilos: el botón Add (Añadir) mide 32 px de alto, los botones de filtro 36 px y el botón redondo de «hecho» 30 por 30, así que cuatro tamaños están por debajo de 44. Son un poco pequeños a propósito, y arreglarlos es tu tarea.

Comando
docker exec jupyter python3 steps/touch.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Comprueba

Consejo

¿Qué punto de ruptura pasa la lista a dos columnas, y cuántos tamaños están por debajo de 44 píxeles? Respuesta: 900 px, y cuatro.

Un manifiesto permite que el móvil trate la página como una aplicación

El manifiesto es un archivo JSON. El script comprueba siete campos. Seis están presentes: el nombre, un nombre corto para debajo del icono, la página que se abre primero, cómo mostrarla (standalone, es decir, sin las barras del navegador), los iconos y el color de la barra superior. Uno está MISSING (falta), background_color, el color que se ve mientras arranca la aplicación. Los dos archivos de icono existen. Que un móvil ofrezca instalar la aplicación depende del navegador, así que busca la opción en el menú de tu propio navegador.

Comando
docker exec jupyter python3 steps/manifest.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un service worker permite abrir la aplicación sin red

El service worker nombra una caché, habits-v1, y una lista de ocho archivos que guardar al instalarse. El script comprueba que cada uno exista, y siete existen. El octavo, /offline.html, no existe. Es un fallo real: si un solo archivo de la lista no se puede guardar, toda la instalación falla y nada funciona sin conexión. Un navegador solo permite service workers en una dirección segura, así que puede rechazar este en el enlace de vista previa: la consola de tu navegador lo dice.

Comando
docker exec jupyter python3 steps/offline.py

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error frecuente

Advertencia

Mucha gente piensa que si una página se ve bien en una ventana estrecha del ordenador, funciona en un móvil. Una ventana estrecha muestra solo el diseño. No muestra lo grande que es un pulgar, lo lenta que es una red móvil ni lo que hace el navegador del móvil. Usa la ventana estrecha para comprobar el diseño y luego abre la página en un móvil real si puedes.

Una aplicación web móvil frente a una aplicación nativa

Una aplicación nativa se crea para un solo sistema de móvil y se instala desde una tienda. Una aplicación web móvil es una página web. Tiene un solo código para todos los móviles, se actualiza en cuanto cambias los archivos y un enlace la abre. Puede guardar datos en el móvil, funcionar sin conexión con un service worker y, en muchos navegadores, añadirse a la pantalla de inicio. Llega menos al móvil: lo que puede usar, como las notificaciones o trabajar en segundo plano, depende del navegador y del móvil, y el navegador puede borrar sus datos. Elegir entre las dos es un equilibrio, no una competición.

Comprobación final

Consejo

Responde sin mirar atrás. 1. ¿Qué etiqueta le dice al móvil que dibuje la página tan ancha como la pantalla? 2. ¿Qué significa primero móvil? 3. ¿Qué archivo da a una aplicación su nombre y sus iconos? 4. ¿Por qué un service worker no se instalaría si falta un archivo de la lista? Respuestas: la etiqueta meta viewport; las reglas simples son para el móvil y las media queries añaden más para pantallas anchas; el manifiesto; la lista se guarda de una vez, así que un solo fallo detiene toda la instalación.

Para docentes

Consejo

Esta lección es un pequeño ejemplo de una lección trabajada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia de cada estudiante. El laboratorio es un solo servicio, JupyterLab, con un segundo puerto que muestra la aplicación web del estudiante, y nada aquí se corrige solo: el estudiante entrega app/style.css con los botones pequeños llevados a 44 píxeles como mínimo, y una frase sobre lo que cambió y cómo lo comprobó en su navegador. Puntos clave: 1. La etiqueta viewport hace adaptable una página en el móvil. 2. Un CSS primero móvil añade media queries a medida que la pantalla se ensancha. 3. Un manifiesto y un service worker hacen una aplicación web instalable y que funciona sin conexión. Error frecuente: fiarse de una ventana estrecha del ordenador como prueba en el móvil. Material: el laboratorio, un navegador y, si es posible, un móvil. Consejo: pida al alumnado que prediga cada resultado antes de pulsar Ejecutar. Los archivos se escriben a partir de un texto fijo, así que cada copia muestra lo mismo. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del constructor de lecciones.

Sobre este laboratorio y su código: Laboratorio de web móvil: una aplicación web adaptable e instalable para construir en el navegador

¿Enseñas a una clase? Asigna estas lecciones a tus estudiantes con calificación y un laboratorio para cada uno.