Les problèmes d'échelle provoquent un zoom sur l'entrée
Il est très difficile de dimensionner le contenu pour différentes résolutions et tailles d'écran, ce qui est finalement la cause de ce problème de zoom.
La plupart des navigateurs mobiles ont un déclencheur sur le focus de l'entrée (que vous ne pouvez pas contourner sans difficulté) :
if (zoom-level < 1)
zoom to 1.5
center focused input relative to screen
*Oui, c'était bien trop simplifié.
Le mythe de l'échelle des métabalises est corrigé.
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
Tous ces paramètres d'affichage ne sera pas empêcher le zoom de l'input-focus si vous êtes en zoom arrière. Elles ne remplaceront pas non plus tout autre formatage html, body ou élément qui pousserait la fenêtre à une largeur supérieure à celle de l'écran.
Cause principale
Utilisation d'une fenêtre ou d'un corps plus grand que les dimensions de l'écran de l'appareil.
Considérez la taille d'écran standard de la plupart des smartphones Android de la gamme Galaxy : 360 x 650. Si le corps de votre document, ou fenêtre, est défini pour être plus grand que cela (disons 1024 de large pour que ce soit évident), plusieurs choses peuvent se produire :
- Le navigateur peut effectuer un zoom automatique pour adapter la largeur à l'écran.
- L'utilisateur peut faire ce qui précède.
- Vous avez peut-être fait ce qui précède.
- Le navigateur rétablira le niveau de zoom lors des visites ultérieures de la page.
- Vous visualisez maintenant le contenu avec un zoom de 0,35x.
État initial 1x
Lorsqu'elle est chargée, la page ne tient pas. Certains navigateurs peuvent effectuer un zoom arrière pour s'adapter à la fenêtre, mais c'est certainement le cas de l'utilisateur. En outre, si vous avez déjà effectué un zoom arrière sur cette page, le navigateur mémorisera le niveau de zoom.
Zoom arrière pour adapter 0,35x
Une fois dézoomée, la largeur s'adapte bien, et une page avec plus de surface verticale remplit bien l'écran... mais...
Remarquez que le navigateur se trouve maintenant dans un état où le texte et les entrées (dimensionnés pour un zoom normal de 1x) seraient bien trop petits pour être lus, ce qui déclenche un comportement de convivialité consistant à zoomer sur les champs d'entrée lorsqu'ils reçoivent le focus.
Zoom sur l'Input-Focus 1.5x
Le comportement typique dans le cas ci-dessus est de zoomer à 1,5x, pour assurer la visibilité de la saisie. Le résultat (si vous avez tout stylé pour que l'apparence soit meilleure en cas de zoom arrière, ou pour un écran plus grand) est moins que souhaitable.
Solution 1
Utilisez une combinaison de règles css media, de détection d'appareils, ou ce qui convient le mieux à votre situation. Définissez la fenêtre et le corps à une taille qui remplit l'espace de l'écran, sans le dépasser.
- C'est pourquoi beaucoup de gens réussissent à forcer la taille du texte d'entrée à 16px ;
- Une fois que vous avez fait ça, il est clair que vous avez fait un gros zoom arrière.
- Elle présente également l'avantage de tromper le navigateur en permettant à des fenêtres légèrement dézoomées de ne pas déclencher le focus-zoom.
Solution 2
Utilisez le méta viewport, mais faites ensuite attention aux largeurs css.
<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
- Lorsque vous utilisez cette méthode, vous devez effectuer l'une des opérations suivantes :
- N'utilisez que des pourcentages pour les largeurs.
- Définissez une largeur em, et utilisez uniquement em et % pour les largeurs.
- voir la solution 1 pour l'utilisation des largeurs en px.
Solution 3
jQuery.mobile $.mobile.zoom.disable();
Assurez-vous simplement que vous commencez à vous développer avec elle dès le début, et non au milieu.
0 votes
Le navigateur Chrome ne zoome que lorsqu'il y a déjà du contenu dans le champ de saisie. Vous pourriez donc essayer de perfectionner la suppression du contenu, de définir un délai d'attente, puis de rajouter le contenu plus tard, vers (150ms). Il y a encore quelques problèmes avec la première pression longue sur un champ de saisie. Si vous voulez faire cela, gardez le délai court, ajoutez un petit effet de chargement jQuery pour des raisons d'ergonomie et revenez à une taille de police de 18px pour la saisie. Le zoom est là pour que l'utilisateur puisse plus facilement changer la position du curseur, pensez-y aussi.
1 votes
Star le problème ici : code.google.com/p/chromium/issues/detail?id=181560
1 votes
Note du modérateur : Au fil du temps, cette question a accumulé plus de 30 réponses. Avant d'ajouter une nouvelle réponse, soyez bien sûr que votre solution n'a pas déjà été fournie.