Préserver la taille de la police HTML lorsque l'orientation de l'iPhone passe de portrait en paysage

203

J'ai une application web mobile avec une liste non ordonnée contenant plusieurs listitems avec un hyperlien à l'intérieur de chaque li:

... Ma question est de savoir comment formater les hyperliens pour qu'ils ne changent PAS de taille lorsqu'ils sont affichés sur un iPhone, et que l'accéléromètre passe de portrait -> paysage? À l'heure actuelle, la taille de la police du lien hypertexte est spécifiée à 14 pixels, mais lorsque je passe en mode paysage, elle monte jusqu'à 20 pixels. Je veux que la taille de la police reste la même. Voici le code:

ul li a
{
  font-size:14px;
  text-decoration: none;
  color: #cc9999;
}
<ul>
  <li id="home" class="active">
    <a href="home.html">HOME</a>
  </li>
  <li id="home" class="active">
    <a href="test.html">TEST</a>
  </li>
</ul>

DShultz
la source

Réponses:

434

Vous pouvez désactiver ce comportement via la -webkit-text-size-adjustpropriété CSS:

html {
    -webkit-text-size-adjust: 100%; /* Prevent font scaling in landscape while allowing user zoom */
}

L'utilisation de cette propriété est décrite plus en détail dans le Guide du contenu Web Safari .

Matt Stevens
la source
4
Comme le note snobojohan, vous pouvez envelopper cela dans une requête multimédia spécifique au paysage pour préserver la possibilité d'augmenter la taille de la police sur les navigateurs de bureau. Cela n'est pas nécessaire sur les pages ciblées iOS où le zoom par pincement fonctionnera malgré tout.
Matt Stevens
Cette fonctionnalité semble ne pas fonctionner dans iOS6. Vous pouvez également essayer d'utiliser la <meta content="viewport"balise META (voir ci-dessous)
Dan
13
N'UTILISEZ PAS none, utilisez 100%plutôt, c'est le comportement que vous voulez: blog.55minutes.com/2012/04/iphone-text-resizing
fregante
1
Merci pour cela ... J'ai essayé de comprendre ce qui se passait avec le dimensionnement des polices dans le paysage xD
Jeff Shaver
3
@ bfred.it +1, je pense qu'il serait utile de modifier cette réponse avec ce changement.
Ming
106

Remarque: si vous utilisez

html {
    -webkit-text-size-adjust: none;
}

alors cela désactivera le comportement du zoom dans les navigateurs par défaut. Une meilleure solution est:

html {
    -webkit-text-size-adjust: 100%;
}

Cela corrige le comportement de l'iPhone / iPad, sans changer le comportement du bureau.

crazygringo
la source
25

Utilisation de -webkit-text-size-adjust: aucun; directement sur html rompt la possibilité de zoomer du texte dans tous les navigateurs webkit. Vous devez combiner cela avec certaines requêtes multimédias spécifiques à iOS. Par exemple:

@media only screen and (min-device-width : 320px) and (max-device-width : 1024px) {
     html {
        -webkit-text-size-adjust: none;
     }
}
snobojohan
la source
Curieusement, je ne l'ai fait fonctionner qu'en mettant la propriété -webkit dans la requête multimédia. Merci!
zuallauz
12

Comme il a été mentionné précédemment, la règle CSS

 -webkit-text-size-adjust: none

ne fonctionne plus dans les appareils modernes.

Heureusement, une nouvelle solution vient pour iOS5 et iOS6 (todo: qu'en est-il d'iOS7?) :

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

Vous pouvez également ajouter , user-scalable=0pour désactiver le zoom par pincement, afin que votre site Web se comporte comme une application native. Si votre conception freine lorsque l'utilisateur effectue un zoom, utilisez plutôt cette balise META:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
Dan
la source
Eh bien, une bonne question est de savoir s'il faut utiliser un séparateur virgule ou point-virgule dans cette balise META! Mais ça marche :)
Dan
2
Il me suffit <meta name="viewport" content="width=device-width, initial-scale=1.0">que cela prenne effet.
Foxinni
1
@Foxinni: merci, mis à jour la réponse. Je pense que ces 2 premières balises META étaient une poubelle obsolète des premières versions d'iOS
Dan
10

Vous pouvez ajouter une méta dans l'en-tête HTML:

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

Guillaume
la source
9

Vous pouvez également opter pour une réinitialisation CSS, telle que normalize.css , qui inclut la même règle que crazygringo recommande:

/**
 * 2. Prevent iOS text size adjust after orientation change, without disabling
 *    user zoom.
 */

html {
  -ms-text-size-adjust: 100%;
  -webkit-text-size-adjust: 100%;
}

Comme vous le voyez, il comprend également une règle spécifique au fournisseur pour le téléphone IE.

Pour des informations actuelles sur l'implémentation dans différents navigateurs, reportez-vous à la page de référence MDN .

Manu
la source
3

Le code ci-dessous fonctionne pour moi.

html{-webkit-text-size-adjust: 100%;}

Essayez de vider le cache de votre navigateur s'il ne fonctionne pas.

Un homme
la source
0

Dans mon cas, ce problème est dû au fait que j'ai utilisé l'attribut CSS width: 100%pour la balise HTMLinput type="text" .

J'ai changé la valeur de width60% et j'ajoute padding-right:38%.

input {
    padding-right: 38%;
    width: 60%;
}
Belyash
la source