Formen
Beispiele und Verwendungsrichtlinien für Formularsteuerelementstile, Layoutoptionen und benutzerdefinierte Komponenten zum Erstellen einer Vielzahl von Formularen.
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 type
Attribut verwenden , um neuere Eingabekontrollen wie E-Mail-Verifizierung, Nummernauswahl und mehr zu nutzen.email
number
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.
<form>
<div class="form-group">
<label for="exampleInputEmail1">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
<small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Password</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Check me out</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Steuerelemente für Textformulare – wie <input>
s, <select>
s und <textarea>
s – werden mit der .form-control
Klasse gestaltet. Enthalten sind Stile für das allgemeine Erscheinungsbild, den Fokuszustand, die Größe und mehr.
Erkunden Sie unbedingt unsere benutzerdefinierten Formulare , um weitere Stile zu <select>
finden.
<form>
<div class="form-group">
<label for="exampleFormControlInput1">Email address</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="[email protected]">
</div>
<div class="form-group">
<label for="exampleFormControlSelect1">Example select</label>
<select class="form-control" id="exampleFormControlSelect1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlSelect2">Example multiple select</label>
<select multiple class="form-control" id="exampleFormControlSelect2">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Example textarea</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
</form>
Tauschen Sie für Dateieingaben die .form-control
für .form-control-file
.
<form>
<div class="form-group">
<label for="exampleFormControlFile1">Example file input</label>
<input type="file" class="form-control-file" id="exampleFormControlFile1">
</div>
</form>
Stellen Sie Höhen mit Klassen wie .form-control-lg
und ein .form-control-sm
.
<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
<input class="form-control" type="text" placeholder="Default input">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
<select class="form-control form-control-lg">
<option>Large select</option>
</select>
<select class="form-control">
<option>Default select</option>
</select>
<select class="form-control form-control-sm">
<option>Small select</option>
</select>
Fügen Sie das readonly
boolesche 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.
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
Wenn Sie möchten, dass <input readonly>
Elemente in Ihrem Formular als reiner Text formatiert sind, verwenden Sie die .form-control-plaintext
Klasse, um die Standardformatierung von Formularfeldern zu entfernen und den korrekten Rand und Abstand beizubehalten.
<form>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext" id="staticEmail" value="[email protected]">
</div>
</div>
<div class="form-group row">
<label for="inputPassword" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword" placeholder="Password">
</div>
</div>
</form>
<form class="form-inline">
<div class="form-group mb-2">
<label for="staticEmail2" class="sr-only">Email</label>
<input type="text" readonly class="form-control-plaintext" id="staticEmail2" value="[email protected]">
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only">Password</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="Password">
</div>
<button type="submit" class="btn btn-primary mb-2">Confirm identity</button>
</form>
Standard-Checkboxen und Optionsfelder werden mit Hilfe einer einzigen Klasse für beide Eingabetypen verbessert, die das Layout und Verhalten ihrer HTML-Elemente.form-check
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-allowed
Cursor 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 id
und for
-Attribute angeben müssen, um die und in Beziehung zu <input>
setzen <label>
.
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
.
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
<label class="form-check-label" for="defaultCheck1">
Default checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
<label class="form-check-label" for="defaultCheck2">
Disabled checkbox
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="option1" checked>
<label class="form-check-label" for="exampleRadios1">
Default radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="option2">
<label class="form-check-label" for="exampleRadios2">
Second default radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3" disabled>
<label class="form-check-label" for="exampleRadios3">
Disabled radio
</label>
</div>
Gruppieren Sie Kontrollkästchen oder Optionsfelder in derselben horizontalen Reihe, indem Sie sie .form-check-inline
zu beliebigen hinzufügen .form-check
.
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="option1">
<label class="form-check-label" for="inlineCheckbox1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="option2">
<label class="form-check-label" for="inlineCheckbox2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="option3" disabled>
<label class="form-check-label" for="inlineCheckbox3">3 (disabled)</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1" value="option1">
<label class="form-check-label" for="inlineRadio1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2" value="option2">
<label class="form-check-label" for="inlineRadio2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3" value="option3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (disabled)</label>
</div>
.position-static
Zu Eingaben hinzufügen , .form-check
die keinen Beschriftungstext haben. Denken Sie daran, immer noch eine Art Bezeichnung für Hilfstechnologien bereitzustellen (z. B. mit aria-label
).
<div class="form-check">
<input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="option1" aria-label="...">
</div>
<div class="form-check">
<input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1" value="option1" aria-label="...">
</div>
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.
Die .form-group
Klasse 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-inline
Bedarf übernommen. Verwenden Sie es mit <fieldset>
s, <div>
s oder fast jedem anderen Element.
<form>
<div class="form-group">
<label for="formGroupExampleInput">Example label</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
</div>
<div class="form-group">
<label for="formGroupExampleInput2">Another label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
</div>
</form>
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.
<form>
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name">
</div>
</div>
</form>
.row
Sie können auch gegen tauschen .form-row
, eine Variante unserer Standardrasterzeile, die die standardmäßigen Spaltenstege für engere und kompaktere Layouts überschreibt.
<form>
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="First name">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Last name">
</div>
</div>
</form>
Mit dem Rastersystem können auch komplexere Layouts erstellt werden.
<form>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Email</label>
<input type="email" class="form-control" id="inputEmail4" placeholder="Email">
</div>
<div class="form-group col-md-6">
<label for="inputPassword4">Password</label>
<input type="password" class="form-control" id="inputPassword4" placeholder="Password">
</div>
</div>
<div class="form-group">
<label for="inputAddress">Address</label>
<input type="text" class="form-control" id="inputAddress" placeholder="1234 Main St">
</div>
<div class="form-group">
<label for="inputAddress2">Address 2</label>
<input type="text" class="form-control" id="inputAddress2" placeholder="Apartment, studio, or floor">
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputCity">City</label>
<input type="text" class="form-control" id="inputCity">
</div>
<div class="form-group col-md-4">
<label for="inputState">State</label>
<select id="inputState" class="form-control">
<option selected>Choose...</option>
<option>...</option>
</select>
</div>
<div class="form-group col-md-2">
<label for="inputZip">Zip</label>
<input type="text" class="form-control" id="inputZip">
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck">
<label class="form-check-label" for="gridCheck">
Check me out
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Sign in</button>
</form>
Erstellen Sie horizontale Formulare mit dem Raster, indem Sie die .row
Klasse zu Formgruppen hinzufügen und die .col-*-*
Klassen verwenden, um die Breite Ihrer Beschriftungen und Steuerelemente anzugeben. Stellen Sie sicher, dass Sie .col-form-label
Ihre <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-top
Etikett unserer gestapelten Radioeingänge entfernt, um die Textgrundlinie besser auszurichten.
<form>
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div>
</div>
<fieldset class="form-group">
<div class="row">
<legend class="col-form-label col-sm-2 pt-0">Radios</legend>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="option1" checked>
<label class="form-check-label" for="gridRadios1">
First radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2" value="option2">
<label class="form-check-label" for="gridRadios2">
Second radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="option3" disabled>
<label class="form-check-label" for="gridRadios3">
Third disabled radio
</label>
</div>
</div>
</div>
</fieldset>
<div class="form-group row">
<div class="col-sm-2">Checkbox</div>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck1">
<label class="form-check-label" for="gridCheck1">
Example checkbox
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Sign in</button>
</div>
</div>
</form>
Stellen Sie sicher, dass Sie .col-form-label-sm
oder .col-form-label-lg
zu Ihrem <label>
s oder <legend>
s verwenden, um die Größe von .form-control-lg
und korrekt einzuhalten .form-control-sm
.
<form>
<div class="form-group row">
<label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-form-label-sm">
</div>
</div>
<div class="form-group row">
<label for="colFormLabel" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label">
</div>
</div>
<div class="form-group row">
<label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-form-label-lg">
</div>
</div>
</form>
Wie in den vorherigen Beispielen gezeigt, erlaubt Ihnen unser Rastersystem, eine beliebige Anzahl von .col
s innerhalb eines .row
oder 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 .col
s den Rest gleichmäßig aufteilen, mit bestimmten Spaltenklassen wie .col-7
.
<form>
<div class="form-row">
<div class="col-7">
<input type="text" class="form-control" placeholder="City">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="State">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Zip">
</div>
</div>
</form>
Das folgende Beispiel verwendet ein Flexbox-Dienstprogramm, um den Inhalt vertikal zu zentrieren, und ändert .col
sich zu, .col-auto
sodass Ihre Spalten nur so viel Platz wie nötig beanspruchen. Anders ausgedrückt: Die Spaltengröße richtet sich nach dem Inhalt.
<form>
<div class="form-row align-items-center">
<div class="col-auto">
<label class="sr-only" for="inlineFormInput">Name</label>
<input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Jane Doe">
</div>
<div class="col-auto">
<label class="sr-only" for="inlineFormInputGroup">Username</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroup" placeholder="Username">
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="autoSizingCheck">
<label class="form-check-label" for="autoSizingCheck">
Remember me
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</div>
</div>
</form>
Sie können das dann noch einmal mit größenspezifischen Spaltenklassen remixen.
<form>
<div class="form-row align-items-center">
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputName">Name</label>
<input type="text" class="form-control" id="inlineFormInputName" placeholder="Jane Doe">
</div>
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputGroupUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Username">
</div>
</div>
<div class="col-auto my-1">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="autoSizingCheck2">
<label class="form-check-label" for="autoSizingCheck2">
Remember me
</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
Und natürlich werden benutzerdefinierte Formularsteuerelemente unterstützt.
<form>
<div class="form-row align-items-center">
<div class="col-auto my-1">
<label class="mr-sm-2" for="inlineFormCustomSelect">Preference</label>
<select class="custom-select mr-sm-2" id="inlineFormCustomSelect">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
</div>
<div class="col-auto my-1">
<div class="custom-control custom-checkbox mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlAutosizing">
<label class="custom-control-label" for="customControlAutosizing">Remember my preference</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
Verwenden Sie die .form-inline
Klasse, 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 überschreibenwidth: 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
.
<form class="form-inline">
<label class="sr-only" for="inlineFormInputName2">Name</label>
<input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Jane Doe">
<label class="sr-only" for="inlineFormInputGroupUsername2">Username</label>
<div class="input-group mb-2 mr-sm-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername2" placeholder="Username">
</div>
<div class="form-check mb-2 mr-sm-2">
<input class="form-check-input" type="checkbox" id="inlineFormCheck">
<label class="form-check-label" for="inlineFormCheck">
Remember me
</label>
</div>
<button type="submit" class="btn btn-primary mb-2">Submit</button>
</form>
Benutzerdefinierte Formularsteuerelemente und -auswahlen werden ebenfalls unterstützt.
<form class="form-inline">
<label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preference</label>
<select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
<option selected>Choose...</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<div class="custom-control custom-checkbox my-1 mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlInline">
<label class="custom-control-label" for="customControlInline">Remember my preference</label>
</div>
<button type="submit" class="btn btn-primary my-1">Submit</button>
</form>
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-only
Klasse ausblenden. Es gibt weitere alternative Verfahren zum Bereitstellen einer Kennzeichnung für Hilfstechnologien, wie z. B. das aria-label
, aria-labelledby
oder title
-Attribut. Wenn keines davon vorhanden ist, können Hilfstechnologien auf die Verwendung des placeholder
Attributs zurückgreifen, falls vorhanden, aber beachten Sie, dass die Verwendung von placeholder
als Ersatz für andere Kennzeichnungsmethoden nicht empfohlen wird.
Hilfetext auf Blockebene in Formularen kann mit .form-text
(früher bekannt als .help-block
in 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-describedby
Attribut 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: block
und fügt einen oberen Rand hinzu, um den Abstand zu den obigen Eingaben zu erleichtern.
<label for="inputPassword5">Password</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">
Your password must be 8-20 characters long, contain letters and numbers, and must not contain spaces, special characters, or emoji.
</small>
Inline-Text kann jedes typische Inline-HTML-Element (sei es ein <small>
, <span>
, oder etwas anderes) mit nichts anderem als einer Hilfsklasse verwenden.
<form class="form-inline">
<div class="form-group">
<label for="inputPassword6">Password</label>
<input type="password" id="inputPassword6" class="form-control mx-sm-3" aria-describedby="passwordHelpInline">
<small id="passwordHelpInline" class="text-muted">
Must be 8-20 characters long.
</small>
</div>
</form>
Fügen Sie das disabled
boolesche Attribut zu einer Eingabe hinzu, um Benutzerinteraktionen zu verhindern und sie heller erscheinen zu lassen.
Fügen Sie das disabled
Attribut zu a <fieldset>
hinzu, um alle darin enthaltenen Steuerelemente zu deaktivieren.
<form>
<fieldset disabled>
<div class="form-group">
<label for="disabledTextInput">Disabled input</label>
<input type="text" id="disabledTextInput" class="form-control" placeholder="Disabled input">
</div>
<div class="form-group">
<label for="disabledSelect">Disabled select menu</label>
<select id="disabledSelect" class="form-control">
<option>Disabled select</option>
</select>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
<label class="form-check-label" for="disabledFieldsetCheck">
Can't check this
</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</fieldset>
</form>
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 Opera 18 und darunter oder in Internet Explorer 10 nicht vollständig unterstützt und hat gewonnen hindert Tastaturbenutzer nicht daran, 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 disabled
Attribut auf einer <fieldset>
. Verwenden Sie benutzerdefiniertes JavaScript, um das Feldset in diesen Browsern zu deaktivieren.
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 dringend, benutzerdefinierte Validierungsstile zu verwenden, da die Standardeinstellungen des nativen Browsers Screenreadern nicht angekündigt werden.
So funktioniert die Formularvalidierung mit Bootstrap:
- Die HTML-Formularvalidierung wird über die beiden Pseudoklassen von CSS
:invalid
und:valid
. Es gilt für<input>
,<select>
, und<textarea>
Elemente. - Bootstrap ordnet die Stile
:invalid
und:valid
der übergeordneten.was-validated
Klasse 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). - Als Fallback können statt der Pseudo-Klassen auch Klassen für die
.is-invalid
serverseitige 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.
setCustomValidity
Sie 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.
Für benutzerdefinierte Bootstrap-Formularvalidierungsmeldungen müssen Sie das novalidate
boolesche 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 :invalid
und .:valid
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationCustom01">First name</label>
<input type="text" class="form-control" id="validationCustom01" placeholder="First name" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustom02">Last name</label>
<input type="text" class="form-control" id="validationCustom02" placeholder="Last name" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustomUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend">@</span>
</div>
<input type="text" class="form-control" id="validationCustomUsername" placeholder="Username" aria-describedby="inputGroupPrepend" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationCustom03">City</label>
<input type="text" class="form-control" id="validationCustom03" placeholder="City" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom04">State</label>
<input type="text" class="form-control" id="validationCustom04" placeholder="State" required>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom05">Zip</label>
<input type="text" class="form-control" id="validationCustom05" placeholder="Zip" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
<label class="form-check-label" for="invalidCheck">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
<script>
// Example starter JavaScript for disabling form submissions if there are invalid fields
(function() {
'use strict';
window.addEventListener('load', function() {
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.getElementsByClassName('needs-validation');
// Loop over them and prevent submission
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
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.
<form>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationDefault01">First name</label>
<input type="text" class="form-control" id="validationDefault01" placeholder="First name" value="Mark" required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefault02">Last name</label>
<input type="text" class="form-control" id="validationDefault02" placeholder="Last name" value="Otto" required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefaultUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend2">@</span>
</div>
<input type="text" class="form-control" id="validationDefaultUsername" placeholder="Username" aria-describedby="inputGroupPrepend2" required>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationDefault03">City</label>
<input type="text" class="form-control" id="validationDefault03" placeholder="City" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault04">State</label>
<input type="text" class="form-control" id="validationDefault04" placeholder="State" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault05">Zip</label>
<input type="text" class="form-control" id="validationDefault05" placeholder="Zip" required>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
<label class="form-check-label" for="invalidCheck2">
Agree to terms and conditions
</label>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
Wir empfehlen die clientseitige Validierung, aber falls Sie eine serverseitige Validierung benötigen, können Sie ungültige und gültige Formularfelder mit .is-invalid
und angeben .is-valid
. Beachten Sie, dass .invalid-feedback
dies auch mit diesen Klassen unterstützt wird.
<form>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationServer01">First name</label>
<input type="text" class="form-control is-valid" id="validationServer01" placeholder="First name" value="Mark" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationServer02">Last name</label>
<input type="text" class="form-control is-valid" id="validationServer02" placeholder="Last name" value="Otto" required>
<div class="valid-feedback">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationServerUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend3">@</span>
</div>
<input type="text" class="form-control is-invalid" id="validationServerUsername" placeholder="Username" aria-describedby="inputGroupPrepend3" required>
<div class="invalid-feedback">
Please choose a username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationServer03">City</label>
<input type="text" class="form-control is-invalid" id="validationServer03" placeholder="City" required>
<div class="invalid-feedback">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationServer04">State</label>
<input type="text" class="form-control is-invalid" id="validationServer04" placeholder="State" required>
<div class="invalid-feedback">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationServer05">Zip</label>
<input type="text" class="form-control is-invalid" id="validationServer05" placeholder="Zip" required>
<div class="invalid-feedback">
Please provide a valid zip.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input is-invalid" type="checkbox" value="" id="invalidCheck3" required>
<label class="form-check-label" for="invalidCheck3">
Agree to terms and conditions
</label>
<div class="invalid-feedback">
You must agree before submitting.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
Unsere Beispielformulare zeigen oben native Text- <input>
s, aber Formularvalidierungsstile sind auch für unsere benutzerdefinierten Formularsteuerelemente verfügbar.
<form class="was-validated">
<div class="custom-control custom-checkbox mb-3">
<input type="checkbox" class="custom-control-input" id="customControlValidation1" required>
<label class="custom-control-label" for="customControlValidation1">Check this custom checkbox</label>
<div class="invalid-feedback">Example invalid feedback text</div>
</div>
<div class="custom-control custom-radio">
<input type="radio" class="custom-control-input" id="customControlValidation2" name="radio-stacked" required>
<label class="custom-control-label" for="customControlValidation2">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio mb-3">
<input type="radio" class="custom-control-input" id="customControlValidation3" name="radio-stacked" required>
<label class="custom-control-label" for="customControlValidation3">Or toggle this other custom radio</label>
<div class="invalid-feedback">More example invalid feedback text</div>
</div>
<div class="form-group">
<select class="custom-select" required>
<option value="">Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<div class="invalid-feedback">Example invalid custom select feedback</div>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" id="validatedCustomFile" required>
<label class="custom-file-label" for="validatedCustomFile">Choose file...</label>
<div class="invalid-feedback">Example invalid custom file feedback</div>
</div>
</form>
Wenn Ihr Formularlayout dies zulässt, können Sie die .{valid|invalid}-feedback
Klassen gegen .{valid|invalid}-tooltip
Klassen austauschen, um das Validierungsfeedback in einem formatierten Tooltip anzuzeigen. Stellen Sie sicher, dass ein übergeordnetes position: relative
Element für die Tooltip-Positionierung darauf steht. Im Beispiel unten haben unsere Spaltenklassen dies bereits, aber Ihr Projekt erfordert möglicherweise eine alternative Einrichtung.
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationTooltip01">First name</label>
<input type="text" class="form-control" id="validationTooltip01" placeholder="First name" value="Mark" required>
<div class="valid-tooltip">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltip02">Last name</label>
<input type="text" class="form-control" id="validationTooltip02" placeholder="Last name" value="Otto" required>
<div class="valid-tooltip">
Looks good!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltipUsername">Username</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
</div>
<input type="text" class="form-control" id="validationTooltipUsername" placeholder="Username" aria-describedby="validationTooltipUsernamePrepend" required>
<div class="invalid-tooltip">
Please choose a unique and valid username.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationTooltip03">City</label>
<input type="text" class="form-control" id="validationTooltip03" placeholder="City" required>
<div class="invalid-tooltip">
Please provide a valid city.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip04">State</label>
<input type="text" class="form-control" id="validationTooltip04" placeholder="State" required>
<div class="invalid-tooltip">
Please provide a valid state.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip05">Zip</label>
<input type="text" class="form-control" id="validationTooltip05" placeholder="Zip" required>
<div class="invalid-tooltip">
Please provide a valid zip.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Submit form</button>
</form>
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.
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-label
Klasse können wir auch den Text für jedes Element basierend auf dem <input>
Status von formatieren.
Wir blenden den Standard <input>
mit aus opacity
und verwenden den .custom-control-label
, um einen neuen benutzerdefinierten Formularindikator an seiner Stelle mit ::before
und zu erstellen ::after
. Leider können wir kein benutzerdefiniertes Element nur aus dem erstellen, <input>
da CSS mit content
diesem 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.
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheck1">
<label class="custom-control-label" for="customCheck1">Check this custom checkbox</label>
</div>
Benutzerdefinierte Kontrollkästchen können auch die :indeterminate
Pseudoklasse 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:
<div class="custom-control custom-radio">
<input type="radio" id="customRadio1" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="customRadio2" name="customRadio" class="custom-control-input">
<label class="custom-control-label" for="customRadio2">Or toggle this other custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline1" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1">Toggle this custom radio</label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline2" name="customRadioInline1" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline2">Or toggle this other custom radio</label>
</div>
Benutzerdefinierte Kontrollkästchen und Radios können ebenfalls deaktiviert werden. Fügen Sie das disabled
boolesche Attribut zum hinzu <input>
und der benutzerdefinierte Indikator und die Bezeichnungsbeschreibung werden automatisch formatiert.
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="customCheckDisabled" disabled>
<label class="custom-control-label" for="customCheckDisabled">Check this custom checkbox</label>
</div>
<div class="custom-control custom-radio">
<input type="radio" id="radio3" name="radioDisabled" id="customRadioDisabled" class="custom-control-input" disabled>
<label class="custom-control-label" for="customRadioDisabled">Toggle this custom radio</label>
</div>
Benutzerdefinierte <select>
Menüs benötigen nur eine benutzerdefinierte Klasse, .custom-select
um die benutzerdefinierten Stile auszulösen.
<select class="custom-select">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Sie können auch aus kleinen und großen benutzerdefinierten Auswahlen wählen, die zu unseren ähnlich großen Texteingaben passen.
<select class="custom-select custom-select-lg mb-3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
<select class="custom-select custom-select-sm">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Das multiple
Attribut wird ebenfalls unterstützt:
<select class="custom-select" multiple>
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
Ebenso wie das size
Attribut:
<select class="custom-select" size="3">
<option selected>Open this select menu</option>
<option value="1">One</option>
<option value="2">Two</option>
<option value="3">Three</option>
</select>
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.
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
Wir verstecken die Standarddatei <input>
über opacity
und formatieren stattdessen die <label>
. Mit wird die Schaltfläche generiert und positioniert ::after
. Schließlich deklarieren wir ein width
und height
auf <input>
für den richtigen Abstand zum umgebenden Inhalt.
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-text
Sass-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:
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFileLang" lang="es">
<label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
</div>
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 lang
Attribut des <html>
Elements oder dem Content-Language
HTTP-Header erfolgen .