Estou trabalhando em um aplicativo Web de página única, que normalmente será usado em dispositivos móveis. Um de seus recursos é o modo de mapa, que assume temporariamente a janela inteira do navegador; uma escala de distância e alguns controles são anexados aos quatro cantos do mapa. Aqui está uma pequena captura de tela do mapa para que você possa dizer do que estou falando:
O mapa é implementado como um <div>
com position: fixed
e todas as quatro coordenadas zero; Eu também definir temporariamente a <body>
para overflow: hidden
enquanto o mapa é visível para lidar com o caso do visor aplicativo subjacente sendo rolada para longe da origem. Isso é suficiente para fazer o mapa funcionar exatamente como eu quero nos navegadores de desktop. Os navegadores móveis também exigem que eu forneça uma tag de meta viewport com algo parecido "width=device-width,user-scalable=no"
para fazer com que a área visível da janela corresponda exatamente à viewport.
Tudo funcionou lindamente alguns anos atrás quando eu escrevi esse aplicativo, mas em algum momento o iOS Safari parou de honrar qualquer uma das opções de meta viewport que envolviam o dimensionamento - aparentemente muitos sites estavam aplicando mal a tag, resultando em um texto incrivelmente pequeno, ainda que não seja sustentável. Atualmente, se você ativar o mapa neste navegador, é provável que você tenha uma visualização levemente ampliada, que corta esses botões à direita e na parte inferior - e você não pode fazer nada a respeito, porque todos os toques são interpretados como gestos de zoom / panorâmica para o mapa, em vez de rolagem do navegador. O mapa não é muito útil sem os recursos acessados por esses botões - e sem o botão superior direito, você não pode nem fechar o mapa. A única saída é recarregar a página, o que pode resultar na perda de dados não salvos.
Definitivamente vou adicionar o uso de history.pushState
/ onpopstate
para que a sobreposição do mapa se comporte como uma página separada. Você seria capaz de sair do modo de mapa usando o botão Voltar do navegador - mas isso não soluciona o restante da perda da funcionalidade devido à falta de botões.
Eu considerei usar .requestFullscreen()
para implementar a sobreposição de mapa, mas não há suporte em todos os lugares que o aplicativo possa ser usado. Aparentemente, ele aparentemente não funciona em iPhones, e nos iPads você recebe uma barra de status e um enorme botão 'X' sobrepondo seu conteúdo - minha escala de distância provavelmente não seria mais legível. De qualquer maneira, não é semanticamente o que realmente quero - preciso da janela inteira , não da tela cheia.
Como obtenho uma exibição em janela cheia trabalhando em navegadores modernos? Todas as informações que posso encontrar sobre o assunto falam sobre o uso da tag meta viewport, mas como mencionei, isso não funciona mais.
fonte
Respostas:
Solução
Defina a altura da div em tela cheia
window.innerHeight
como JavaScript e atualize-a no redimensionamento da janela.Mesmo problema aqui:
https://stackoverflow.com/a/37113430/8662476
Mais informações:
fonte
Você precisa definir a altura do corpo e do html para 100%
fonte
Você já tentou isso?
fonte
vw
a largura, nãovh
...) A que elemento você está sugerindo que eu adicione isso? Eu tentei-o em vários lugares (<html>
,<body>
e o mapa<div>
), mas não viu nenhuma diferença.tente isto:
fonte
shrink-to-fit=yes
é o padrão, e o Safari não presta mais atenção às opções de dimensionamento.Como não posso comentar, gostaria de acrescentar que você deve verificar se a etiqueta do seu corpo está na altura do navegador. Você também pode verificar isso: Chrome / Safari não preenche 100% da altura do pai flexível
fonte
Esta é uma solução antiga e soluciona um problema estreitamente vinculado, mas não exatamente o mesmo, por isso não tenho certeza se ela se aplica: https://github.com/gajus/brim
Supõe-se que seja uma solução semelhante ao minimal-ui.
Aqui está outra pergunta que faz referência a essa resposta: O iOS 8 removeu a propriedade de janela de visualização "minimal-ui", existem outras soluções "soft fullscreen"?
Deixe-me saber se isso ajuda em tudo.
fonte
Tente seguir o código para div
fonte
se você estiver usando,
position: fixed
use o método CSS padrão que existe há muitos anos.Isso apenas fará com que o div seja dimensionado automaticamente para o tamanho total da janela de visualização e, usando a posse fixa, ela esteja bloqueada no lugar, não importa o quanto eles rolem, você pode desativar a rolagem do corpo se precisar
portanto, se você adicionar a classe noScroll à tag html, ela desabilitará a rolagem. quando você quiser permitir a rolagem novamente, poderá.
fonte
Você pode implementar isso usando uma estrutura de duas camadas para seus controles de mapa e sua camada de mapa. Significando que você realmente não precisa de nenhum
javascript
para implementar o que deseja (embora nenhum exemplo de codificação tenha sido dado na pergunta). Você pode manipular a viewport comCSS
e esse é o significado real devw
evh
para responder seu comentário Como é que 100vw / 100vh deve ajudar? , pode ajudar, poisv
significa viewport.Veja o trecho, por exemplo.
PS: a camada do mapa é simulada por uma imagem que é ampliada na rolagem.
fonte