Zachowaj rozmiar czcionki HTML, gdy orientacja iPhone'a zmieni się z pionowej na poziomą


203

Mam mobilną aplikację internetową z nieuporządkowaną listą zawierającą wiele listitemów z hiperłączem wewnątrz każdego li:

... Moje pytanie brzmi: jak sformatować hiperłącza, aby NIE zmieniały rozmiaru podczas oglądania na iPhonie, a akcelerometr przełączał się z pionowego -> poziomego? W tej chwili mam rozmiar czcionki hiperłącza określony na 14px, ale po przejściu do poziomej zmienia się na około 20px. Chcę, aby rozmiar czcionki pozostał taki sam. Oto kod:

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>

Odpowiedzi:


434

Możesz wyłączyć to zachowanie za pomocą -webkit-text-size-adjustwłaściwości CSS:

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

Korzystanie z tej właściwości opisano szczegółowo w przewodniku Safari Web Content Guide .


4
Jak zauważa snobojohan, możesz zawinąć to w zapytanie dotyczące mediów specyficzne dla krajobrazu, aby zachować możliwość zwiększenia rozmiaru czcionki w przeglądarkach komputerowych. Nie jest to konieczne na stronach kierowanych na iOS, gdzie powiększanie szczypcami działa niezależnie.
Matt Stevens

Ta funkcja nie działa w iOS6. Możesz także spróbować użyć <meta content="viewport"metatagu (patrz poniżej)
Dan

13
NIE używaj none, używaj 100%zamiast tego, takie zachowanie jest pożądane: blog.55minutes.com/2012/04/iphone-text-resizing
fregante

1
Dziękuję za to ... Próbowałem dowiedzieć się, co się dzieje z dopasowywaniem czcionek w krajobrazie xD
Jeff Shaver

3
@ bfred.it +1, myślę, że warto byłoby edytować tę odpowiedź z tą zmianą.
Ming

106

Uwaga: jeśli używasz

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

spowoduje to wyłączenie funkcji powiększania w domyślnych przeglądarkach. Lepszym rozwiązaniem jest:

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

To koryguje zachowanie iPhone'a / iPada bez zmiany zachowania pulpitu.


25

Użycie -webkit-text-size-adjust: brak; bezpośrednio na html przerywa możliwość powiększania tekstu we wszystkich przeglądarkach webkit. Powinieneś połączyć to z niektórymi zapytaniami o media specyficznymi dla iOS. Na przykład:

@media only screen and (min-device-width : 320px) and (max-device-width : 1024px) {
     html {
        -webkit-text-size-adjust: none;
     }
}

Zabawne jest, że udało mi się go uruchomić, umieszczając właściwość -webkit w zapytaniu o media. Dzięki!
zuallauz

12

Jak wspomniano wcześniej, reguła CSS

 -webkit-text-size-adjust: none

nie działa już w nowoczesnych urządzeniach.

Na szczęście pojawiło się nowe rozwiązanie dla iOS5 i iOS6 (todo: co z iOS7?) :

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

Możesz także dodać, , user-scalable=0aby wyłączyć powiększanie szczypcami, aby Twoja witryna zachowywała się jak natywna aplikacja. Jeśli Twój projekt zawiesza się podczas powiększania przez użytkownika, użyj tego metatagu:

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

Cóż, dobrym pytaniem jest, czy w tym metatagu należy użyć separatora przecinkowego czy średnika! Ale to działa :)
Dan,

2
Potrzebuję tylko <meta name="viewport" content="width=device-width, initial-scale=1.0">, żeby zadziałało.
Foxinni,

1
@Foxinni: dzięki, zaktualizowałem odpowiedź. Myślę, że te 2 pierwsze metatagi były przestarzałym śmieciem z wczesnych wersji iOS
Dan

10

Możesz dodać meta w nagłówku HTML:

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


9

Możesz także wybrać reset CSS, taki jak normalize.css , który zawiera tę samą regułę, którą zaleca crazygringo:

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

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

Jak widać, zawiera także regułę specyficzną dla dostawcy dla telefonu IE.

Aktualne informacje o implementacji w różnych przeglądarkach znajdują się na stronie referencyjnej MDN .


3

Poniższy kod działa dla mnie.

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

Spróbuj wyczyścić pamięć podręczną przeglądarki, jeśli nie działa.



0

W moim przypadku problem polegał na tym, że użyłem atrybutu CSS width: 100%dla tagu HTML input type="text".

Zmieniłem wartość widthna 60% i dodałem padding-right:38%.

input {
    padding-right: 38%;
    width: 60%;
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.