Das globale Attribut inputmode gibt Browsern auf Geräten mit Bildschirmtastaturen einen Hinweis, welche Tastatur angezeigt werden soll, wenn ein Benutzer ein input- oder textarea-Element ausgewählt hat.
<input type="text" inputmode="" />
<textarea inputmode="" />
Im Gegensatz zur Änderung des type des Formulars ändert inputmode nicht die Art und Weise, wie der Browser die Eingabe interpretiert – es weist den Browser an, welche Tastatur angezeigt werden soll.
Das inputmode Attribut hat eine lange Geschichte, wurde aber erst sehr kürzlich von den beiden großen mobilen Browsern übernommen: Safari für iOS und Chrome für Android. Zuvor wurde es bereits 2012 in Firefox für Android implementiert und dann einige Monate später wieder entfernt (obwohl es immer noch über ein Flag verfügbar ist).
Fast sechs Jahre später implementierte Chrome für Android die Funktion – und mit der kürzlichen Veröffentlichung von iOS 12.2 unterstützt Safari es jetzt auch.
Diese Browser-Supportdaten stammen von Caniuse, wo weitere Details zu finden sind. Eine Zahl bedeutet, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 66 | 95 | Nein | 79 | Nein |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 12.2-12.5 |
Basierend auf meinen Tests wird inputmode tatsächlich in Opera Mini und Opera Mobile unterstützt, was den obigen Caniuse-Daten widerspricht. Ich habe mich gemeldet, um zu sehen, ob wir unsere Erkenntnisse synchronisieren können.
Bevor wir uns jedoch eingehend mit den Einzelheiten des Attributs befassen, sollten wir bedenken, dass der WHATWG Living Standard inputmode dokumentiert, während die W3C 5.2 Spezifikation es nicht mehr in ihrem Inhaltsverzeichnis aufführt, was darauf hindeutet, dass sie es als veraltet betrachten. Da WHATWG es dokumentiert hat und die Browser daran gearbeitet haben, es zu unterstützen, gehen wir davon aus, dass die WHATWG-Spezifikationen der Standard sind.
inputmode akzeptiert eine Reihe von Werten. Lassen Sie uns diese einzeln durchgehen.
Keine
<input type="text" inputmode="none" />
Wir beginnen hier, da es sehr gut möglich ist, dass wir keine Art von Tastatur für eine Eingabe wünschen. Die Verwendung von inputmode=none zeigt auf Chrome für Android überhaupt keine Tastatur an. iOS 12.2 zeigt immer noch die standardmäßige alphanumerische Tastatur an, sodass die Angabe none in dieser Hinsicht eine Art Reset für iOS sein könnte. Unabhängig davon ist none für Inhalte gedacht, die eigene Tastatursteuerungen rendern.
Numerisch
<input type="text" inputmode="numeric" />
Dies ist wahrscheinlich einer der gebräuchlichsten inputmode Werte da draußen, da er ideal für Eingaben ist, die Zahlen, aber keine Buchstaben erfordern – Dinge wie PIN-Eingabe, Postleitzahlen, Kreditkartennummern usw. Die Verwendung des numeric Werts mit einer Eingabe vom type="text" kann tatsächlich sinnvoller sein als die alleinige Einstellung der Eingabe auf type="number", denn im Gegensatz zu einem type="number" kann inputmode="numeric" mit den Attributen maxlength, minlength und pattern verwendet werden, was es für verschiedene Anwendungsfälle vielseitiger macht.

numeric Wert auf Chrome Android (links) und iOS 12.2 (rechts)Ich habe oft gesehen, dass Websites type=tel bei einer Eingabe verwenden, um eine numerische Tastatur anzuzeigen, und das stimmt als Workaround, ist aber semantisch nicht korrekt. Wenn Sie das stört, denken Sie daran, dass inputmode Muster unterstützt, wir können dem Input pattern="\d*" hinzufügen, um den gleichen Effekt zu erzielen. Das heißt, verwenden Sie dies nur, wenn Sie sicher sind, dass die Eingabe nur numerische Eingaben zulassen soll, da Android (im Gegensatz zu iOS) dem Benutzer nicht erlaubt, die Tastatur zu wechseln, um Buchstaben zu verwenden, was Benutzer versehentlich daran hindern könnte, gültige Daten einzureichen.
Tel
<input type="text" inputmode="tel" />
Die Eingabe einer Telefonnummer über eine Standard-alphanumerische Tastatur kann mühsam sein. Erstens repräsentiert jede Zahl auf einer Telefontastatur (außer 1 und 0) drei Buchstaben (z. B. 2 repräsentiert A, B und C), die mit der Zahl angezeigt werden. Die alphanumerische Tastatur referenziert diese Buchstaben nicht, sodass das Dekodieren einer Telefonnummer mit Buchstaben (z. B. 1-800-COLLECT) mehr Denkaufwand erfordert.

