InputEmail
Synonyme: E-Mail-Eingabefeld, E-Mail-Feld, Email Input, Email Field
Beschreibung: Mit InputEmail können eine oder mehrere E-Mail-Adressen eingegeben und bearbeitet werden.
Die Komponente basiert auf dem nativen HTML5-Eingabetyp email und profitiert dadurch von dessen Semantik, der browserseitigen Formatprüfung sowie der standardisierten Unterstützung durch Browser und assistive Technologien. Mobile Browser bieten für diesen Eingabetyp in der Regel eine angepasste Bildschirmtastatur an.
Beispiel
Standard-Eingabefeld für E-Mail-Adressen ohne optional gesetzte Felder:
<KolInputEmail _label="E-Mail-Adresse" />Barrierefreiheit
-
Das Eingabefeld muss mit einer aussagekräftigen Beschriftung versehen werden. Es darf visuell ausgeblendet werden, wenn der Zweck des Eingabefeldes durch den direkten visuellen Kontext absolut unmissverständlich ist.
-
Im Fehlerfall wird die Fehlermeldung direkt an der Komponente dargestellt und automatisch mit ihr verknüpft, sodass sie auch assistiven Technologien zur Verfügung steht.
-
Vorschlagswerte (
_suggestions) werden über die native Vorschlagsliste des Browsers bereitgestellt. Deren Unterstützung durch Browser und assistive Technologien ist uneinheitlich. Verlassen Sie sich bei unverzichtbaren Eingabehilfen daher nicht ausschließlich auf diese native Autovervollständigung. -
Der Zeichenzähler (
_hasCounter) wird Screenreader-Nutzenden nicht bei jedem Tastendruck, sondern gesammelt nach einer Eingabepause von etwa einer Sekunde angesagt, damit das Tippen nicht durch laufende Ansagen unterbrochen wird. Ist die Zeichengrenze bei_maxLengthBehavior="hard"erreicht, wird dies zusätzlich angesagt – auch bei jedem weiteren Eingabeversuch –, und beim erneuten Fokussieren des Feldes wird der aktuelle Zählerstand noch einmal ausgegeben. Ist nur_maxLengthohne Zähler gesetzt, erhalten Screenreader-Nutzende die maximale Zeichenanzahl als zusätzlichen Hinweis zum Feld.
Konkrete Designentscheidungen
| Entscheidung | Begründung |
|---|---|
Verwendung des nativen HTML5-Eingabetyps email | Die Komponente nutzt bewusst den nativen HTML5-Eingabetyp und profitiert dadurch von dessen standardisierter Unterstützung durch Browser und assistive Technologien. |
| Keine automatische Übernahme der nativen Formatprüfung | Ergebnisse der nativen Formatprüfung des Eingabetyps email werden nicht als Fehlermeldung am Feld angezeigt. Der Fehlerzustand wird ausschließlich über _msg in Verbindung mit _touched gesteuert. |
_multiple und _pattern als native Attribute | Die Prüfung mehrerer, durch Kommas getrennter Adressen sowie zusätzlicher Formatvorgaben übernimmt der Browser. Die Komponente teilt den Wert nicht selbst auf und ergänzt keinen eigenen Hinweis, dass mehrere Adressen erwartet werden. |
Links und Referenzen
Verwendung
- Verwenden Sie
_multiple, um die Eingabe mehrerer, durch Kommas getrennter E-Mail-Adressen zu ermöglichen. - Nutzen Sie
_pattern, wenn zusätzlich zur nativen E-Mail-Validierung weitere Formatvorgaben erforderlich sind. - Nutzen Sie
_maxLength, um die maximal zulässige Anzahl an Zeichen zu begrenzen, und legen Sie mit_maxLengthBehaviorfest, ob die Grenze nativ durchgesetzt ('hard', Standard) oder lediglich angezeigt wird ('soft'). - Setzen Sie
_autoCompleteauf'email', wenn der Browser gespeicherte E-Mail-Adressen vorschlagen soll. Der Standardwert ist'off'.
Hinweis: Die native Formatprüfung des HTML5-Eingabetyps email erfolgt unabhängig von _msg und _touched. Sollen Validierungsfehler in der Komponente angezeigt werden, müssen diese durch die Anwendung ausgewertet und über _msg bereitgestellt werden.
Tastatursteuerung
Die Tastaturbedienung wird durch den Browser und das Betriebssystem bestimmt. Daher können sich einzelne Tastaturfunktionen je nach Browser und Endgerät unterscheiden.
Typischerweise werden folgende Funktionen unterstützt:
| Taste | Funktion |
|---|---|
Tab | Fokus auf das Eingabefeld bzw. das nächste fokussierbare Element setzen. |
Shift+Tab | Fokus auf das vorherige fokussierbare Element setzen. |
Pfeil-Tasten (links/rechts) | Cursor innerhalb des Eingabewerts bewegen. |
Pfeil-Tasten (oben/unten) | Bei gesetzten Vorschlagswerten (_suggestions): Vorschlagsliste öffnen und durchlaufen. |
Pos1 / Ende | Cursor an den Anfang bzw. das Ende des Eingabewerts setzen. |
Enter | Umgebendes Formular absenden. |
Hinweis: Das Absenden per Enter wird von KoliBri ergänzt, da das native Element im Shadow DOM der Komponente liegt: Befindet sich die Komponente innerhalb eines form- bzw. kol-form-Elements, sucht sie dieses – auch über Shadow-DOM-Grenzen hinweg – und löst dort das Absenden aus.
Best Practices / Empfehlungen
- Verlassen Sie sich nicht ausschließlich auf die native Formatprüfung des Browsers. Werten Sie Validierungsfehler in der Anwendung aus und stellen Sie über
_msgzusammen mit_touchedeine aussagekräftige Fehlermeldung bereit. - Formulieren Sie Fehlermeldungen konkret und lösungsorientiert, damit Nutzende erkennen können, wie die eingegebene E-Mail-Adresse korrigiert werden muss.
- Verwenden Sie
_patternnur für fachlich notwendige zusätzliche Anforderungen, beispielsweise wenn ausschließlich E-Mail-Adressen einer bestimmten Domain zulässig sind. Beschreiben Sie diese Anforderung zusätzlich über_hint. - Weisen Sie bei Verwendung von
_multipleüber die Beschriftung oder_hintdeutlich darauf hin, dass mehrere E-Mail-Adressen durch Kommas getrennt eingegeben werden können. - Setzen Sie
_autoCompletepassend zum Anwendungsfall ein, beispielsweise mit dem Wert'email', damit Browser die Eingabe unterstützen können. - Verwenden Sie
_placeholderausschließlich als zusätzliche Orientierung und nicht als Ersatz für eine aussagekräftige Beschriftung (_label).
Anwendungsfälle
- Eingabe einer E-Mail-Adresse in Kontakt-, Registrierungs- oder Anmeldeformularen
- Erfassung einer geschäftlichen oder privaten E-Mail-Adresse in Benutzerprofilen
- Eingabe einer Empfängeradresse für Benachrichtigungen oder den Versand von Informationen
- Erfassung mehrerer E-Mail-Adressen, beispielsweise für Einladungen oder Verteiler
- Eingabe einer E-Mail-Adresse zur Anmeldung für Newsletter oder andere Mitteilungen
FAQ
Wie kann ich Validierungsfehler barrierefrei anzeigen?
Die native Formatprüfung des HTML5-Eingabetyps email ersetzt keine barrierefreie Fehlermeldung. Werten Sie das Ergebnis der Validierung in Ihrer Anwendung aus und stellen Sie Validierungsfehler über _msg zusammen mit _touched bereit. Die Meldung wird dann automatisch mit dem Feld verknüpft und das Feld als ungültig gekennzeichnet.
Wie werden mehrere E-Mail-Adressen bei _multiple verarbeitet?
Der Wert des Eingabefelds enthält weiterhin den vollständigen, durch Kommas getrennten String. Eine automatische Aufteilung in einzelne E-Mail-Adressen erfolgt nicht durch die Komponente.
Werden internationalisierte (Unicode-)E-Mail-Adressen unterstützt?
Die Komponente nutzt die native Browservalidierung des HTML5-Eingabetyps email. Ob internationalisierte E-Mail-Adressen unterstützt werden, hängt daher vom jeweiligen Browser ab.
Kann ich die native E-Mail-Validierung erweitern?
Ja. Nutzen Sie _pattern, wenn zusätzlich zur nativen E-Mail-Validierung weitere fachliche Anforderungen geprüft werden sollen, beispielsweise um E-Mail-Adressen auf bestimmte Domains einzuschränken. Bei gesetztem _multiple prüft der Browser das Muster für jede einzelne Adresse.
Playground
Testen Sie die verschiedenen Eigenschaften des InputEmail-Feldes:
<KolInputEmail _label="E-Mail-Adresse" />Funktionalitäten
Einfaches Eingabefeld
Jedes Feld benötigt mindestens ein Label (_label), um für alle Nutzenden verständlich und zugänglich zu sein. Das Label wird als natives label-Element mit dem Feld verknüpft.
<KolInputEmail _label="E-Mail-Adresse" />Formularattribute
Mit den folgenden Properties passen Sie das Feld an gängige Formularanforderungen an:
-
_disabled: Deaktiviert das Feld. Deaktivierte Felder sind nicht fokussierbar und können nicht bearbeitet werden (mit Bedacht verwenden!). -
_readOnly: Verhindert die Bearbeitung des Feldes. Das Feld bleibt fokussierbar und lesbar. Hinter der Beschriftung erscheint zusätzlich der Hinweis „(schreibgeschützt)“; er ist vor assistiven Technologien verborgen, da der Zustand bereits über das nativereadonly-Attribut vermittelt wird. -
_required: Kennzeichnet das Feld als Pflichtfeld.
Die Properties werden 1:1 auf die gleichnamigen nativen HTML-Attribute des input-Elements übertragen.
Hinweis: _name wird als HTML-Attribut name verwendet und ist wichtig für das Absenden des Formulars.
<KolInputEmail _label="E-Mail-Adresse" />Hinweistexte und Fehlermeldungen
Mit _hint und _msg geben Sie Nutzenden zusätzliche Orientierung zur Eingabe und machen Validierungsfehler unmittelbar am Feld sichtbar:
_hint: Ergänzende Hinweise zur Eingabe (wird immer angezeigt und überaria-describedbymit dem Feld verknüpft)_msg: Fehlermeldungen oder Validierungshinweise (wird nur in Verbindung mit_touchedangezeigt)_touched: Zeigt an, ob das Feld von Nutzenden bereits angefasst wurde, und steuert damit, ob_msgsichtbar wird_hideMsg: Unterdrückt die Fehlermeldung am Feld, wenn sie an anderer Stelle dargestellt wird
Hinweis: _msg wird erst dann eingeblendet, wenn _touched auf true gesetzt ist. So werden Validierungsfehler nicht bereits beim ersten Rendern, sondern erst nach einer Interaktion mit dem Feld angezeigt. Handelt es sich um eine Fehlermeldung, wird das Feld zusätzlich über aria-invalid als ungültig gekennzeichnet.
Anwendungsfall für _hideMsg: Besteht eine fachliche Einheit aus mehreren Eingabefeldern innerhalb eines Field-Sets, beispielsweise ein sechsstelliger Bestätigungscode mit einem einzelnen Feld je Stelle, kann eine gemeinsame Fehlermeldung für die gesamte Gruppe sinnvoller sein als eine Meldung je Einzelfeld. In diesem Fall unterdrücken Sie die Fehlermeldung an den einzelnen Feldern über _hideMsg und stellen sie stattdessen einmalig am Field-Set dar.
Wichtig: _hideMsg blendet die Fehlermeldung nicht nur visuell aus. Die Meldung wird weder gerendert noch über aria-describedby mit dem Feld verknüpft – lediglich die Kennzeichnung über aria-invalid bleibt erhalten. Stellen Sie daher sicher, dass die gemeinsame Fehlermeldung auf Anwendungsebene für alle Nutzenden, auch für Nutzende assistiver Technologien, wahrnehmbar ist.
<KolInputEmail _hideMsg={false} _hint="Wir verwenden Ihre E-Mail-Adresse nur für Benachrichtigungen." _label="E-Mail-Adresse" _msg={{ "_description": "Bitte geben Sie eine gültige E-Mail-Adresse ein, z. B. name@beispiel.de." }} _touched={true} />Mehrere E-Mail-Adressen
Mit _multiple akzeptiert das Feld mehrere, durch Kommas getrennte E-Mail-Adressen. Die Eigenschaft wird als natives Attribut multiple übergeben; der Browser prüft dann jede einzelne Adresse. Der Wert des Feldes bleibt ein einzelner, kommagetrennter String. Die Eingabe mehrerer, durch Komma getrennter E-Mail-Adressen wird dabei entsprechend an assistive Technologien kommuniziert. Weisen Sie Nutzende über _hint auf die erwartete Schreibweise hin.
<KolInputEmail _hint="Mehrere Adressen durch Kommas trennen" _label="E-Mail-Adressen" _multiple={true} />Zusätzliche Formatvorgaben
Mit _pattern hinterlegen Sie einen regulären Ausdruck, dem die Eingabe zusätzlich zur nativen E-Mail-Prüfung entsprechen muss – beispielsweise, um nur Adressen einer bestimmten Domain zuzulassen. Die Eigenschaft wird als natives Attribut pattern übergeben. Die Komponente zeigt das Prüfergebnis nicht selbst an; Fehlermeldungen stellen Sie über _msg bereit.
<KolInputEmail _hint="Nur Adressen der Domain beispiel.de" _label="Dienstliche E-Mail-Adresse" _pattern=".+@beispiel\.de" />Zeichenbegrenzung und Zeichenzähler
Mit _maxLength, _maxLengthBehavior und _hasCounter begrenzen Sie die Eingabelänge und geben Nutzenden gleichzeitig Rückmeldung über die bereits eingegebenen bzw. noch verfügbaren Zeichen.
Properties
| Property | Typ | Standard | Beschreibung |
|---|---|---|---|
_hasCounter | boolean | false | Blendet den Zeichenzähler ein. Ohne dieses Property wird kein Zähler ausgegeben. |
_maxLength | number | – | Maximale Anzahl erlaubter Zeichen. |
_maxLengthBehavior | 'hard' | 'soft' | 'hard' | Legt fest, wie die Grenze aus _maxLength behandelt wird:- hard: Setzt das native maxlength-Attribut und verhindert weitere Eingaben – auch ohne Zähler.- soft: Lässt weitere Eingaben zu; der Zähler zeigt verbleibende bzw. überschrittene Zeichen an. |
Ausgabevarianten des Zählers
| Fall | _hasCounter | _maxLength | _maxLengthBehavior | Sichtbarer Text |
|---|---|---|---|---|
| 1 | (leer) oder false | – | – | – (kein Zähler) |
| 2 | true | (leer) | (leer) oder hard | n Zeichen |
| 3 | true | 50 | (leer) oder hard | n/50 Zeichen |
| 4 | true | 50 | soft | noch 30 Zeichen verfügbar(bzw. 5 Zeichen zu viel) |
Hinweis: Bei _maxLengthBehavior="soft" wird das native maxlength-Attribut nicht gesetzt. Die Einhaltung der Zeichengrenze muss dann auf Anwendungsebene validiert werden. Ohne _maxLength wird bei soft kein Zähler angezeigt.
<KolInputEmail _hasCounter={true} _label="E-Mail-Adresse" _maxLength={100} />Autovervollständigung
Mit _autoComplete steuern Sie, ob der Browser gespeicherte E-Mail-Adressen vorschlagen darf. Der Standardwert ist 'off'. Für Felder, bei denen die Browser-Autovervollständigung erwünscht ist, setzen Sie den Autocomplete-Token 'email'.
<KolInputEmail _autoComplete="email" _label="E-Mail-Adresse" />Placeholder
Mit _placeholder zeigen Sie einen Platzhaltertext an, solange noch kein Wert eingegeben bzw. ausgewählt ist – etwa ein Format- oder Eingabebeispiel. Der Platzhalter ist kein Ersatz für die Beschriftung (_label), da er nach der Eingabe verschwindet und von assistiven Technologien nicht zuverlässig ausgegeben wird.
<KolInputEmail _label="E-Mail-Adresse" _placeholder="z. B. name@beispiel.de" />Label ausblenden
Mit _hideLabel blenden Sie das Label visuell aus, um das Feld kompakter zu gestalten. Für assistive Technologien bleibt die Beschriftung als zugänglicher Name (aria-label) weiterhin verfügbar; sehende Nutzende erhalten sie bei Maus-Hover und Tastaturfokus als Tooltip.
<KolInputEmail _hideLabel={false} _label="E-Mail-Adresse" />Icons
Mit _icons versehen Sie das Feld links und/oder rechts mit zusätzlichen Icons, um visuellen Kontext zu geben.
Verfügbare Positionen sind:
left: Icon links vom Feldright: Icon rechts vom Feld
Wird ein Icon nur über seine Icon-Klasse angegeben, gilt es als dekorativ und wird vor assistiven Technologien verborgen. Trägt ein Icon eine Information, die nicht bereits aus Label oder Hinweis hervorgeht, übergeben Sie es als Objekt mit label – das Icon erhält dann eine zugängliche Beschriftung.
<KolInputEmail _icons={{ "left": "kolicon-kolibri" }} _label="E-Mail-Adresse" />SmartButton
Mit _smartButton platzieren Sie einen Button mit beliebiger Aktion direkt im Eingabefeld, etwa um eine zugehörige Funktion griffbereit anzubieten. Der SmartButton wird immer als Icon-Button ohne sichtbare Beschriftung dargestellt; sein _label dient als zugänglicher Name und muss die Aktion daher eindeutig beschreiben. Der SmartButton ist per Tastatur erreichbar und wird zusammen mit dem Feld deaktiviert (_disabled).
<KolInputEmail _label="Mit SmartButton" _placeholder="Platzhalter" _smartButton={{ "_label": "Action" }} />Vorschlagswerte (Suggestions)
Mit _suggestions schlagen Sie Nutzenden häufig verwendete Werte vor, um die Eingabe zu beschleunigen. Die Vorschläge werden über das native HTML-Element datalist bereitgestellt. Darstellung und Bedienung der Vorschlagsliste hängen daher vom Browser ab.
<KolInputEmail _label="E-Mail-Adresse" _suggestions={[ "info@beispiel.de", "kontakt@beispiel.de", "service@beispiel.de" ]} />API
Events
Zur Behandlung von Events bzw. Callbacks siehe
| Event | Auslöser | Value |
|---|---|---|
click | Eingabefeld wird angeklickt | - |
focus | Eingabefeld wird fokussiert | - |
blur | Eingabefeld verliert Fokus | - |
keydown | Taste wird im Eingabefeld gedrückt | - |
input | Wert wird durch Eingabe geändert | Aktueller Wert des Eingabefelds |
change | Eingabe wurde abgeschlossen | Aktueller Wert des Eingabefelds |
Overview
The Email input type creates an input field for email addresses. It supports built-in format validation, multiple addresses via the _multiple property, and auto-complete suggestions.
Properties
| Property | Attribute | Description | Type | Default |
|---|---|---|---|---|
_accessKey | _access-key | Defines the key combination that can be used to trigger or focus the component's interactive element. | string | undefined | undefined |
_ariaDetails | _aria-details | References an external element by ID that provides accessible details for this input. Uses ElementInternals.ariaDetailsElements to cross the Shadow DOM boundary. Supported by desktop screen readers (NVDA, JAWS with Chrome/Firefox). Not yet supported by mobile screen readers (TalkBack, VoiceOver iOS). | string | undefined | undefined |
_autoComplete | _auto-complete | Defines whether the input can be auto-completed. | string | undefined | 'off' |
_disabled | _disabled | Makes the element not focusable and ignore all events. | boolean | undefined | false |
_hasCounter | _has-counter | Shows a character counter for the input element. | boolean | undefined | false |
_hideLabel | _hide-label | Hides the caption by default and displays the caption text with a tooltip when the interactive element is focused or the mouse is over it. | boolean | undefined | false |
_hideMsg | _hide-msg | Hides the error message but leaves it in the DOM for the input's aria-describedby. | boolean | undefined | false |
_hint | _hint | Defines the hint text. | string | undefined | '' |
_icons | _icons | Defines the icon classnames. | string | undefined | { right?: IconOrIconClass | undefined; left?: IconOrIconClass | undefined; } | undefined |
_infoPopover | _info-popover | Defines the informational popover after the label. | any | undefined |
_label (required) | _label | Defines the visible or semantic label of the component (e.g. aria-label, label, headline, caption, summary, etc.). Set to false to enable the expert slot. | string | undefined |
_maxLength | _max-length | Defines the maximum number of input characters. | number | undefined | undefined |
_maxLengthBehavior | _max-length-behavior | Defines the behavior when maxLength is set. 'hard' sets the maxlength attribute, 'soft' shows a character counter without preventing input. | "hard" | "soft" | undefined | 'hard' |
_msg | _msg | Defines the properties for a message rendered as Alert component. | Omit<AlertProps, "_on" | "_label" | "_level" | "_variant" | "_hasCloser"> & { _description: string; } | string | undefined | undefined |
_multiple | _multiple | Makes the input accept multiple inputs. | boolean | undefined | false |
_name | _name | Defines the technical name of an input field. | string | undefined | undefined |
_on | -- | Gibt die EventCallback-Funktionen für das Input-Event an. | InputTypeOnBlur & InputTypeOnClick & InputTypeOnChange & InputTypeOnFocus & InputTypeOnInput & InputTypeOnKeyDown | undefined | undefined |
_pattern | _pattern | Defines a validation pattern for the input field. | string | undefined | undefined |
_placeholder | _placeholder | Defines the placeholder for input field. To be shown when there's no value. | string | undefined | undefined |
_readOnly | _read-only | Makes the input element read only. | boolean | undefined | false |
_required | _required | Makes the input element required. | boolean | undefined | false |
_shortKey | _short-key | Adds a visual shortcut hint after the label and instructs the screen reader to read the shortcut aloud. | string | undefined | undefined |
_smartButton | _smart-button | Allows to add a button with an arbitrary action within the element (_hide-label only). | string | undefined | { _label: string; } & { _ariaExpanded?: boolean | undefined; _tabIndex?: number | undefined; _value?: StencilUnknown; _accessKey?: string | undefined; _role?: "tab" | "treeitem" | undefined; _ariaControls?: string | undefined; _ariaDescription?: string | undefined; _ariaSelected?: boolean | undefined; _on?: ButtonCallbacksPropType<StencilUnknown> | undefined; _type?: "button" | "reset" | "submit" | undefined; _variant?: VariantClassNamePropType | undefined; _customClass?: string | undefined; _disabled?: boolean | undefined; _hideLabel?: boolean | undefined; _icons?: IconsPropType | undefined; _id?: string | undefined; _inline?: boolean | undefined; _name?: string | undefined; _shortKey?: string | undefined; _syncValueBySelector?: string | undefined; _tooltipAlign?: AlignPropType | undefined; } | undefined |
_suggestions | _suggestions | Suggestions to provide for the input. | W3CInputValue[] | string | undefined | undefined |
_tooltipAlign | _tooltip-align | Defines where to show the Tooltip preferably: top, right, bottom or left. | "bottom" | "left" | "right" | "top" | undefined | 'top' |
_touched | _touched | Shows if the input was touched by a user. | boolean | undefined | false |
_value | _value | Defines the value of the element. | string | undefined | undefined |
_variant | _variant | Defines which variant should be used for presentation. | string | string[] | undefined | undefined |
Methods
click
click() => Promise<void>
Clicks the primary interactive element inside this component.
Returns
Type: Promise<void>
focus(options?: KolFocusOptions) => Promise<void>
Sets focus on the internal element.
Parameters
| Name | Type | Description |
|---|---|---|
options | KolFocusOptions | undefined |
Returns
Type: Promise<void>
getValue() => Promise<string | undefined>
Returns the current value.
Returns
Type: Promise<string | undefined>
Slots
| Slot | Description |
|---|---|
| The label of the input field. | |
"expert" | Custom label content, e.g. for rich text or icons. https://public-ui.github.io/docs/concepts/expert-slot |