Je travaille sur une application Web d'une seule page, qui sera généralement utilisée sur les appareils mobiles. L'une de ses fonctionnalités est un mode carte, qui occupe temporairement l'intégralité de la fenêtre du navigateur; une échelle de distance et certains contrôles sont attachés aux quatre coins de la carte. Voici une petite capture d'écran de la carte pour que vous puissiez dire de quoi je parle:
La carte est implémentée comme un <div>
avec position: fixed
et les quatre coordonnées zéro; Je mets aussi temporairement le <body>
pour overflow: hidden
alors que la carte est visible pour traiter le cas de l'affichage de l' application sous - jacente étant loin de l'défiler origine. Cela suffit pour que la carte fonctionne exactement comme je le souhaite sur les navigateurs de bureau. Les navigateurs mobiles exigeaient également que je donne une balise meta viewport avec quelque chose comme"width=device-width,user-scalable=no"
pour que la zone visible de la fenêtre corresponde exactement à la fenêtre.
Tout cela a fonctionné à merveille a quelques années lorsque j'ai écrit cette application à l'origine, mais quelque part le long de la ligne, iOS Safari a cessé d'honorer toutes les options de méta-fenêtre impliquant la mise à l'échelle - apparemment, trop de sites ont mal appliqué la balise, ce qui a donné du texte qui était infiniment petit, mais pas zoomable. Actuellement, si vous activez la carte sur ce navigateur, vous obtiendrez probablement une vue légèrement agrandie, qui coupe ces boutons à droite et en bas - et vous ne pouvez rien y faire , car toutes les touches sont interprétées comme des gestes de zoom / panoramique pour la carte, plutôt que de défilement du navigateur. La carte n'est pas terriblement utile sans les fonctionnalités accessibles via ces boutons - et sans le bouton en haut à droite, vous ne pouvez même pas fermer la carte. La seule solution consiste à recharger la page, ce qui peut entraîner la perte de données non enregistrées.
Je vais certainement ajouter l'utilisation de history.pushState
/ onpopstate
pour que la superposition de carte se comporte comme une page distincte. Vous seriez en mesure de sortir du mode carte en utilisant le bouton Précédent du navigateur - mais cela ne résout pas le reste de la perte de fonctionnalité due à des boutons manquants.
J'ai envisagé d'utiliser .requestFullscreen()
pour implémenter la superposition de carte, mais il n'est pas pris en charge partout où l'application serait autrement utilisable. En particulier, cela ne fonctionne apparemment pas du tout sur les iPhones, et sur les iPad, vous obtenez une barre d'état et un énorme bouton `` X '' superposant votre contenu - mon échelle de distance ne serait probablement plus lisible. Ce n'est pas sémantiquement ce que je veux vraiment, de toute façon - j'ai besoin de la fenêtre complète , pas du plein écran.
Comment obtenir un affichage plein écran sur des navigateurs modernes? Toutes les informations que je peux trouver sur le sujet parlent de l'utilisation de la balise meta viewport, mais comme je l'ai mentionné, cela ne fonctionne plus.
la source
Réponses:
Solution
Réglez la hauteur du div en plein écran sur
window.innerHeight
avec JavaScript, puis mettez-la à jour lors du redimensionnement de la fenêtre.Même problème ici:
https://stackoverflow.com/a/37113430/8662476
Plus d'informations:
la source
Vous devez définir la hauteur du corps et du code HTML à 100%
la source
Les avez-vous essayés?
la source
vw
sur la largeur, pasvh
...) À quel élément proposez-vous que j'ajoute cela? Je l'ai essayé à plusieurs endroits (<html>
,<body>
et sur la carte<div>
), mais je n'ai vu aucune différence.essaye ça:
la source
shrink-to-fit=yes
c'est la valeur par défaut, et Safari ne prête plus attention aux options de mise à l'échelle.Comme je ne peux pas commenter, je voudrais ajouter que vous devriez vérifier si votre balise body est à la hauteur du navigateur. Vous pouvez également vérifier ceci: Chrome / Safari ne remplit pas 100% de la hauteur du parent flexible
la source
Il s'agit d'une ancienne solution qui résout un problème étroitement lié, mais pas exactement le même, donc je ne sais pas si elle s'applique: https://github.com/gajus/brim
C'est censé être une solution similaire à minimal-ui.
Voici une autre question qui fait référence à cette réponse: iOS 8 a supprimé la propriété de fenêtre "minimal-ui", existe-t-il d'autres solutions "soft fullscreen"?
Faites-moi savoir si cela aide du tout.
la source
Essayez le code suivant pour div
la source
si vous utilisez, utilisez
position: fixed
simplement la méthode CSS standard qui existe depuis de nombreuses années.Cela ne fera que redimensionner automatiquement la div à la taille complète de la fenêtre, et en utilisant la propriété fixe, elle est verrouillée en place, peu importe combien ils défilent, vous pouvez désactiver le défilement du corps si vous en avez besoin avec
donc si vous ajoutez simplement la classe noScroll à la balise html, cela désactivera le défilement. puis, lorsque vous souhaitez autoriser à nouveau le défilement, vous pouvez.
la source
Vous pouvez l'implémenter en utilisant une structure à deux couches pour vos contrôles de carte et votre couche de carte. Cela signifie que vous n'avez réellement besoin d'aucun
javascript
pour implémenter ce que vous voulez (bien qu'aucun exemple de codage n'ait été donné dans la question). Vous pouvez manipuler la fenêtre d'affichage avecCSS
et c'est la signification réelle devw
etvh
afin de répondre à votre commentaire Comment 100vw / 100vh est-il censé aider? , cela peut aider carv
représente la fenêtre d'affichage.Voir l'extrait par exemple.
PS: la couche de la carte est simulée par une image zoomée en défilement.
la source