Guía de migración de Chrome en Android de borde a borde

Publicado: 28 de febrero de 2025

De borde a borde es una función de Android que permite que las aplicaciones abarquen todo el ancho y el alto de la pantalla dibujando detrás de las barras del sistema de Android.

Antes de Chrome 135, Chrome en Android no se renderizaba de borde a borde. En esta guía, se explica el efecto que tiene este cambio en los sitios web y lo que puedes hacer como desarrollador para adoptarlo.

Barras en todas partes

Android incluye barras del sistema que proporciona el propio sistema operativo.

En conjunto, la barra de estado, la barra de subtítulos y la barra de navegación se denominan barras del sistema. Muestran información importante, como el nivel de batería, la hora y las alertas de notificaciones, y proporcionan interacción directa con el dispositivo desde cualquier lugar.

En la parte superior de la pantalla, se encuentra la barra de estado, que contiene íconos de notificaciones y del sistema.

Ilustración de la parte superior de un dispositivo Android con la barra del sistema destacada.
La barra de estado en Android destacada (fuente).

En la parte inferior de la pantalla, puedes encontrar la barra de navegación, que te permite controlar la navegación con los controles Atrás, Inicio y Descripción general. Puede ser la navegación clásica de tres botones o la barra de navegación por gestos moderna.

Ilustración de la parte inferior de un dispositivo Android con la barra de navegación por gestos visible.
La barra de navegación por gestos (fuente).

Además de las barras del sistema de Android, Chrome incluye una barra de direcciones que se expande y se contrae de forma dinámica a medida que te desplazas.

Chrome se muestra de borde a borde

Cuando visitas un sitio web, este se presenta en un rectángulo conocido como el viewport (de diseño).

En Chrome para Android, antes de Chrome 135, ese viewport de diseño se dibuja entre la barra de estado superior y la barra de navegación por gestos inferior. La presencia de la barra de direcciones de Chrome (o la falta de ella) puede afectar el tamaño del viewport, pero este nunca se expandirá a la barra superior del sistema ni a la barra de navegación por gestos inferior.

Ilustraciones de un dispositivo Android con Chrome en Android que no es de borde a borde. La ilustración de la izquierda muestra Chrome con la barra de direcciones expandida. Entre la barra de direcciones y la barra de navegación por gestos, hay un cuadro resaltado en verde cuyo tamaño es de 100svh. La ilustración de la derecha muestra Chrome con la barra de direcciones contraída. Entre la barra de estado y la barra de navegación por gestos, hay un cuadro destacado en verde cuyo tamaño es de 100 lvh. El viewport en sí tiene un contorno azul punteado.
El tamaño mínimo y máximo del viewport en Chrome para Android antes de Chrome 135. Estos tamaños se conocen como viewport pequeño y grande. El viewport en sí tiene un contorno azul punteado.

A partir de Chrome 135, se permite que el viewport se extienda a la barra de navegación por gestos de Android. Este es el comportamiento que se describe como borde a borde.

Ilustraciones del viewport en Chrome para Android que no es de borde a borde (a la izquierda) y en Chrome para Android que es de borde a borde (a la derecha). Cada visualización tiene un cuadro azul que representa un elemento con un tamaño de 100vh de altura. El texto de la izquierda aclara lo que sucede cuando el Chrome no es de borde a borde. Dice "El viewport permanece fijo entre la barra de estado superior y la barra de navegación por gestos inferior". El texto de la derecha aclara lo que sucede cuando la interfaz de Chrome se muestra de borde a borde. Dice "El viewport se extiende hasta la barra de navegación por gestos".
El viewport grande que se muestra en Chrome para Android que no es de borde a borde (izquierda) y en Chrome que es de borde a borde (derecha). En Chrome con compatibilidad de borde a borde, el viewport se extiende al área de la barra de navegación por gestos cuando se retraen las barras de herramientas dinámicas de Chrome.

Comportamiento de Chrome sin el modo de borde a borde

