650 votes

Désactiver le zoom automatique dans la balise de saisie "Texte" - Safari sur iPhone

J'ai créé une page HTML qui contient un <input> tag avec type="text" . Lorsque je clique dessus avec Safari sur l'iPhone, la page s'agrandit (zoom automatique). Quelqu'un sait-il comment désactiver cette fonction ?

11 votes

Pour tous les Twitter Bootstrap les utilisateurs atterrissent ici : voir aussi ce problème Github .

0 votes

@Evolve la réponse dont vous parlez casse la fonctionnalité de pincement et de zoom d'Android. La réponse de daxmacrog est imparfaite.

20 votes

Je jure, Apple crée ces anti-fonctionnalités juste pour nous embrouiller.

558voto

srikanth Points 1029

Le navigateur fera un zoom si la taille de la police est inférieure à 16px et la taille de la police par défaut pour les éléments de formulaire est de 11px (au moins dans Chrome et Safari).

En outre, le select doit avoir l'élément focus pseudo-classe attachée.

input[type="color"],
input[type="date"],
input[type="datetime"],
input[type="datetime-local"],
input[type="email"],
input[type="month"],
input[type="number"],
input[type="password"],
input[type="search"],
input[type="tel"],
input[type="text"],
input[type="time"],
input[type="url"],
input[type="week"],
select:focus,
textarea {
  font-size: 16px;
}

Il n'est pas nécessaire d'utiliser tous les éléments ci-dessus, vous pouvez juste styliser les éléments dont vous avez besoin, par exemple : juste text , number et textarea :

input[type='text'],
input[type='number'],
textarea {
  font-size: 16px;
}

Une autre solution consiste à faire en sorte que les éléments de saisie héritent d'un style parent :

body {
  font-size: 16px;
}
input[type="text"] {
  font-size: inherit;
}

4 votes

J'ai constaté que cela fonctionne pour les champs spécifiés, mais hélas pas pour les champs de sélection... Avez-vous une idée de la manière d'obtenir un résultat similaire pour ces derniers ?

3 votes

@iamkeir Pour les listes déroulantes de sélection, le problème est résolu dans [ stackoverflow.com/questions/6483425/

0 votes

Merveilleux ! Je n'aurais jamais imaginé que ce problème soit lié à la taille de la police.

238voto

Christina Points 5018
@media screen and (-webkit-min-device-pixel-ratio:0) { 
  select:focus,
  textarea:focus,
  input:focus {
    font-size: 16px;
    background: #eee;
  }
}

Nouveau : IOS continuera à zoomer, sauf si vous utilisez 16px sur l'entrée sans le focus.

@media screen and (-webkit-min-device-pixel-ratio:0) { 
  select,
  textarea,
  input {
    font-size: 16px;
  }
}

J'ai ajouté un arrière-plan car IOS n'ajoute pas d'arrière-plan sur la sélection.

2 votes

Il s'agit d'une solution simple et élégante qui semble très bien fonctionner. J'aime l'astuce consistant à ajouter un arrière-plan à l'élément ciblé, car elle permet de faire ressortir le champ actif du reste. Merci !

1 votes

Belle solution... simple et élégante.

9 votes

Cela fonctionne non seulement pour Safari sur iOS (iphone/ipad/ipod), mais aussi pour Safari/OSX et Chrome (Windows et Mac). Donc si vous essayez de cibler spécifiquement l'iphone, cela ne fonctionnera pas.

205voto

Si votre site Web est correctement conçu pour un appareil mobile, vous pouvez décider de ne pas autoriser la mise à l'échelle.

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />

Cela résout le problème du flottement de votre page ou formulaire mobile.

132 votes

Techniquement correct, mais je ne suis pas d'accord avec le raisonnement. La désactivation des zooms utilisateur sur un site correctement conçu reste généralement une mauvaise idée.

21 votes

"Bien conçu" est très subjectif. Prenons l'exemple d'un en-tête fixe de 50px en haut d'un site qui est entièrement réactif et devrait fonctionner dans tous les navigateurs. Un zoom dans iOS Safari brise le positionnement de l'en-tête et, à peu de choses près, l'ensemble du site.

2 votes

Une conception correcte signifie que vous avez pris soin de tous les éléments html (texte) et de conception de manière à ce qu'ils soient lisibles sur un appareil mobile (principalement les téléphones). Si cela est fait correctement, il n'est pas nécessaire de permettre la mise à l'échelle pour un visiteur et cela évite tous les comportements inattendus lors de la mise à l'échelle/du zoom.

79voto

Nik Points 2505

En résumé, la réponse est la suivante : définissez la taille de la police des éléments du formulaire à au moins 16px.

0 votes

Oui, c'est définitivement le meilleure pratique pour éviter le zoom sur les appareils mobiles. Pas de js, pas de hacks, pas de solutions de contournement. Mais même avec 16px j'ai remarqué un très petit zoom dans mes pages donc j'ai essayé 17px, 18px... pour voir ce qui se passe.

8 votes

La meilleure pratique consiste à déclarer 100% sur les éléments body, button, input, textarea et select. Cela permet à l'utilisateur de définir une valeur par défaut autre que les 16px fournis par les navigateurs. Une personne qui a des difficultés à lire à l'écran peut définir une valeur par défaut de 18 ou 20 pixels. Vous ne voulez pas passer outre leur choix en leur imposant 16px. Pour ce qui est d'iOS, cependant, la décision a été prise d'augmenter toute valeur que le HIG juge trop petite. Malheureusement, il semble qu'il n'interprète pas la valeur 100 %, et nous sommes donc obligés d'ajouter la valeur par défaut pour l'apaiser.

0 votes

En ce qui concerne iOS Safari, à partir de ce commentaire, il semble que Safari interprète correctement l'adresse de l'utilisateur. font-size: 100% et saisit les 16px nécessaires.

40voto

stormsweeper Points 464
input[type='text'],textarea {font-size:1em;}

3 votes

Notez que le fait de définir user-scalable sur no désactivera tous les zooms, ce qui est probablement une mauvaise idée.

19 votes

Cela ne fonctionne que si la taille de la police de votre corps est celle par défaut (non spécifiée, ou 1em ou 100% ). Si vous définissez une taille de police personnalisée, vous pouvez définir le paramètre font-size dans votre extrait pour 16px pour éviter le zoom automatique.

0 votes

Je sais que cette question s'adressait à l'iPhone, mais cette solution est plus compatible avec les différentes plates-formes et avec l'avenir d'un plus grand nombre de plates-formes et d'appareils. Le réglage à '1em' comme spécifié dans le post a résolu le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X