tel Wert auf Chrome Android (links) und iOS 12.2 (rechts)Die Verwendung von inputmode auf tel erzeugt eine standardmäßig aussehende Telefontastatur, einschließlich der Tasten für die Ziffern 0 bis 9, des Rautenzeichens (#) und des Sternchens (*). Außerdem erhalten wir diese alphabetischen Mnemotechnik-Beschriftungen (z. B. ABC).
Dezimal
<input type="text" inputmode="decimal" />

decimal Wert auf Chrome Android (links) und iOS 12.2 (rechts)Eine auf den Wert decimal gesetzte inputmode führt zu einer subtilen Änderung in iOS, wo die Tastatur exakt gleich aussieht wie bei tel wert, aber die Taste +*# durch einen einfachen Dezimalpunkt (.) ersetzt. Auf der anderen Seite hat dies keine Auswirkungen auf Android, das einfach die numeric Tastatur verwendet.
<input type="text" inputmode="email" />
Ich bin sicher, Sie (und mindestens ein Bekannter von Ihnen) haben ein Formular ausgefüllt, das nach einer E-Mail-Adresse fragt, und mussten dann die Tastatur wechseln, um auf das @ Zeichen zuzugreifen. Das ist nicht lebensbedrohlich oder so, aber sicherlich auch keine großartige Benutzererfahrung.
Dafür ist der email Wert da. Er bringt das @ Zeichen ins Spiel, sowie den Punkt (.). Zeichen.

email Wert auf Chrome Android (links) und iOS 12.2 (rechts)Dies könnte auch eine nützliche Tastatur für Benutzer sein, die einen Twitter-Benutzernamen eingeben müssen, da @ ein Kernzeichen von Twitter zur Identifizierung von Benutzern ist. Die E-Mail-Adressvorschläge, die iOS über der Tastatur anzeigt, könnten jedoch Verwirrung stiften.
Ein weiterer Anwendungsfall könnte sein, wenn Sie über ein eigenes Skript zur E-Mail-Validierung verfügen und die integrierte E-Mail-Validierung des Browsers nicht verwenden möchten.
URL
<input type="text" inputmode="url" />

url Wert auf Chrome Android (links) und iOS 12.2 (rechts)Der url Wert bietet eine praktische Abkürzung für Benutzer, um TLDs (z. B. .com oder .co.uk) mit einer einzigen Taste anzuhängen, sowie Tasten, die typischerweise in Webadressen verwendet werden, wie Punkt (.) und Schrägstrich (/). Die genaue TLD, die auf der Tastatur angezeigt wird, ist an die Locale des Benutzers gebunden.
Dies könnte auch eine nützliche Tastatur für Benutzer sein, wenn Ihre Eingabe Domainnamen (z. B. css-tricks.com) sowie vollständige URIs (z. B. https://css-tricks.de) akzeptiert. Verwenden Sie stattdessen type="url", wenn Ihre Eingabe die Validierung der Eingabe erfordert.
Suche
<input type="text" inputmode="search" />

search Wert auf Chrome Android (links) und iOS 12.2 (rechts)Dies zeigt eine blaue Go Taste auf iOS und eine grüne Enter Taste auf Android an, beide anstelle von Return. Wie Sie vielleicht am Namen des Wertes erraten haben, ist search für Suchformulare nützlich, da es die Submit-Taste liefert, um eine Anfrage zu stellen.
Wenn Sie auf iOS Search statt Enter und auf Android ein Lupensymbol anstelle des grünen Pfeils anzeigen möchten, verwenden Sie stattdessen type=search.
Andere Dinge, die Sie wissen sollten
- Chromium-basierte Browser unter Android – wie Microsoft Edge, Brave und Opera – teilen das gleiche
inputmodeVerhalten wie Chrome. - Ich habe keine Details zu den Tastaturen auf iPads aufgeführt, um die Kürze zu wahren. Es ist größtenteils dasselbe wie auf dem iPhone, enthält aber mehr Tasten. Dasselbe gilt für Android-Tablets, abgesehen von Drittanbieter-Tastaturen, was ein weiteres Thema sein könnte, das es wert ist, behandelt zu werden.
- Die ursprüngliche vorgeschlagene Spezifikation enthielt die Werte
kanaundkatakanafür die japanische Eingabe, aber sie wurden nie von einem Browser implementiert und wurden seitdem aus der Spezifikation entfernt. latin-namewar ebenfalls einer der Werte der ursprünglichen Spezifikation und wurde seitdem entfernt. Interessanterweise wird er, wenn er jetzt auf Safari für iOS verwendet wird, der Name des Benutzers als Vorschlag über der Tastatur angezeigt.

latin-name Wert zeigt meinen Namen als Auto-Fill-Vorschlag anDemo
Oh, Sie möchten selbst sehen, wie all diese Eingabemodi funktionieren? Hier ist eine Demo, die Sie auf einem Gerät mit Touchscreen-Tastatur verwenden können, um die Unterschiede zu sehen.
Danke! Das sind großartige Informationen und eine gründliche Beschreibung. Tolles Wissen.
(Ich habe das oben nicht gesehen, aber vielleicht habe ich es übersehen) – Wenn ich mir die von Ihnen bereitgestellte Demo ansehe, füge ich hinzu, dass ich bemerkt habe, dass diese auch die Long-Press-Shortcuts der Tastaturen beeinflussen, wie z. B. wenn Sie auf
.gedrückt halten – ob eine Liste von.com,.netusw. angezeigt wird, oder ob dies einen Shortcut für grammatikalische Symbole usw. aufruft.Nochmals vielen Dank. Toller Artikel und Referenz.
Gibt es einen Trick, um der Tastatur mitzuteilen, nur Kleinbuchstaben zu verwenden? Zum Beispiel bei URL- und E-Mail-Eingaben oben, wenn ich einfach anfange, die Informationen einzugeben, sehen die Eingaben wie folgt aus
[email protected]
http://example.com
Es ist keine große Sache, auf Shift zu drücken, aber ich möchte diesen Schritt für den Benutzer entfernen.
Hallo Jared. Ja, Sie können
autocapitalize=offdafür verwenden.Nur als Hinweis, das E-Mail-Feld zeigt kein Dezimaltrennzeichen an, es ist nur der Punkt. In anderen Sprachen, in denen das Dezimaltrennzeichen das Komma "," ist, erscheint der Punkt immer noch, da er zum Ausfüllen von E-Mails verwendet wird ;)
Danke, dass Sie darauf hingewiesen haben, Rafael! Wir haben den Artikel überarbeitet.
Toller Beitrag!
Wissen Sie, wie man "obwohl es immer noch über ein Flag verfügbar ist" aktiviert?
Sie müssen Inputmode nur über ein Flag in Firefox für Android aktivieren. Um dies zu tun, geben Sie
about:configin die Adressleiste ein, um dort die erweiterten Einstellungen anzuzeigen. Suchen Sie nach 'inputmode' und schalten Sie dann die Optiondom.forms.inputmodeein, und dann unterstützt Firefox für Android Inputmode genauso wie Chrome für Android!Interessant ist in Ihrem Beispiel für
input[inputmode="numeric"]zu beachten: Niederländische PIN-Codes sind tatsächlich alphanumerisch (ich lebe in7543AC), daher sollten wir uns vielleicht für diese auf einfachesinput[type="text"]beschränken.Dasselbe gilt für einige Postleitzahlen in der EU. Sie müssen nur Ihren Markt kennen und sich anpassen.
Hallo Anand Chowdhary – danke für das Feedback. Als ich erwähnte, dass
inputmode="numeric"gut für PINs ist, meinte ich PIN im Sinne von Personal Identification Number – wie eine 4-stellige Passcode, um sich zum Beispiel in ein System einzuloggen. Ich meinte nicht, dass es für Postleitzahlen geeignet sei.Schöner Artikel, Mann. Danke fürs Teilen
Was ist mit Datum und Uhrzeit?
Hallo Steve – Es gibt Eingabetypen für Datum und Uhrzeit (Sie können sie testen unter: https://inputtypes.com/ ), aber es gibt keine benutzerdefinierten Tastaturen dafür über inputmode.
Safari in iOS 13 unterstützt „none“. Die Tastatur verschwindet
ah ja, habe das gerade auf meinem iPad mit iPadOS 13 Beta bemerkt. Danke fürs Teilen!
Ihr Beispiel hat
inputmode=verbatimaber es wird in den obigen Definitionen nicht erwähnt. Wozu ist es gut?ah gut bemerkt. inputmode=verbatim war früher in der Spezifikation, wurde aber inzwischen entfernt – daher habe ich es auch von https://inputmodes.com/ entfernt.
iOS 15 Browser zeigt nicht immer den Punkt in
decimalEingaben an, aber es hängt von der Benutzeroberflächen-Locale ab!Selbst das Setzen von
lang="en-us"auf der Eingabe oder dem Root-Element liefert uns auf deutschen Handys keinen Punkt :-(Und ja, keine negativen Zahlen, da wir keine Minus-Taste haben…