En la siguiente grabación, se muestra Chrome en Android sin compatibilidad con el modo de borde a borde. La barra de direcciones de Chrome (en la parte superior) se quita de forma dinámica a medida que se desplaza la página. Sin embargo, la barra de estado superior nativa de Android y la barra de navegación nativa de Android en la parte inferior permanecen fijas en su lugar.

Comportamiento anterior: Chrome en Android sin compatibilidad con el modo de borde a borde y con https://developer.chrome.com/ cargado.

Aquí, el tamaño del viewport de diseño cambia a medida que la barra de direcciones de Chrome se retrae o se expande.

Comportamiento de Chrome con el diseño de borde a borde

A partir de Chrome 135, Chrome puede dibujar contenido web hasta el borde inferior del dispositivo extendiendo el viewport al área de la barra de navegación por gestos.

Diseño dinámico de borde a borde con "el mentón"

De forma predeterminada, el modo de pantalla completa de Chrome muestra una nueva barra inferior dinámica conocida como "la barra inferior" sobre el área de la barra de navegación por gestos. Al igual que la barra de direcciones de Chrome, esta barra inferior se desplaza cuando comienzas a desplazarte y afecta el tamaño de la ventana de visualización.

En la siguiente grabación de Chrome en Android con compatibilidad de borde a borde, tanto la barra de direcciones de Chrome como la barra inferior se retraen de forma dinámica a medida que se desplaza la página hacia abajo. Esto hace que el viewport se expanda, lo que permite que el contenido web se dibuje hasta el borde inferior del dispositivo.

Comportamiento nuevo: Chrome en Android con compatibilidad de borde a borde y https://developer.chrome.com/ cargado. Observa cómo la barra inferior se desliza fuera de la vista a medida que se desplaza la página.

Este comportamiento de la barra inferior es el nuevo comportamiento predeterminado de Chrome a partir de Chrome 135.

Habilitación del formato de borde a borde de forma predeterminada con una opción de habilitación

Los sitios web que se crearon para el diseño de borde a borde pueden indicarlo modificando la metaetiqueta viewport. Cuando se habilita, el viewport se extiende hasta el borde inferior de forma predeterminada sin que se vea el marco inferior.

Nuevo comportamiento con la habilitación de borde a borde: El viewport se extiende hasta el borde inferior cuando se carga la página. No hay mentón.

Una página puede indicar que admite el modo de borde a borde con la metaetiqueta viewport y su clave viewport-fit.

Para habilitar el diseño de borde a borde, establece viewport-fit en el valor de cover.

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />

Obtén más información sobre los distintos valores de viewport-fit en MDN.

Cómo lidiar con el contenido que podría quedar obstruido por la barra de navegación por gestos

En el modo de borde a borde, debes tener en cuenta cualquier contenido que pueda quedar obstruido por la barra de navegación por gestos.

En la mayoría de los casos, no necesitarás hacer nada porque la barra inferior se aparta por sí sola. Los usuarios aún pueden acceder a todo el contenido de tu sitio web como lo hacían antes.

Sin embargo, si habilitas la opción de ir de borde a borde de forma predeterminada o tienes un elemento que se encuentra en la parte inferior del viewport, es posible que debas tener en cuenta que ese contenido podría estar cubierto.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
}

Cuando la barra inferior esté presente, los usuarios podrán acceder al contenido inicialmente, pero la barra de navegación de Android lo obstruirá a medida que desaparezca.

Ilustraciones de un dispositivo Android con Chrome en Android que es de borde a borde. En la ilustración de la izquierda, se muestra Chrome con la barra inferior visible. El contenido fijado en la parte inferior (que se muestra en rojo) se ubica justo encima de ella. En la ilustración de la derecha, se muestra Chrome con el marco inferior oculto. Allí, el contenido fijado en la parte inferior se ubica contra el borde inferior del dispositivo. El texto que lo acompaña aclara que la barra de navegación por gestos ahora obstruye el contenido ubicado en la parte inferior.
Ilustración de un sitio web con un elemento posicionado en la parte inferior con `bottom: 0`. Cuando la barra inferior es visible, el elemento posicionado en la parte inferior se encuentra por encima de la barra de navegación de Android. Cuando el mentón se aleja, el elemento se coloca detrás de la barra de navegación de Android, lo que lo oculta parcialmente en ese punto.

