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>

DShultz
źródło

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 .

Matt Stevens
źródło
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.

crazygringo
źródło
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;
     }
}
snobojohan
źródło
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">
Dan
źródło
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;" />

Guillaume
źródło
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 .

Manu
źródło
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.

Mężczyzna
źródło
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%;
}
Belyash
źródło