Ich habe eine HTML-Seite erstellt, die ein <input>
Tag mit enthält type="text"
. Wenn ich mit Safari auf dem iPhone darauf klicke, wird die Seite größer (automatischer Zoom). Weiß jemand, wie man das deaktiviert?
html
iphone
zoom
mobile-safari
html-input
Eduardo Montenegro
quelle
quelle
Antworten:
Der Browser zoomt, wenn die Schriftgröße kleiner als
16px
und die Standardschriftgröße für Formularelemente ist11px
(zumindest in Chrome und Safari).Zusätzlich muss dem
select
Element diefocus
Pseudoklasse zugeordnet sein.Es ist nicht notwendig , alle oben zu verwenden, kann man einfach Stil Elemente , die Sie benötigen, zB: nur
text
,number
undtextarea
:Alternative Lösung, um die Eingabeelemente von einem übergeordneten Stil erben zu lassen:
quelle
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
. Hatte das gleiche Problem auch.Sie können verhindern, dass Safari während der Benutzereingabe automatisch in Textfelder hineinzoomt, ohne die Fähigkeit des Benutzers zu deaktivieren, den Zoom einzuschränken. Fügen Sie einfach
maximum-scale=1
das in anderen Antworten vorgeschlagene Attribut für die Benutzerskala hinzu , lassen Sie es jedoch weg.Es ist eine lohnende Option, wenn Sie ein Formular in einer Ebene haben, das beim Zoomen „schwebt“, was dazu führen kann, dass wichtige Elemente der Benutzeroberfläche vom Bildschirm verschoben werden.
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
quelle
Neu: IOS zoomt weiterhin, es sei denn, Sie verwenden 16px für den Eingang ohne Fokus.
Ich habe einen Hintergrund hinzugefügt, da IOS der Auswahl keinen Hintergrund hinzufügt.
quelle
@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px)
diese Option , um den Effekt auf das iPhone zu beschränken. Ändern Sie Websites jedoch nicht, wenn Sie sie in Chrome anzeigen.@supports (-webkit-overflow-scrolling: touch)
, da diese CSS-Funktion nur unter iOS vorhanden istWenn Ihre Website für ein mobiles Gerät geeignet ist, können Sie entscheiden, die Skalierung nicht zuzulassen.
Dies löst das Problem, dass Ihre mobile Seite oder Ihr Formular herumschwebt.
quelle
Zusammenfassend lautet die Antwort: Stellen Sie die Schriftgröße der Formularelemente auf mindestens 16 Pixel ein
quelle
font-size: 100%
Wert korrekt interpretiert und die erforderlichen 16px erfasst.quelle
1em
oder100%
). Wenn Sie eine benutzerdefinierte Schriftgröße festlegen, können Sie diesefont-size
in Ihrem Snippet festlegen16px
, um ein automatisches Zoomen zu vermeiden.1em
noch1rem
ist eine richtige Lösung, da beide kleiner sein können16px
und Safari zumindest erfordert16px
, nicht zu zoomen.Der richtige Weg, um dieses Problem zu beheben, besteht darin, das Meta-Ansichtsfenster in Folgendes zu ändern:
quelle
Es gibt keinen sauberen Weg, den ich finden könnte, aber hier ist ein Hack ...
1) Ich habe festgestellt, dass das Mouseover-Ereignis vor dem Zoomen erfolgt, das Zoomen jedoch vor dem Herunterfahren oder Fokussieren.
2) Sie können das META-Ansichtsfenster-Tag mithilfe von Javascript dynamisch ändern (siehe Aktivieren / Deaktivieren des Zooms auf der iPhone-Safari mit Javascript? )
Versuchen Sie dies also (in jquery für Kompaktheit gezeigt):
Dies ist definitiv ein Hack ... es kann Situationen geben, in denen Mouseover / Down nicht immer Ein- / Ausgänge abfängt, aber es hat in meinen Tests gut funktioniert und ist ein solider Anfang.
quelle
Fügen Sie dem Ansichtsfenster Meta wie folgt benutzerskalierbar = 0 hinzu
Arbeitete für mich :)
quelle
Ich musste kürzlich (heute: D) dieses Verhalten integrieren. Um die ursprünglichen Entwurfsfelder, einschließlich der Kombination, nicht zu beeinflussen, habe ich mich dafür entschieden, die Transformation im Fokus des Felds anzuwenden:
quelle
Wie viele andere Antworten bereits gezeigt haben, kann dies durch Hinzufügen
maximum-scale
zum Meta-viewport
Tag erreicht werden. Dies hat jedoch die negative Folge, dass der Benutzerzoom auf Android-Geräten deaktiviert wird . ( Der Benutzerzoom auf iOS-Geräten wird seit Version 10 nicht mehr deaktiviert .)Wir können JavaScript verwenden, um
maximum-scale
das Meta dynamisch zu erweitern,viewport
wenn das Gerät iOS ist. Damit wird das Beste aus beiden Welten erreicht: Wir ermöglichen dem Benutzer das Zoomen und verhindern, dass iOS fokussiert in Textfelder zoomt.Code:
quelle
addMaximumScaleToMetaViewport
? Ist es nur aus semantischen Gründen?Javascript-Hack, der unter iOS 7 funktioniert. Dies basiert auf der Antwort von @dlo, aber Mouseover- und Mouseout-Ereignisse werden durch Touchstart- und Touchend-Ereignisse ersetzt. Grundsätzlich fügt dieses Skript eine Zeitüberschreitung von einer halben Sekunde hinzu, bevor der Zoom wieder aktiviert wird, um das Zoomen zu verhindern.
quelle
Das hat bei mir funktioniert:
quelle
Ich habe Christinas Lösung oben verwendet, aber mit einer kleinen Modifikation für Bootstrap und einer anderen Regel, die auf Desktop-Computer angewendet werden soll. Die Standardschriftgröße von Bootstrap beträgt 14 Pixel, wodurch der Zoom verursacht wird. Im Folgenden wird es für "Formularsteuerelemente" in Bootstrap auf 16px geändert, wodurch das Zoomen verhindert wird.
Und zurück zu 14px für nicht mobile Browser.
Ich habe versucht, .form-control: focus zu verwenden, wodurch es bei 14px blieb, außer bei focus, bei dem es auf 16px geändert wurde und das Zoomproblem mit iOS8 nicht behoben wurde. Zumindest auf meinem iPhone mit iOS8 muss die Schriftgröße vor dem Fokus 16 Pixel betragen, damit das iPhone die Seite nicht vergrößert.
quelle
Ich habe das auch mit jQuery gemacht:
Natürlich müssen möglicherweise einige andere Elemente in der Benutzeroberfläche angepasst werden, wenn diese
16px
Schriftgröße das Design beeinträchtigt.quelle
Nach einer Weile des Versuchs kam ich auf diese Lösung
Bei "Mousedown" wird die Schriftgröße der Eingabe auf 16 Pixel festgelegt. Dies verhindert das Zoomen. Beim Fokusereignis wird die Schriftgröße auf den Anfangswert zurückgesetzt.
Im Gegensatz zu zuvor veröffentlichten Lösungen können Sie hier die Schriftgröße der Eingabe auf die gewünschten Werte einstellen.
quelle
Nachdem ich hier fast jede einzelne Zeile gelesen und die verschiedenen Lösungen getestet habe, habe ich dank all derer, die ihre Lösungen geteilt haben, das iPhone 7 iOS 10.x entwickelt, für mich getestet und für mich gearbeitet:
Es hat jedoch einige Nachteile, nämlich einen deutlichen "Sprung" als Ergebnis der schnellen Änderung der Schriftgröße zwischen den Zuständen "Hover" und "Focus" - und der Auswirkung des Neuzeichnens auf die Leistung
quelle
Inspiriert von der Antwort von @jirikuchta, habe ich dieses Problem gelöst, indem ich dieses bisschen CSS hinzugefügt habe:
Kein JS, und ich bemerke keinen Blitz oder so.
Es ist erwähnenswert, dass a
viewport
withmaximum-scale=1
auch funktioniert, aber nicht, wenn die Seite als Iframe geladen wird oder wenn Sie ein anderes Skript haben, das dasviewport
usw. ändert .quelle
Pseudoelemente wie
:focus
funktionieren nicht mehr so wie früher. Ab iOS 11 kann vor Ihren Hauptstilen eine einfache Rücksetzdeklaration hinzugefügt werden (vorausgesetzt, Sie überschreiben sie nicht mit einer kleineren Schriftgröße).Es ist erwähnenswert, dass es für CSS-Bibliotheken wie Tachyons.css leicht ist, versehentlich Ihre Schriftgröße zu überschreiben.
Zum Beispiel ist class:
f5
äquivalent zu:,fontSize: 1rem
was in Ordnung ist, wenn Sie die Standardgröße für die Körperschrift beibehalten haben.Allerdings: Wenn Sie die Schriftgrößenklasse wählen:
f6
Dies entsprichtfontSize: .875rem
einer kleinen Anzeige nach oben. In diesem Fall müssen Sie Ihre Reset-Deklarationen genauer festlegen:quelle
Übrigens, wenn Sie Bootstrap verwenden , können Sie einfach diese Variante verwenden:
quelle
Ich musste das Problem des automatischen Zooms in Formularsteuerelemente für eine Website der niederländischen Universität (die 15px in Formularsteuerelementen verwendete) "beheben". Ich habe mir folgende Anforderungen ausgedacht:
Das habe ich mir bisher ausgedacht:
Einige Notizen:
quelle
Anstatt einfach die Schriftgröße auf 16px einzustellen, können Sie:
scale()
CSS-Transformation und die negativen Ränder, um das Eingabefeld auf die richtige Größe zu verkleinern.Angenommen, Ihr Eingabefeld ist ursprünglich so gestaltet:
Wenn Sie das Feld vergrößern, indem Sie alle Dimensionen um 16/12 = 133,33% erhöhen, und dann um 12/16
scale()
= 75% reduzieren , hat das Eingabefeld die richtige visuelle Größe (und Schriftgröße) und es wird nicht vergrößert Fokus.Da sich dies
scale()
nur auf die visuelle Größe auswirkt, müssen Sie auch negative Ränder hinzufügen, um die logische Größe des Felds zu verringern.Mit diesem CSS:
Das Eingabefeld hat eine logische Schriftgröße von 16 Pixel und scheint 12 Pixel Text zu haben.
Ich habe einen Blog-Beitrag, in dem ich etwas detaillierter vorgehe, und dieses Beispiel als sichtbares HTML:
Kein Eingabezoom in Safari auf dem iPhone, pixelgenau
quelle
Trotz dieser Antworten habe ich drei Tage gebraucht, um herauszufinden, was los war, und möglicherweise brauche ich die Lösung in Zukunft erneut.
Meine Situation war etwas anders als die beschriebene.
In meinem hatte ich einen inhaltsbearbeitbaren Text in einem Div auf der Seite. Wenn der Benutzer auf ein VERSCHIEDENES div, eine Art Schaltfläche, klickte, wählte ich automatisch einen Text im inhaltsbearbeitbaren div (einem zuvor gespeicherten und gelöschten Auswahlbereich) aus, führte einen Rich-Text-ExecCommand für diese Auswahl aus und löschte ihn erneut.
Dies ermöglichte es mir, Textfarben basierend auf Benutzerinteraktionen mit Farbdivs an anderer Stelle auf der Seite unsichtbar zu ändern, während die Auswahl normalerweise ausgeblendet blieb, damit sie die Farben im richtigen Kontext sehen konnten.
Nun, auf der Safari des iPad führte das Klicken auf das Farbdiv. Dazu, dass die Bildschirmtastatur angezeigt wurde, und nichts, was ich getan habe, würde dies verhindern.
Ich habe endlich herausgefunden, wie das iPad das macht.
Es wartet auf eine Touchstart- und Touchend-Sequenz, die eine Auswahl an bearbeitbarem Text auslöst.
Wenn diese Kombination auftritt, wird die Bildschirmtastatur angezeigt.
Tatsächlich wird ein Dolly-Zoom ausgeführt, bei dem die zugrunde liegende Seite erweitert wird, während der bearbeitbare Text vergrößert wird. Ich brauchte einen Tag, um zu verstehen, was ich sah.
Die Lösung, die ich verwendet habe, bestand darin, sowohl Touchstart als auch Touchend für diese bestimmten Farbdivs abzufangen. In beiden Handlern stoppe ich die Ausbreitung und das Sprudeln und gebe false zurück. Aber im Touchend-Ereignis löse ich das gleiche Verhalten aus, das durch Klicken ausgelöst wurde.
Zuvor löste Safari das aus, was ich für "Touchstart", "Mousedown", "Touchend", "Mouseup", "Click" und aufgrund meines Codes eine Textauswahl in dieser Reihenfolge hielt.
Die neue Sequenz aufgrund der Abschnitte ist einfach die Textauswahl. Alles andere wird abgefangen, bevor Safari es verarbeiten und seine Tastaturaufgaben erledigen kann. Die Abschnitte Touchstart und Touchend verhindern, dass auch Mausereignisse ausgelöst werden, und im Kontext ist dies völlig in Ordnung.
Ich kenne keinen einfacheren Weg, dies zu beschreiben, aber ich denke, es ist wichtig, es hier zu haben, da ich diesen Thread innerhalb einer Stunde nach dem ersten Auftreten des Problems gefunden habe.
Ich bin zu 98% sicher, dass das gleiche Update mit Eingabefeldern und allem anderen funktioniert. Fangen Sie die Berührungsereignisse ab und verarbeiten Sie sie separat, ohne dass sie sich ausbreiten oder sprudeln. Ziehen Sie nach einer kurzen Zeitspanne eine Auswahl vor, um sicherzustellen, dass Safari die Sequenz nicht als Tastaturauslöser erkennt.
quelle
Ich sehe Leute hier, die seltsame Dinge mit JavaScript oder der Ansichtsfensterfunktion tun und das manuelle Zoomen auf Geräten deaktivieren. Das sollte meiner Meinung nach keine Lösung sein. Durch Hinzufügen dieses CSS-Snippets wird der automatische Zoom in iOS deaktiviert, ohne dass die Schriftgröße auf eine feste Zahl wie 16 Pixel geändert wird.
Standardmäßig verwende ich bei Eingabefeldern eine Schriftgröße von 93,8% (15 Pixel). Durch Hinzufügen meines CSS-Snippets bleibt diese bei 93,8%. Sie müssen nicht auf 16px wechseln oder eine feste Nummer festlegen.
quelle
Das Festlegen einer Schriftgröße (für Eingabefelder), die der Schriftgröße des Körpers entspricht, scheint zu verhindern, dass der Browser heraus- oder hineinzoomt. Ich würde vorschlagen, sie
font-size: 1rem
als elegantere Lösung zu verwenden.quelle
Da das automatische Vergrößern (ohne Verkleinern) auf dem iPhone immer noch unangenehm ist, finden Sie hier ein JavaScript, das auf dem Vorschlag von dlo basiert, mit Fokus / Unschärfe zu arbeiten.
Das Zoomen ist deaktiviert, sobald eine Texteingabe verschmolzen und wieder aktiviert wird, wenn die Eingabe verlassen wird.
Hinweis: Einige Benutzer schätzen die Bearbeitung von Texten in einer kleinen Texteingabe möglicherweise nicht! Daher ziehe ich es persönlich vor, die Textgröße der Eingabe während der Bearbeitung zu ändern (siehe Code unten).
Der folgende Code ändert die Textgröße einer Eingabe auf 16 Pixel (berechnet, dh in der aktuellen Zoomgröße), während das Element den Fokus hat. Das iPhone wird daher nicht automatisch vergrößert.
Hinweis: Der Zoomfaktor wird basierend auf window.innerWidth und dem iPhone-Display mit 320 Pixel berechnet. Dies gilt nur für das iPhone im Hochformat.
quelle
Ich habe eine Weile gebraucht, um es zu finden, aber hier ist der beste Code, den ich gefunden habe ...... http://nerd.vasilis.nl/prevent-ios-from-zooming-onfocus/
quelle
Basierend auf Stephen Walshs Antwort ... Dieser Code funktioniert, ohne die Schriftgröße der Eingaben im Fokus zu ändern (was lahm aussieht), und funktioniert weiterhin mit FastClick , das ich allen mobilen Websites hinzufügen möchte , um das "Bissige" zu erreichen. Passen Sie Ihre "Ansichtsfensterbreite" an Ihre Bedürfnisse an.
quelle
In einem Kommentar zur Top-Antwort zum Festlegen der Schriftgröße auf 16 Pixel wurde gefragt, wie dies eine Lösung ist. Was ist, wenn Sie eine größere / kleinere Schriftart wünschen?
Ich weiß nicht alles über Sie, aber die Verwendung von px für Schriftgrößen ist nicht der beste Weg. Sie sollten sie verwenden.
Ich bin auf meiner reaktionsfähigen Website auf dieses Problem gestoßen, bei der mein Textfeld größer als 16 Pixel ist. Ich hatte meinen Formularcontainer auf 2rem und mein Eingabefeld auf 1.4em gesetzt. In meinen mobilen Abfragen ändere ich die HTML-Schriftgröße je nach Ansichtsfenster. Da der Standard-HTML-Wert 10 ist, wird mein Eingabefeld auf dem Desktop auf 28 Pixel berechnet
Um den automatischen Zoom zu entfernen, musste ich meine Eingabe auf 1.6em ändern. Dies erhöhte meine Schriftgröße auf 32px. Nur etwas höher und kaum wahrnehmbar. Auf meinem iPhone 4 & 5 ändere ich meine HTML-Schriftgröße für Hochformat auf 15 Pixel und für Querformat zurück auf 10 Pixel. Es schien, dass der Sweet Spot für diese Pixelgröße 48px war, weshalb ich von 1.4em (42px) auf 1.6em (48px) gewechselt bin.
Das, was Sie tun müssen, ist, den Sweet Spot in der Schriftgröße zu finden und ihn dann in Ihre Rem / Em-Größen rückwärts zu konvertieren.
quelle
Hier ist ein Hack, den ich für eines meiner Projekte verwendet habe:
Endete mit den anfänglichen Stilen und Maßstäben, die ich wollte, aber ohne Fokuszoom.
quelle