Para mitigar este problema, usa las inserciones de área segura para colocar siempre los elementos afectados por encima de la barra de navegación por gestos inferior nativa de Android o para que su fondo se extienda a esa área.

Los márgenes del área segura

Las inserciones de área segura son cuatro variables de entorno que definen un rectángulo por sus inserciones superior, derecha, inferior e izquierda desde el borde de la ventana de visualización.

Combinados, estos cuatro valores forman el rectángulo del área segura en el que se puede colocar contenido de forma segura para que no se vea obstruido por elementos como la barra de navegación por gestos de Android.

Ilustración de un dispositivo Android con Chrome en modo de borde a borde. La parte inferior tiene una vista deslizable. Dentro de Chrome, se muestra el rectángulo del área segura, pintado de amarillo. Su borde inferior se ubica justo encima de la barra de navegación por gestos. En la barra de navegación por gestos, se pinta la parte inferior del viewport, en azul. El texto que lo acompaña indica que el rectángulo del área segura se inserta en el viewport con el valor safe-area-bottom-inset, lo que evita que el contenido se dibuje debajo de la barra de navegación por gestos.
Ilustración de Chrome en modo de pantalla completa con el viewport y el rectángulo del área segura pintados de amarillo. Como el mentón está retraído, el recuadro inferior del área segura evita que el rectángulo del área segura llegue a la barra de navegación por gestos. Como resultado, verás que el viewport se asoma por debajo de esa barra de navegación por gestos.

Usa el margen inferior del área segura

En el caso de los elementos que se posicionan en la parte inferior del viewport, usa safe-area-inset-bottom como el valor de la propiedad bottom para evitar que se posicionen debajo de la barra de navegación por gestos. El valor que devuelve safe-area-inset-bottom se actualiza de forma dinámica a medida que se mueve el mentón, lo que hace que los elementos ubicados en la parte inferior permanezcan por encima de la barra de navegación por gestos de Android.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: env(safe-area-inset-bottom, 0px);
}
Ilustración de un dispositivo Android con Chrome en modo de borde a borde. En la visualización de la izquierda, se puede ver la barra inferior y el contenido fijado en la parte inferior se encuentra justo encima de ella. En la visualización de la derecha, la barra inferior no es visible y el contenido fijado en la parte inferior se ubica en el mismo lugar que el de la izquierda. Esto hace que el contenido normal sea visible desde debajo de la barra de navegación por gestos.
Ilustraciones de un sitio web con un elemento ubicado en la parte inferior que usa el margen de área segura inferior con la propiedad bottom. Cuando la barra inferior es visible, la barra se ubica sobre la barra de navegación por gestos de Android. Cuando desaparece el borde inferior, el elemento también se ubica por encima de él.

Como puedes ver en las ilustraciones, el resultado aún no es perfecto: cuando se quita la barra inferior, el resto del contenido de la página se vuelve visible en el área de la barra de navegación por gestos. Esto se debe a que, en este estado, el viewport se extiende al área de la barra de navegación por gestos.

Para evitar que el contenido se dibuje debajo del contenido fijado en la parte inferior, un enfoque de uso frecuente es establecer el padding-bottom en el safe-area-inset-bottom. De esa manera, el elemento fijado en la parte inferior crece automáticamente a medida que se oculta la barra inferior. Si bien esto funciona, no se recomienda este enfoque, ya que genera una sobrecarga de diseño mientras se mueve la barra inferior.

