Estoy trabajando en una aplicación web de una sola página, que generalmente se usará en dispositivos móviles. Una de sus características es un modo de mapa, que ocupa temporalmente toda la ventana del navegador; una escala de distancia y algunos controles están unidos a las cuatro esquinas del mapa. Aquí hay una pequeña captura de pantalla del mapa para que pueda decir de qué estoy hablando:
El mapa se implementa como un <div>
con position: fixed
y las cuatro coordenadas cero; Asimismo, establecer temporalmente el <body>
que overflow: hidden
mientras que el mapa es visible para manejar el caso de la pantalla de la aplicación subyacente que se está desplazado lejos del origen. Eso es suficiente para que el mapa funcione exactamente como quiero en los navegadores de escritorio. Los navegadores móviles también requieren que le dé una etiqueta de meta viewport con algo así "width=device-width,user-scalable=no"
para que el área visible de la ventana se corresponda exactamente con la ventana gráfica.
Todo esto funcionó maravillosamente hace unos años cuando originalmente escribí esta aplicación, pero en algún punto de la línea iOS Safari dejó de honrar cualquiera de las opciones de meta viewport que implican escalado, aparentemente muchos sitios estaban aplicando mal la etiqueta, lo que resultó en un texto que era indescifrablemente pequeño, pero inzoomable Actualmente, si habilita el mapa en este navegador, es probable que obtenga una vista ligeramente ampliada, que corta esos botones a la derecha e inferior, y no puede hacer nada al respecto, porque todos los toques se interpretan como gestos de zoom / panorámica para el mapa, en lugar de desplazarse por el navegador. El mapa no es terriblemente útil sin las funciones a las que se accede a través de esos botones, y sin el botón superior derecho, ni siquiera se puede cerrar el mapa. La única salida es volver a cargar la página, lo que puede provocar la pérdida de datos no guardados.
Definitivamente voy a agregar el uso de history.pushState
/ onpopstate
para que la superposición del mapa se comporte como una página separada. Podrá salir del modo de mapa utilizando el botón Atrás del navegador, pero eso no soluciona el resto de la pérdida de la funcionalidad debido a la falta de botones.
He considerado usarlo .requestFullscreen()
para implementar la superposición del mapa, pero no es compatible en todas partes donde la aplicación sería utilizable. En particular, aparentemente no funciona en absoluto en iPhones, y en iPads obtienes una barra de estado y un enorme botón 'X' que superpone tu contenido; mi escala de distancia probablemente ya no sea legible. De todos modos, no es semánticamente lo que realmente quiero: necesito la ventana completa , no la pantalla completa.
¿Cómo hago para que una pantalla completa funcione en navegadores modernos? Toda la información que puedo encontrar sobre el tema habla sobre el uso de la etiqueta meta viewport, pero como mencioné, ya no funciona.
fuente
Respuestas:
Solución
Establezca la altura del div de pantalla completa en
window.innerHeight
JavaScript y luego actualícela en los tamaños de ventana.El mismo problema aqui:
https://stackoverflow.com/a/37113430/8662476
Más información:
fuente
Debe establecer la altura del cuerpo y del html al 100%
fuente
¿Has probado estos?
fuente
vw
al ancho, no avh
...) ¿A qué elemento sugieres que agregue esto? Lo probé en varios lugares (<html>
,<body>
y el mapa<div>
), pero no vi diferencias.prueba esto:
fuente
shrink-to-fit=yes
es el valor predeterminado, y Safari ya no presta atención a las opciones de escala.Como no puedo comentar, me gustaría agregar que debe verificar si la etiqueta de su cuerpo es la altura del navegador. También es posible que desee verificar esto: Chrome / Safari no llena el 100% de la altura del padre flexible
fuente
Esta es una solución antigua y aborda un problema que está estrechamente relacionado, pero no es exactamente el mismo, por lo que no estoy seguro de si se aplica: https://github.com/gajus/brim
Se supone que es una solución similar a minimal-ui.
Aquí hay otra pregunta que hace referencia a esta respuesta: iOS 8 eliminó la propiedad de ventana gráfica "minimal-ui", ¿hay otras soluciones de "pantalla completa suave"?
Avísame si esto te ayuda.
fuente
Pruebe el siguiente código para div
fuente
si usa
position: fixed
solo el método CSS estándar que ha existido durante muchos años.Esto solo hará que el tamaño automático div se ajuste al tamaño completo de la ventana gráfica, y al usar la posición fija, se bloquea en su lugar, no importa cuánto se desplace, puede deshabilitar el desplazamiento del cuerpo si lo necesita con
así que si solo agrega la clase noScroll a la etiqueta html, deshabilitará el desplazamiento. entonces, cuando desee permitir el desplazamiento nuevamente, puede hacerlo.
fuente
Puede implementar esto usando una estructura de dos capas para sus controles de mapa y su capa de mapa. Lo que significa que en realidad no necesita ninguno
javascript
para implementar lo que desea (aunque no se proporcionó ningún ejemplo de codificación en la pregunta). Puede manipular viewportCSS
y ese es el significado real devw
yvh
para responder a su comentario ¿Cómo se supone que ayuda 100vw / 100vh? , puede ayudar ya quev
significa viewport.Ver el fragmento por ejemplo.
PD: la capa del mapa es simulada por una imagen que se amplía en el desplazamiento.
fuente