Zrobiłem stronę HTML z <input>
tagiem type="text"
. Po kliknięciu go w przeglądarce Safari na telefonie iPhone strona staje się większa (automatyczne powiększanie). Czy ktoś wie, jak to wyłączyć?
html
iphone
zoom
mobile-safari
html-input
Eduardo Czarnogóra
źródło
źródło
Odpowiedzi:
Przeglądarka wykona zbliżenie, jeśli rozmiar czcionki jest mniejszy niż,
16px
a domyślny rozmiar czcionki dla elementów formularza to11px
(przynajmniej w Chrome i Safari).Ponadto
select
element musi miećfocus
dołączoną pseudoklasę.To nie jest niezbędne do korzystania z wszystkich wyżej wymienionych, można po prostu styl elementy trzeba np: po prostu
text
,number
itextarea
:Alternatywne rozwiązanie, aby elementy wejściowe dziedziczyły po stylu nadrzędnym:
źródło
select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"] { font-size: 16px; }
select:focus
. Miałem ten sam problem.Możesz uniemożliwić Safari automatyczne powiększanie pól tekstowych podczas wprowadzania danych przez użytkownika bez wyłączania możliwości powiększania powiększenia przez użytkownika. Po prostu dodaj,
maximum-scale=1
ale pomiń atrybut skali użytkownika sugerowany w innych odpowiedziach.Jest to opłacalna opcja, jeśli masz formę w warstwie, która „unosi się”, jeśli jest powiększona, co może spowodować, że ważne elementy interfejsu użytkownika znikną z ekranu.
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
źródło
Nowość: IOS będzie nadal powiększać, chyba że użyjesz 16px na wejściu bez fokusa.
Dodałem tło, ponieważ IOS nie dodaje tła do zaznaczenia.
źródło
@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px)
aby ograniczyć efekt do iPhone'a, ale nie modyfikuj stron internetowych podczas przeglądania w Chrome.@supports (-webkit-overflow-scrolling: touch)
, ponieważ ta funkcja css istnieje tylko w systemie iOSJeśli Twoja witryna jest odpowiednio zaprojektowana dla urządzenia mobilnego, możesz zdecydować, że nie zezwalasz na skalowanie.
To rozwiązuje problem, że Twoja strona mobilna lub formularz będą się „unosić”.
źródło
Podsumowując, odpowiedź brzmi: ustaw rozmiar czcionki elementów formularza na co najmniej 16 pikseli
źródło
font-size: 100%
wartość i pobiera niezbędne 16px.źródło
1em
, lub100%
). Jeśli ustawisz niestandardowy rozmiar czcionki, możesz ustawićfont-size
we fragmencie,16px
aby uniknąć automatycznego powiększania.1em
też nie1rem
jest właściwym rozwiązaniem, ponieważ oba mogą być mniejsze niż,16px
a Safari wymaga przynajmniej16px
nie powiększania.Właściwym sposobem rozwiązania tego problemu jest zmiana rzutni meta na:
źródło
Nie ma czystego sposobu na znalezienie, ale oto hack ...
1) Zauważyłem, że zdarzenie najechania kursorem następuje przed powiększeniem, ale powiększenie następuje przed zdarzeniem przerwania lub skupienia.
2) Możesz dynamicznie zmieniać znacznik okienka META za pomocą javascript (patrz Włączanie / wyłączanie powiększania na iPhonie Safari za pomocą Javascript? )
Wypróbuj to (pokazane w jquery dla zwięzłości):
To zdecydowanie hack ... mogą zdarzyć się sytuacje, w których najechanie myszą / opuszczenie nie zawsze łapie wejścia / wyjścia, ale działało dobrze w moich testach i jest dobrym początkiem.
źródło
Ostatnio (dzisiaj: D) musiałem zintegrować to zachowanie. Aby nie wpływać na oryginalne pola projektowe, w tym kombinację, zdecydowałem się zastosować transformację w centrum pola:
źródło
Dodaj skalowalne przez użytkownika = 0 do meta okienka ekranu w następujący sposób
Pracował dla mnie :)
źródło
Jak już wskazano wiele innych odpowiedzi, można to osiągnąć przez dodanie
maximum-scale
do metataguviewport
. Jednak nie ma to negatywnego konsekwencji wyłączenie zoomu obsługi na urządzeniach z systemem Android . ( Nie wyłącza powiększania użytkownika na urządzeniach iOS od wersji 10 ).Możemy użyć JavaScript, aby dynamicznie dodawać
maximum-scale
do meta,viewport
gdy urządzenie jest iOS. Osiąga to to, co najlepsze z obu światów: pozwalamy użytkownikowi powiększać i zapobiegać powiększaniu pól tekstowych przez iOS.Kod:
źródło
addMaximumScaleToMetaViewport
? Czy to tylko z powodów semantycznych?Włamanie Javascript, które działa na iOS 7. Jest to oparte na odpowiedzi @dlo, ale zdarzenia najechania myszką i mouseout są zastąpione przez touchstart i touchend. Zasadniczo ten skrypt dodaje pół sekundy, zanim powiększenie włączy się ponownie, aby zapobiec powiększaniu.
źródło
To działało dla mnie:
źródło
Użyłem powyższego rozwiązania Christiny, ale z małą modyfikacją bootstrap i inną zasadą, która ma zastosowanie do komputerów stacjonarnych. Domyślny rozmiar czcionki Bootstrap to 14px, co powoduje powiększenie. Poniżej zmieniono na 16px dla „form form” w Bootstrap, zapobiegając powiększeniu.
I z powrotem do 14px dla przeglądarek nieprzeznaczonych na urządzenia mobilne.
Próbowałem użyć .form-control: focus, który pozostawił go na 14px, z wyjątkiem fokusa, który zmienił go na 16px i nie naprawił problemu z powiększeniem w iOS8. Przynajmniej na moim iPhonie korzystającym z iOS8 rozmiar czcionki musi wynosić 16 pikseli, aby iPhone nie mógł powiększyć strony.
źródło
Zrobiłem to również z jQuery:
Oczywiście niektóre inne elementy interfejsu mogą wymagać dostosowania, jeśli ten
16px
rozmiar czcionki psuje projekt.źródło
Po pewnym czasie próbowałem wymyślić to rozwiązanie
W „mousedown” ustawia rozmiar czcionki wejściowej na 16px. Zapobiegnie to powiększeniu. Podczas fokusu zmienia rozmiar czcionki z powrotem do wartości początkowej.
W przeciwieństwie do rozwiązań opublikowanych wcześniej, pozwoli ci to ustawić rozmiar czcionki tekstu na cokolwiek chcesz.
źródło
Po przeczytaniu prawie każdej linii tutaj i przetestowaniu różnych rozwiązań, dzięki wszystkim, którzy udostępnili swoje rozwiązania, wymyśliłem, przetestowałem i pracowałem dla mnie na iPhone 7 iOS 10.x:
Ma jednak pewne wady, zauważalnie „przeskakuje” w wyniku szybkiej zmiany rozmiaru czcionki występującej między stanami „najechania” i „najechania” - oraz wpływu przerysowania na wydajność
źródło
Zainspirowany odpowiedzią @jirikuchta rozwiązałem ten problem, dodając trochę CSS:
Bez JS i nie zauważam żadnego flasha ani nic takiego.
Warto zauważyć, że
viewport
zmaximum-scale=1
również działa, ale nie wtedy, gdy strona jest ładowana jako iframe, lub jeśli masz jakiś inny skrypt modyfikowaniaviewport
itpźródło
Pseudoelementy, takie jak
:focus
, nie działają tak jak kiedyś. W systemie iOS 11 można dodać prostą deklarację resetowania przed głównymi stylami (pod warunkiem, że nie zastąpisz ich mniejszym rozmiarem czcionki).Warto wspomnieć, że w przypadku bibliotek CSS, takich jak Tachyons.css, łatwo jest przypadkowo zastąpić rozmiar czcionki.
Na przykład klasa:
f5
jest równoważna z:,fontSize: 1rem
co jest w porządku, jeśli domyślną skalą czcionki jest.Jednak: jeśli wybierzesz klasę rozmiaru czcionki:
f6
będzie to równoważne zfontSize: .875rem
małym wyświetlaczem w górę. W takim przypadku musisz dokładniej określić swoje deklaracje resetowania:źródło
Nawiasem mówiąc, jeśli używasz Bootstrap , możesz po prostu użyć tego wariantu:
źródło
Musiałem „naprawić” problem automatycznego powiększania do kontroli formularzy dla witryny holenderskiego uniwersytetu (która używała 15px w kontrolkach formularzy). Wymyśliłem następujący zestaw wymagań:
Oto, co do tej pory wymyśliłem:
Niektóre uwagi:
źródło
Zamiast po prostu ustawić rozmiar czcionki na 16px, możesz:
scale()
transformacji CSS i marginesów ujemnych, aby zmniejszyć pole wejściowe do odpowiedniego rozmiaru.Załóżmy na przykład, że twoje pole wejściowe jest oryginalnie stylowane za pomocą:
Jeśli powiększysz pole, zwiększając wszystkie wymiary o 16/12 = 133,33%, zmniejsz użycie
scale()
o = 75%, pole wejściowe będzie miało poprawny rozmiar wizualny (i rozmiar czcionki) i nie będzie powiększenia skupiać.Tak jak
scale()
wpływa to tylko na rozmiar wizualny, konieczne będzie również dodanie ujemnych marginesów, aby zmniejszyć logiczny rozmiar pola.Dzięki temu CSS:
pole wejściowe będzie miało logiczny rozmiar czcionki 16px, podczas gdy wydaje się, że zawiera tekst 12px.
Mam wpis na blogu, w którym zagłębiam się nieco bardziej szczegółowo, i mam ten przykład jako widoczny HTML:
Brak powiększenia wejściowego w Safari na iPhonie, idealny sposób na piksel
źródło
Nawet z tymi odpowiedziami zajęło mi trzy dni, aby dowiedzieć się, co się dzieje, i być może będę potrzebować rozwiązania w przyszłości.
Moja sytuacja była nieco inna niż opisana.
W moim miałem na stronie tekst, który można zadowalać. Gdy użytkownik kliknął RÓŻNĄ sekcję div, przycisk sortowania, automatycznie zaznaczyłem jakiś tekst w edytowalnej div (zakres zaznaczenia, który wcześniej został zapisany i wyczyszczony), uruchomiłem polecenie tekstowe execCommand dla tego wyboru i wyczyściłem go ponownie.
Umożliwiło mi to niewidoczną zmianę kolorów tekstu w oparciu o interakcje użytkownika z divami kolorów w innym miejscu na stronie, przy jednoczesnym zachowaniu zaznaczenia zaznaczenia, aby mógł widzieć kolory we właściwym kontekście.
Cóż, w Safari na iPadzie kliknięcie div koloru spowodowało pojawienie się klawiatury ekranowej i nic, co zrobiłem, nie zapobiegłoby.
W końcu zorientowałem się, jak robi to iPad.
Nasłuchuje sekwencji dotknięcia i dotknięcia, która wyzwala zaznaczenie edytowalnego tekstu.
Gdy taka kombinacja się pojawi, pokazuje klawiaturę ekranową.
W rzeczywistości wykonuje powiększenie dolly, w którym powiększa leżącą pod nim stronę, jednocześnie powiększając edytowalny tekst. Zajęło mi dzień, aby zrozumieć, co widzę.
Tak więc rozwiązaniem, które zastosowałem, było przechwycenie zarówno dotknięcia palcem, jak i dotknięcia tych konkretnych kolorów. W obu programach obsługi zatrzymuję propagację i propagację i zwracam wartość false. Ale w zdarzeniu dotkniętym wyzwalam to samo zachowanie, które wywołało kliknięcie.
Tak więc wcześniej Safari uruchamiało coś, co moim zdaniem było „touchstart”, „mousedown”, „touchend”, „mouseup”, „click”, a ze względu na mój kod zaznaczenie tekstu w tej kolejności.
Nowa sekwencja z powodu przechwytywania to po prostu zaznaczenie tekstu. Wszystko inne zostaje przechwycone, zanim Safari może je przetworzyć i wykonać czynności związane z klawiaturą. Przechwyty touchstart i touchchend zapobiegają również wyzwalaniu zdarzeń myszy, a w kontekście jest to całkowicie w porządku.
Nie znam prostszego sposobu na opisanie tego, ale myślę, że warto go mieć tutaj, ponieważ znalazłem ten wątek w ciągu godziny od pierwszego napotkania problemu.
Jestem 98% pewien, że ta sama poprawka będzie działać z polami wprowadzania i wszystkim innym. Przechwytuj zdarzenia dotykowe i przetwarzaj je osobno, nie pozwalając na ich propagację lub bąbelkowanie, i rozważ dokonanie wyboru po krótkim czasie, aby upewnić się, że Safari nie rozpozna sekwencji jako wyzwalacza klawiatury.
źródło
Widzę, że ludzie tutaj robią dziwne rzeczy za pomocą JavaScript lub funkcji rzutni i wyłączają wszystkie ręczne powiększanie na urządzeniach. Moim zdaniem nie powinno to być rozwiązaniem. Dodanie tego fragmentu kodu CSS spowoduje wyłączenie automatycznego powiększania w systemie iOS bez zmiany rozmiaru czcionki na stałą liczbę, np. 16 pikseli.
Domyślnie używam 93,8% (15 pikseli) czcionek w polach wejściowych, a po dodaniu fragmentu kodu CSS pozostaje on na poziomie 93,8%. Nie musisz zmieniać na 16px ani ustawiać go na stały numer.
źródło
Ustawienie rozmiaru czcionki (dla pól wprowadzania) równego rozmiarowi czcionki wydaje się być tym, co uniemożliwia przeglądarce pomniejszenie lub powiększenie. Sugeruję użycie jej
font-size: 1rem
jako bardziej eleganckiego rozwiązania.źródło
Ponieważ automatyczne powiększanie (bez pomniejszania) jest wciąż denerwujące na iPhonie, oto JavaScript oparty na sugestii dlo, działającej z ostrością / rozmyciem.
Powiększanie jest wyłączone, gdy tylko wprowadzanie tekstu zostanie zmodyfikowane i ponownie włączone, gdy wejście zostanie pozostawione.
Uwaga: Niektórzy użytkownicy mogą nie docenić edycji tekstu przy małym wprowadzeniu tekstu! Dlatego osobiście wolę zmienić rozmiar tekstu wejściowego podczas edycji (patrz kod poniżej).
Poniższy kod zmieni rozmiar tekstu wejściowego na 16 pikseli (obliczony, tj. W bieżącym rozmiarze powiększenia), gdy element jest aktywny. iPhone nie będzie zatem automatycznie powiększał.
Uwaga: Współczynnik powiększenia jest obliczany na podstawie window.innerWidth i wyświetlacza iPhone'a z 320 pikselami. Dotyczy to tylko iPhone'a w trybie pionowym.
źródło
Znalezienie go zajęło mi trochę czasu, ale oto najlepszy kod, jaki znalazłem ...... http://nerd.vasilis.nl/prevent-ios-from-zooming-onfocus/
źródło
Na podstawie odpowiedzi Stephena Walsha ... Ten kod działa bez zmiany rozmiaru czcionki na fokus (który wygląda kiepsko), a ponadto nadal działa z FastClick , który sugeruję dodanie do wszystkich witryn mobilnych, aby pomóc w „zgryźliwym”. Dostosuj „szerokość rzutni” do swoich potrzeb.
źródło
W komentarzu do górnej odpowiedzi na temat ustawienia rozmiaru czcionki na 16px zapytano, jak to jest rozwiązanie, co jeśli chcesz większą / mniejszą czcionkę.
Nie wiem o was wszystkich, ale używanie px do rozmiarów czcionek nie jest najlepszym rozwiązaniem, powinieneś ich używać.
Ten problem wystąpił w mojej responsywnej witrynie, w której moje pole tekstowe jest większe niż 16 pikseli. Miałem kontener formularza ustawiony na 2rem i moje pole wejściowe ustawione na 1.4em. W moich zapytaniach mobilnych zmieniam rozmiar czcionki HTML w zależności od okienka ekranu. Ponieważ domyślnym kodem HTML jest 10, moje pole wejściowe oblicza na pulpicie 28 pikseli
Aby usunąć automatyczne powiększanie, musiałem zmienić dane wejściowe na 1.6em. To zwiększyło mój rozmiar czcionki do 32px. Tylko nieco wyżej i prawie niezauważalnie. Na iPhonie 4 i 5 zmieniam rozmiar czcionki HTML na 15px dla portretu i z powrotem na 10px dla krajobrazu. Wygląda na to, że najsłabszym punktem dla tego rozmiaru piksela było 48 pikseli, dlatego zmieniłem z 1,4 em (42 piksele) na 1,6 em (48 pikseli).
Musisz znaleźć najodpowiedniejszy rozmiar czcionki, a następnie przekonwertować go do tyłu w rozmiarach rem / em.
źródło
Oto hack, którego użyłem w jednym z moich projektów:
Skończyłem z początkowymi stylami i skalą, której chciałem, ale nie miałem ostrości na powiększeniu.
źródło