No establezcas el padding en un valor de inserción de área segura.

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
  padding-bottom: env(safe-area-inset-bottom, 0px); /* 🛑 Don't do this, as it causes layout thrashing. */
}

Usa el margen inferior del área segura y el margen inferior máximo del área segura

En cambio, el enfoque recomendado es usar una combinación de safe-area-inset-bottom y safe-area-max-inset-bottom. A diferencia del safe-area-inset-bottom dinámico, que se actualiza de forma dinámica a medida que se mueve la barra inferior, el safe-area-max-inset-bottom representa el valor máximo del safe-area-inset-bottom.

Usa este safe-area-max-inset-bottom para aumentar el tamaño del elemento anclado en la parte inferior y combínalo con safe-area-inset-bottom para bajar el elemento de modo que quede detrás de la barbilla.

Usa safe-area-max-inset-bottom junto con safe-area-inset-bottom.

:root {
  --safe-area-max-inset-bottom: env(safe-area-max-inset-bottom, 36px);
  --bottom-bar-height: 50px;
}

.stuck-to-the-bottom-of-the-viewport {
  position: fixed;
  bottom: 0;
  height: var(--bottom-bar-height);
  padding-bottom: var(--safe-area-max-inset-bottom);
  bottom: calc(env(safe-area-inset-bottom, 0px) - var(--safe-area-max-inset-bottom));
}

body {
  padding-bottom: calc(var(--bottom-bar-height) + var(--safe-area-max-inset-bottom));
}

Prueba una demostración en vivo

El resultado visual es el mismo que el del enfoque de padding-bottom: env(safe-area-inset-bottom, 0px);, pero tiene un rendimiento mucho mejor. Como solo debe cambiar el valor calculado para bottom a medida que se aleja la barra inferior, no se produce una destrucción del diseño.

Ilustración de un dispositivo Android con Chrome en modo de borde a borde. En la visualización de la izquierda, se puede ver la barra inferior y el contenido fijado en la parte inferior se encuentra justo encima de ella. En la visualización de la derecha, el marco inferior no es visible y el contenido fijado en la parte inferior creció visualmente para ocupar el espacio donde estaba originalmente el marco inferior. Esto genera un buen efecto visual y evita que el contenido normal de la página se vuelva visible desde debajo del área de la barra de navegación por gestos.
Ilustraciones de un sitio web con un elemento fijado en la parte inferior que tiene en cuenta las inserciones del área segura. Cuando el borde inferior es visible (izquierda), el elemento se ubica sobre él. Cuando la barra inferior no está visible, el elemento se extiende visualmente hasta la barra de navegación por gestos de Android.

Prueba el diseño de borde a borde antes de Chrome 135

Para probar el diseño de borde a borde antes de su lanzamiento estable público, debes habilitar varias marcas de funciones de Chrome a través de chrome://flags:

  • EdgeToEdgeBottomChin (si lo configuras como "Enabled Debug", la mitad de la barra inferior se coloreará de rosa para distinguirla con mayor claridad de otros elementos de la IU)
  • DrawCutOutEdgeToEdge
  • BottomBrowserControlsRefactor (no lo configures como "Enabled", sino como "Enabled Dispatch yOffset")
  • DynamicSafeAreaInsets
  • DynamicSafeAreaInsetsOnScroll
  • EdgeToEdgeWebOptIn
  • DrawKeyNativeEdgeToEdge
  • EdgeToEdgeSafeAreaConstraint (no lo configures como "Habilitado", sino como "Habilitado con variación desplazable")

Asegúrate de que las siguientes marcas no estén habilitadas:

  • DrawNativeEdgeToEdge
  • EdgeToEdgeEverywhere

Reinicia Chrome dos veces.

Deseamos obtener sus comentarios

Si tienes comentarios sobre Chrome y su implementación de borde a borde, comunícate con nosotros enviando un error de Chromium en el componente "IU > Navegador > Dispositivos móviles > EdgeToEdge". Agradecemos tus comentarios.