Beispiele und Verwendungsrichtlinien für Formularsteuerelementstile, Layoutoptionen und benutzerdefinierte Komponenten zum Erstellen einer Vielzahl von Formularen.
Überblick
Die Formularsteuerelemente von Bootstrap erweitern unsere Rebooted-Formularstile um Klassen. Verwenden Sie diese Klassen, um ihre benutzerdefinierten Anzeigen für eine konsistentere Wiedergabe über Browser und Geräte hinweg zu aktivieren.
Stellen Sie sicher, dass Sie für alle Eingaben (z. B. für E-Mail-Adressen oder numerische Informationen) ein geeignetes typeAttribut verwenden , um neuere Eingabekontrollen wie E-Mail-Verifizierung, Nummernauswahl und mehr zu nutzen.emailnumber
Hier ist ein kurzes Beispiel, um die Formularstile von Bootstrap zu demonstrieren. Lesen Sie weiter, um Informationen zu erforderlichen Klassen, Formularlayouts und mehr zu erhalten.
Formularsteuerelemente
Steuerelemente für Textformulare – wie <input>s, <select>s und <textarea>s – werden mit der .form-controlKlasse gestaltet. Enthalten sind Stile für das allgemeine Erscheinungsbild, den Fokuszustand, die Größe und mehr.
Tauschen Sie für Dateieingaben die .form-controlfür .form-control-file.
Dimensionierung
Stellen Sie Höhen mit Klassen wie .form-control-lgund ein .form-control-sm.
Schreibgeschützt
Fügen Sie das readonlyboolesche Attribut zu einer Eingabe hinzu, um eine Änderung des Eingabewerts zu verhindern. Schreibgeschützte Eingaben erscheinen heller (genau wie deaktivierte Eingaben), behalten aber den Standard-Cursor bei.
Schreibgeschützter Klartext
Wenn Sie möchten, dass <input readonly>Elemente in Ihrem Formular als reiner Text formatiert sind, verwenden Sie die .form-control-plaintextKlasse, um die Standardformatierung von Formularfeldern zu entfernen und den korrekten Rand und Abstand beizubehalten.
Bereichseingänge
Horizontal scrollbare Bereichseingaben mit einstellen .form-control-range.
Kontrollkästchen und Radios
Standard-Checkboxen und Radios werden mit Hilfe von verbessert .form-check, einer einzigen Klasse für beide Eingabetypen, die das Layout und Verhalten ihrer HTML-Elemente verbessert . Kontrollkästchen dienen zum Auswählen einer oder mehrerer Optionen in einer Liste, während Radios zum Auswählen einer Option aus vielen dienen.
Deaktivierte Kontrollkästchen und Optionsfelder werden unterstützt, aber um einen not-allowedCursor beim Bewegen des übergeordneten Elements bereitzustellen, müssen Sie das Attribut zum <label>hinzufügen . Das deaktivierte Attribut wendet eine hellere Farbe an, um den Status der Eingabe anzuzeigen.disabled.form-check-input
Die Verwendung von Kontrollkästchen und Optionsfeldern wurde entwickelt, um die HTML-basierte Formularvalidierung zu unterstützen und prägnante, zugängliche Beschriftungen bereitzustellen. Daher sind unsere <input>s und <label>s Geschwisterelemente im Gegensatz zu an <input>innerhalb von a <label>. Dies ist etwas ausführlicher, da Sie idund for-Attribute angeben müssen, um die und in Beziehung zu <input>setzen <label>.
Standard (gestapelt)
Standardmäßig wird eine beliebige Anzahl von Kontrollkästchen und Radios, die unmittelbare Geschwister sind, vertikal gestapelt und mit einem angemessenen Abstand versehen .form-check.
In der Reihe
Gruppieren Sie Kontrollkästchen oder Optionsfelder in derselben horizontalen Reihe, indem Sie sie .form-check-inlinezu beliebigen hinzufügen .form-check.
Ohne Etiketten
.position-staticZu Eingaben hinzufügen , .form-checkdie keinen Beschriftungstext haben. Denken Sie daran, immer noch eine Art Bezeichnung für Hilfstechnologien bereitzustellen (z. B. mit aria-label).
Layout
Da Bootstrap für fast alle unsere Formularsteuerelemente gilt, werden Formulare standardmäßig vertikal gestapelt display: block. width: 100%Zusätzliche Klassen können verwendet werden, um dieses Layout auf einer Per-Form-Basis zu variieren.
Gruppen bilden
Die .form-groupKlasse ist der einfachste Weg, Formularen Struktur zu verleihen. Es bietet eine flexible Klasse, die die richtige Gruppierung von Bezeichnungen, Steuerelementen, optionalem Hilfetext und Nachrichten zur Formularvalidierung fördert. Standardmäßig gilt nur margin-bottom, aber es werden zusätzliche Stile nach .form-inlineBedarf übernommen. Verwenden Sie es mit <fieldset>s, <div>s oder fast jedem anderen Element.
Raster bilden
Komplexere Formulare können mit unseren Rasterklassen erstellt werden. Verwenden Sie diese für Formularlayouts, die mehrere Spalten, unterschiedliche Breiten und zusätzliche Ausrichtungsoptionen erfordern.
Reihe bilden
.rowSie können auch gegen tauschen .form-row, eine Variante unserer Standardrasterzeile, die die standardmäßigen Spaltenstege für engere und kompaktere Layouts überschreibt.
Mit dem Rastersystem können auch komplexere Layouts erstellt werden.
Horizontale Form
Erstellen Sie horizontale Formulare mit dem Raster, indem Sie die .rowKlasse zu Formgruppen hinzufügen und die .col-*-*Klassen verwenden, um die Breite Ihrer Beschriftungen und Steuerelemente anzugeben. Stellen Sie sicher, dass Sie .col-form-labelIhre <label>s auch so hinzufügen, dass sie mit ihren zugehörigen Formularsteuerelementen vertikal zentriert sind.
Manchmal müssen Sie vielleicht Hilfsprogramme für Ränder oder Auffüllungen verwenden, um die perfekte Ausrichtung zu erzielen, die Sie benötigen. Beispielsweise haben wir das padding-topEtikett unserer gestapelten Radioeingänge entfernt, um die Textgrundlinie besser auszurichten.
Größe des horizontalen Formularetiketts
Stellen Sie sicher, dass Sie .col-form-label-smoder .col-form-label-lgzu Ihrem <label>s oder <legend>s verwenden, um die Größe von .form-control-lgund korrekt einzuhalten .form-control-sm.
Spaltengröße
Wie in den vorherigen Beispielen gezeigt, erlaubt Ihnen unser Rastersystem, eine beliebige Anzahl von .cols innerhalb eines .rowoder zu platzieren .form-row. Sie werden die verfügbare Breite gleichmäßig zwischen ihnen aufteilen. Sie können auch eine Teilmenge Ihrer Spalten auswählen, um mehr oder weniger Platz einzunehmen, während die verbleibenden .cols den Rest gleichmäßig aufteilen, mit bestimmten Spaltenklassen wie .col-7.
Automatische Größenanpassung
Das folgende Beispiel verwendet ein Flexbox-Dienstprogramm, um den Inhalt vertikal zu zentrieren, und ändert .colsich zu, .col-autosodass Ihre Spalten nur so viel Platz wie nötig beanspruchen. Anders ausgedrückt: Die Spaltengröße richtet sich nach dem Inhalt.
Sie können das dann noch einmal mit größenspezifischen Spaltenklassen remixen.
Verwenden Sie die .form-inlineKlasse, um eine Reihe von Beschriftungen, Formularsteuerelementen und Schaltflächen in einer einzelnen horizontalen Zeile anzuzeigen. Formularsteuerelemente in Inline-Formularen weichen leicht von ihren Standardzuständen ab.
Steuerelemente sind display: flex, reduzieren alle HTML-Leerzeichen und ermöglichen es Ihnen, die Ausrichtung mit Abstands- und Flexbox- Dienstprogrammen zu steuern.
Steuerelemente und Eingabegruppen erhalten width: auto, um den Bootstrap-Standard zu überschreiben width: 100%.
Steuerelemente werden nur in Viewports mit einer Breite von mindestens 576 Pixel angezeigt , um schmale Viewports auf Mobilgeräten zu berücksichtigen.
Möglicherweise müssen Sie die Breite und Ausrichtung einzelner Formularsteuerelemente manuell mit Abstandsdienstprogrammen adressieren (wie unten gezeigt). Stellen Sie schließlich sicher, dass Sie immer ein <label>in jedes Formularsteuerelement einfügen, selbst wenn Sie es vor Nicht-Screenreader-Besuchern mit ausblenden müssen .sr-only.
Benutzerdefinierte Formularsteuerelemente und -auswahlen werden ebenfalls unterstützt.
Alternativen zu versteckten Labels
Hilfstechnologien wie Screenreader werden Probleme mit Ihren Formularen haben, wenn Sie nicht für jede Eingabe eine Bezeichnung einfügen. Bei diesen Inline-Formularen können Sie die Beschriftungen mithilfe der .sr-onlyKlasse ausblenden. Es gibt weitere alternative Verfahren zum Bereitstellen einer Kennzeichnung für Hilfstechnologien, wie z. B. das aria-label, aria-labelledbyoder title-Attribut. Wenn keines davon vorhanden ist, können Hilfstechnologien auf die Verwendung des placeholderAttributs zurückgreifen, falls vorhanden, aber beachten Sie, dass die Verwendung von placeholderals Ersatz für andere Kennzeichnungsmethoden nicht empfohlen wird.
Hilfstext
Hilfetext auf Blockebene in Formularen kann mit .form-text(früher bekannt als .help-blockin v3) erstellt werden. Inline-Hilfetext kann flexibel mit jedem Inline-HTML-Element und Hilfsklassen wie .text-muted.
Zuordnen von Hilfetext zu Formularsteuerelementen
Hilfetext sollte explizit mit dem Formularsteuerelement verknüpft werden, auf das er sich bezieht, indem das aria-describedbyAttribut verwendet wird. Dadurch wird sichergestellt, dass unterstützende Technologien wie Bildschirmlesegeräte diesen Hilfetext ankündigen, wenn der Benutzer das Steuerelement fokussiert oder eingibt.
Hilfetext unter Eingaben kann mit gestaltet werden .form-text. Diese Klasse enthält display: blockund fügt einen oberen Rand hinzu, um den Abstand zu den obigen Eingaben zu erleichtern.
Ihr Passwort muss 8-20 Zeichen lang sein, Buchstaben und Zahlen enthalten und darf keine Leerzeichen, Sonderzeichen oder Emojis enthalten.
Inline-Text kann jedes typische Inline-HTML-Element (sei es ein <small>, <span>, oder etwas anderes) mit nichts anderem als einer Hilfsklasse verwenden.
Deaktivierte Formulare
Fügen Sie das disabledboolesche Attribut zu einer Eingabe hinzu, um Benutzerinteraktionen zu verhindern und sie heller erscheinen zu lassen.
Fügen Sie das disabledAttribut zu a <fieldset>hinzu, um alle darin enthaltenen Steuerelemente zu deaktivieren.
Vorbehalt mit Ankern
Standardmäßig behandeln Browser alle nativen Formularsteuerelemente ( <input>, <select>und <button>-Elemente) innerhalb von <fieldset disabled>als deaktiviert, wodurch sowohl Tastatur- als auch Mausinteraktionen auf ihnen verhindert werden. Wenn Ihr Formular jedoch auch <a ... class="btn btn-*">Elemente enthält, erhalten diese nur den Stil pointer-events: none. Wie im Abschnitt über den deaktivierten Zustand für Schaltflächen (und insbesondere im Unterabschnitt für Ankerelemente) erwähnt, ist diese CSS-Eigenschaft noch nicht standardisiert und wird in Internet Explorer 10 nicht vollständig unterstützt und hindert Tastaturbenutzer nicht daran in der Lage, diese Links zu fokussieren oder zu aktivieren. Verwenden Sie also sicherheitshalber benutzerdefiniertes JavaScript, um solche Links zu deaktivieren.
Cross-Browser-Kompatibilität
Während Bootstrap diese Stile in allen Browsern anwendet, unterstützen Internet Explorer 11 und darunter das disabledAttribut auf einer <fieldset>. Verwenden Sie benutzerdefiniertes JavaScript, um das Feldset in diesen Browsern zu deaktivieren.
Validierung
Geben Sie Ihren Benutzern wertvolles, umsetzbares Feedback mit der HTML5-Formularvalidierung – verfügbar in allen von uns unterstützten Browsern . Wählen Sie aus dem Standard-Validierungsfeedback des Browsers oder implementieren Sie benutzerdefinierte Nachrichten mit unseren integrierten Klassen und Starter-JavaScript.
Wir empfehlen derzeit die Verwendung benutzerdefinierter Validierungsstile, da die Standard-Validierungsmeldungen des nativen Browsers nicht in allen Browsern (insbesondere Chrome auf dem Desktop und auf Mobilgeräten) konsistent für Hilfstechnologien verfügbar sind.
Wie es funktioniert
So funktioniert die Formularvalidierung mit Bootstrap:
Die HTML-Formularvalidierung wird über die beiden Pseudoklassen von CSS :invalidund :valid. Es gilt für <input>, <select>, und <textarea>Elemente.
Bootstrap ordnet die Stile :invalidund :validder übergeordneten .was-validatedKlasse zu, die normalerweise auf die <form>. Andernfalls wird jedes erforderliche Feld ohne Wert beim Laden der Seite als ungültig angezeigt. Auf diese Weise können Sie auswählen, wann sie aktiviert werden sollen (normalerweise nachdem versucht wurde, das Formular einzureichen).
Um das Erscheinungsbild des Formulars zurückzusetzen (z. B. bei dynamischen Formularübermittlungen mit AJAX), entfernen Sie die .was-validatedKlasse <form>nach der Übermittlung wieder aus der.
Als Fallback können statt der Pseudo-Klassen auch Klassen für die .is-invalidserverseitige Validierung verwendet werden . Sie benötigen keine Elternklasse ..is-valid.was-validated
Aufgrund von Einschränkungen bei der Funktionsweise von CSS können wir (derzeit) <label>ohne die Hilfe von benutzerdefiniertem JavaScript keine Stile auf ein anwenden, das vor einem Formularsteuerelement im DOM steht.
Alle modernen Browser unterstützen die Constraint Validation API , eine Reihe von JavaScript-Methoden zur Validierung von Formularsteuerelementen.
Feedback-Nachrichten können die Browser-Standardeinstellungen (je nach Browser unterschiedlich und nicht per CSS anpassbar) oder unsere benutzerdefinierten Feedback-Stile mit zusätzlichem HTML und CSS verwenden.
setCustomValiditySie können in JavaScript benutzerdefinierte Gültigkeitsmeldungen bereitstellen .
Betrachten Sie vor diesem Hintergrund die folgenden Demos für unsere benutzerdefinierten Formularvalidierungsstile, optionalen serverseitigen Klassen und Browserstandards.
Benutzerdefinierte Stile
Für benutzerdefinierte Bootstrap-Formularvalidierungsmeldungen müssen Sie das novalidateboolesche Attribut zu Ihrer <form>. Dadurch werden die standardmäßigen Feedback-QuickInfos des Browsers deaktiviert, es wird jedoch weiterhin Zugriff auf die Formularvalidierungs-APIs in JavaScript bereitgestellt. Versuchen Sie, das unten stehende Formular abzusenden; Unser JavaScript fängt die Senden-Schaltfläche ab und leitet das Feedback an Sie weiter.
Wenn Sie versuchen zu senden, sehen Sie die auf Ihre Formularsteuerelemente angewendeten Stile :invalidund .:valid
Browser-Standardeinstellungen
Sie sind nicht an benutzerdefinierten Validierungs-Feedbacknachrichten oder dem Schreiben von JavaScript zum Ändern des Formularverhaltens interessiert? Alles gut, Sie können die Standardeinstellungen des Browsers verwenden. Versuchen Sie, das unten stehende Formular zu senden. Je nach Browser und Betriebssystem sehen Sie ein etwas anderes Feedback.
Obwohl diese Feedback-Stile nicht mit CSS gestaltet werden können, können Sie den Feedback-Text dennoch über JavaScript anpassen.
Serverseitig
Wir empfehlen die clientseitige Validierung, aber falls Sie eine serverseitige Validierung benötigen, können Sie ungültige und gültige Formularfelder mit .is-invalidund angeben .is-valid. Beachten Sie, dass .invalid-feedbackdies auch mit diesen Klassen unterstützt wird.
Unterstützte Elemente
Unsere Beispielformulare zeigen oben native Text- <input>s, aber Formularvalidierungsstile sind auch für unsere benutzerdefinierten Formularsteuerelemente verfügbar.
Kurzinfos
Wenn Ihr Formularlayout dies zulässt, können Sie die .{valid|invalid}-feedbackKlassen gegen .{valid|invalid}-tooltipKlassen austauschen, um das Validierungsfeedback in einem formatierten Tooltip anzuzeigen. Stellen Sie sicher, dass ein übergeordnetes position: relativeElement für die Tooltip-Positionierung darauf steht. Im Beispiel unten haben unsere Spaltenklassen dies bereits, aber Ihr Projekt erfordert möglicherweise eine alternative Einrichtung.
Benutzerdefinierte Formulare
Verwenden Sie für noch mehr Anpassung und browserübergreifende Konsistenz unsere vollständig benutzerdefinierten Formularelemente, um die Standardeinstellungen des Browsers zu ersetzen. Sie bauen auf semantischem und barrierefreiem Markup auf und sind daher ein solider Ersatz für jedes standardmäßige Formularsteuerelement.
Kontrollkästchen und Radios
Jedes Kontrollkästchen und Radio ist in ein <div>mit einem Geschwister umschlossen <span>, um unser benutzerdefiniertes Steuerelement zu erstellen, und in ein <label>für den begleitenden Text. Strukturell ist dies derselbe Ansatz wie unser default .form-check.
Wir verwenden den Geschwisterselektor ( ~) für alle unsere <input>Zustände – wie :checked– um unseren benutzerdefinierten Formularindikator richtig zu gestalten. In Kombination mit der .custom-control-labelKlasse können wir auch den Text für jedes Element basierend auf dem <input>Status von formatieren.
Wir blenden den Standard <input>mit aus opacityund verwenden den .custom-control-label, um einen neuen benutzerdefinierten Formularindikator an seiner Stelle mit ::beforeund zu erstellen ::after. Leider können wir kein benutzerdefiniertes Element nur aus dem erstellen, <input>da CSS mit contentdiesem Element nicht funktioniert.
In den aktivierten Zuständen verwenden wir base64-eingebettete SVG-Symbole von Open Iconic . Dies bietet uns die beste Kontrolle für das Styling und die Positionierung über Browser und Geräte hinweg.
Kontrollkästchen
Benutzerdefinierte Kontrollkästchen können auch die :indeterminatePseudoklasse verwenden, wenn sie manuell über JavaScript festgelegt werden (es gibt kein verfügbares HTML-Attribut, um sie anzugeben).
Wenn Sie jQuery verwenden, sollte so etwas ausreichen:
Radios
In der Reihe
Deaktiviert
Benutzerdefinierte Kontrollkästchen und Radios können ebenfalls deaktiviert werden. Fügen Sie das disabledboolesche Attribut zum hinzu <input>und der benutzerdefinierte Indikator und die Bezeichnungsbeschreibung werden automatisch formatiert.
Menü auswählen
Benutzerdefinierte <select>Menüs benötigen nur eine benutzerdefinierte Klasse, .custom-selectum die benutzerdefinierten Stile auszulösen. Benutzerdefinierte Stile sind auf das <select>anfängliche Erscheinungsbild der s beschränkt und können die <option>s aufgrund von Browsereinschränkungen nicht ändern.
Sie können auch aus kleinen und großen benutzerdefinierten Auswahlen wählen, die zu unseren ähnlich großen Texteingaben passen.
Das multipleAttribut wird ebenfalls unterstützt:
Ebenso wie das sizeAttribut:
Bereich
Erstellen Sie benutzerdefinierte <input type="range">Steuerelemente mit .custom-range. Die Spur (der Hintergrund) und der Daumen (der Wert) sind beide so gestaltet, dass sie in allen Browsern gleich angezeigt werden. Da nur IE und Firefox das „Füllen“ ihrer Spur links oder rechts vom Daumen unterstützen, um den Fortschritt visuell anzuzeigen, unterstützen wir dies derzeit nicht.
Bereichseingaben haben implizite Werte für minund max— 0bzw. 100. Sie können neue Werte für diejenigen angeben, die die Attribute minund verwenden.max
Standardmäßig „rasten“ Bereichseingaben an ganzzahligen Werten ein. Um dies zu ändern, können Sie einen stepWert angeben. Im folgenden Beispiel verdoppeln wir die Anzahl der Schritte mit step="0.5".
Dateibrowser
Die Dateieingabe ist die knorrigste von allen und erfordert zusätzliches JavaScript, wenn Sie sie mit funktionalem Datei auswählen ... und ausgewähltem Dateinamentext verbinden möchten.
Wir verstecken die Standarddatei <input>über opacityund formatieren stattdessen die <label>. Mit wird die Schaltfläche generiert und positioniert ::after. Schließlich deklarieren wir ein widthund heightauf <input>für den richtigen Abstand zum umgebenden Inhalt.
Übersetzen oder Anpassen der Zeichenfolgen
Die :lang()Pseudo-Klasse wird verwendet, um die Übersetzung des „Browse“-Textes in andere Sprachen zu ermöglichen. Überschreiben oder fügen Sie Einträge zur $custom-file-textSass-Variablen mit dem relevanten Sprach-Tag und den lokalisierten Zeichenfolgen hinzu. Die englischen Saiten können auf die gleiche Weise angepasst werden. So könnte man beispielsweise eine spanische Übersetzung hinzufügen (der spanische Sprachcode lautet es):
Hier ist lang(es)die benutzerdefinierte Dateieingabe für eine spanische Übersetzung in Aktion:
Sie müssen die Sprache Ihres Dokuments (oder eines Teilbaums davon) richtig einstellen, damit der richtige Text angezeigt wird. Dies kann unter anderem mit dem langAttribut des <html>Elements oder dem Content-LanguageHTTP-Header erfolgen .