Formen
Beispiller a Benotzungsrichtlinne fir Form Kontrollstiler, Layoutoptiounen a personaliséiert Komponenten fir eng grouss Varietéit vu Formen ze kreéieren.
Bootstrap Form Kontrollen erweideren eis Rebooted Form Stiler mat Klassen. Benotzt dës Klassen fir op hir personaliséiert Affichage ze wielen fir eng méi konsequent Rendering iwwer Browser an Apparater.
Gitt sécher e passenden type
Attribut op all Input ze benotzen (zB email
fir E-Mailadress oder number
fir numeresch Informatioun) fir vun neien Input Kontrollen wéi E-Mail Verifizéierung, Zuelauswiel a méi ze profitéieren.
Hei ass e séier Beispill fir Bootstrap Formstiler ze demonstréieren. Liest weider fir Dokumentatioun iwwer erfuerderlech Klassen, Formlayout a méi.
<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>
Textuell Form Kontrollen - wéi <input>
s, <select>
s, an s - si mat der Klass <textarea>
styléiert . .form-control
Abegraff sinn Stiler fir allgemeng Erscheinung, Fokuszoustand, Gréisst a méi.
Ginn sécher eis Mooss Formen ze entdecken fir weider Stil <select>
s.
<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>
Fir Dateieinputen, tauscht de .form-control
fir .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>
Set Héichten mat Klassen wéi .form-control-lg
an .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üügt de readonly
booleschen Attribut op en Input fir d'Ännerung vum Wäert vum Input ze vermeiden. Lies-nëmmen Input schéngen méi hell (just wéi behënnert Input), awer behalen de Standard Cursor.
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
Wann Dir <input readonly>
Elementer an Ärer Form als Kloertext stylesch wëllt hunn, benotzt d' .form-control-plaintext
Klass fir de Standardformfeldstil ze läschen an déi richteg Margin a Padding ze bewahren.
<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>
Standardcheckboxen a Radios ginn verbessert mat der Hëllef vun .form-check
enger eenzeger Klass fir béid Inputtypen déi de Layout an d'Behuele vun hiren HTML Elementer verbessert . Checkboxe si fir eng oder e puer Optiounen an enger Lëscht ze wielen, während Radios sinn fir eng Optioun aus ville ze wielen.
Behënnerte Checkboxen a Radios ginn ënnerstëtzt, awer fir e not-allowed
Cursor beim Hover vum Elterendeel ze bidden <label>
, musst Dir d' disabled
Attribut op d' .form-check-input
. De behënnerte Attribut wäert eng méi hell Faarf uwenden fir ze hëllefen den Zoustand vum Input unzeginn.
Checkboxen a Radios benotze si gebaut fir HTML-baséiert Formvalidatioun z'ënnerstëtzen a präzis, zougänglech Etiketten ze bidden. Als esou sinn eis <input>
s an <label>
s Geschwësterelementer am Géigesaz zu engem <input>
bannent engem <label>
. Dëst ass e bësse méi verbose wéi Dir musst spezifizéieren id
an for
Attributer fir den <input>
an ze verbannen <label>
.
Par défaut gëtt all Zuel vu Checkboxen a Radioen déi direkt Geschwëster sinn vertikal gestapelt a passend mat .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>
Gruppéiert Checkboxen oder Radios op der selwechter horizontaler Zeil andeems Dir .form-check-inline
op all .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>
Füügt .position-static
un Inputen an .form-check
déi kee Labeltext hunn. Denkt drun nach ëmmer eng Form vu Label fir Hëllefstechnologien ze bidden (zum Beispill mat 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>
Zënter Bootstrap gëlt display: block
a width: 100%
fir bal all eis Form Kontrollen, Forme ginn standardiséiert vertikal gestapelt. Zousätzlech Klassen kënne benotzt ginn fir dëse Layout op enger Performbasis ze variéieren.
D' .form-group
Klass ass deen einfachste Wee fir eng Struktur op Formen ze addéieren. Et bitt eng flexibel Klass, déi richteg Gruppéierung vun Etiketten, Kontrollen, optional Hëllefstext a Formvalidatiounsmessage encouragéiert. Par défaut gëllt et nëmmen margin-bottom
, awer et hëlt zousätzlech Stiler op .form-inline
wéi néideg. Benotzt et mat <fieldset>
s, <div>
s oder bal all aner 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>
Méi komplex Forme kënne mat eise Gitterklassen gebaut ginn. Benotzt dës fir Form Layouten déi verschidde Kolonnen, variéiert Breeten an zousätzlech Ausriichtungsoptiounen erfuerderen.
<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>
Dir kënnt och tauschen .row
fir .form-row
, eng Variatioun vun eiser Standard Gitterrei, déi d'Standard Kolonnrennen iwwerschreift fir méi enk a méi kompakt Layouten.
<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>
Méi komplex Layouten kënnen och mam Gittersystem erstallt ginn.
<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>
Erstellt horizontale Forme mam Gitter andeems Dir d' .row
Klass bäidréit fir Gruppen ze bilden an d' .col-*-*
Klassen ze benotzen fir d'Breet vun Ären Etiketten a Kontrollen ze spezifizéieren. Gitt sécher och .col-form-label
op Är <label>
s ze addéieren sou datt se vertikal mat hiren assoziéierte Formkontrolle zentréiert sinn.
Heiansdo musst Dir vläicht Margin oder Padding Utilities benotzen fir déi perfekt Ausrichtung ze kreéieren déi Dir braucht. Zum Beispill hu mir den padding-top
op eisem gestapelten Radio-Input Label geläscht fir d'Textbaseline besser auszegläichen.
<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>
Gitt sécher ze benotzen .col-form-label-sm
oder .col-form-label-lg
op Är <label>
s oder <legend>
s fir d'Gréisst vun .form-control-lg
a richteg ze verfollegen .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>
Wéi an de fréiere Beispiller gewisen, erlaabt eise Gittersystem Iech all Zuel vu .col
s bannent engem .row
oder .form-row
. Si verdeelen déi verfügbar Breet gläich tëscht hinnen. Dir kënnt och e Subset vun Äre Kolonnen auswielen fir méi oder manner Plaz opzehuelen, während déi verbleiwen .col
s de Rescht gläich opgedeelt hunn, mat spezifesche Kolonnklassen wéi .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>
D'Beispill hei drënner benotzt e Flexbox Utility fir den Inhalt vertikal ze zentréieren an z'änneren .col
sou .col-auto
datt Är Kolonnen nëmmen esou vill Plaz ophuelen wéi néideg. Anescht gesot, d'Kolonngréisst selwer baséiert op den 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>
Dir kënnt dat dann nach eng Kéier mat Gréisst-spezifesch Kolonn Klassen 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>
An natierlech ginn personaliséiert Form Kontrollen ënnerstë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>
Benotzt d' .form-inline
Klass fir eng Serie vun Etiketten, Form Kontrollen a Knäppercher op enger eenzeger horizontaler Zeil ze weisen. Form Kontrollen bannent Inline Formen variéieren liicht vun hire Standardzoustand.
- D'Kontrollen sinn
display: flex
, zerbriechen all HTML Wäissraum an erlaabt Iech Ausriichtungskontrolle mat Abstands- a Flexbox- Utilities ze bidden. - Kontrollen an Inputgruppen kréien
width: auto
fir de Bootstrap Standard ze iwwerschreidenwidth: 100%
. - Kontrollen schéngen nëmmen inline an viewports datt op d'mannst 576px breet sinn fir eng Kont fir schmuel viewports op mobilen Apparater.
Dir musst vläicht d'Breet an d'Ausrichtung vun eenzelne Formkontrollen mat Abstands-Utilities manuell adresséieren (wéi hei ënnendrënner). Endlech, gitt sécher datt Dir ëmmer e <label>
mat all Formkontrolle enthält, och wann Dir et vun Net-Screenreader Besucher verstoppe musst mat .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>
Benotzerdefinéiert Form Kontrollen a wielt sinn och ënnerstë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 verstoppte Etiketten
Hëllefstechnologien wéi Écran Lieser wäerten Problemer mat Äre Formulairen hunn wann Dir kee Label fir all Input enthält. .sr-only
Fir dës Inline Formen, kënnt Dir d'Etiketten mat der Klass verstoppen . Et gi weider alternativ Methoden fir e Label fir Hëllefstechnologien ze liwweren, sou wéi den aria-label
, aria-labelledby
oder title
Attribut. Wann keng vun dësen präsent ass, kënnen Assistenztechnologien d' placeholder
Attributer benotzen, wann et präsent ass, awer bemierkt datt d'Benotzung placeholder
als Ersatz fir aner Etikettéierungsmethoden net ugeroden ass.
Block-Niveau Hëllef Text a Formen kann erstallt ginn benotzt .form-text
(virdrun bekannt als .help-block
v3). Inline Hëllefstext ka flexibel implementéiert ginn mat all Inline HTML Element an Utility Klassen wéi .text-muted
.
Associéieren Hëllef Text mat Form Kontrollen
Hëllefstext soll explizit mat der Formkontrolle verbonne sinn, déi et mat der aria-describedby
Attribut benotzt. Dëst wäert garantéieren datt Assistenztechnologien - wéi Bildschirm Lieser - dësen Hëllefstext annoncéieren wann de Benotzer fokusséiert oder an d'Kontroll erakënnt.
Hëllef Text ënnert Input kann mat stylesch ginn .form-text
. Dës Klass enthält display: block
a füügt e puer Topmarge fir einfach Ofstand vun den Inputen uewen.
<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 all typesch Inline HTML Element benotzen (sief et en <small>
, <span>
, oder soss eppes) mat näischt méi wéi eng Utility Klass.
<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üügt de disabled
booleschen Attribut op en Input fir Benotzerinteraktiounen ze vermeiden an et méi hell ze maachen.
Füügt den disabled
Attribut zu engem <fieldset>
fir all d'Kontrollen bannen auszeschalten.
<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>
Opgepasst mat Anker
Par défaut behandelen d'Browser all gebierteg Form Kontrollen ( <input>
, <select>
an <button>
Elementer) bannent engem <fieldset disabled>
als behënnert, verhënnert souwuel Tastatur- a Mausinteraktiounen op hinnen. Wann Är Form awer och <a ... class="btn btn-*">
Elementer enthält, ginn dës nëmmen e Stil vun pointer-events: none
. Wéi an der Rubrik iwwer behënnert Staat fir Knäppercher festgestallt (a speziell an der Ënnersektioun fir Ankerelementer), ass dës CSS Eegeschafte nach net standardiséiert an ass net voll ënnerstëtzt an Opera 18 an ënner, oder am Internet Explorer 10, a gewonnen 't verhënneren datt d'Tastatur Benotzer fäeg sinn dës Linken ze fokusséieren oder ze aktivéieren. Also fir sécher ze sinn, benotzt personaliséiert JavaScript fir sou Linken auszeschalten.
Cross-Browser Kompatibilitéit
Wärend Bootstrap dës Stiler an all Browser applizéiert, ënnerstëtzen Internet Explorer 11 an ënner net voll den disabled
Attribut op engem <fieldset>
. Benotzt personaliséiert JavaScript fir de Feldset an dëse Browser auszeschalten.
Bitt wäertvoll, handhabbare Feedback un Är Benotzer mat HTML5 Form Validatioun - verfügbar an all eise ënnerstëtzte Browser . Wielt aus dem Browser Standard Validatioun Feedback, oder implementéiert personaliséiert Messagen mat eise agebaute Klassen a Starter JavaScript.
Mir recommandéieren héich personaliséiert Validatiounsstiler well gebierteg Browser-Defaults net un Écran Lieser ugekënnegt ginn.
Hei ass wéi d'Formvalidatioun mat Bootstrap funktionnéiert:
- HTML Form Validatioun gëtt iwwer CSS zwou Pseudo-Klassen applizéiert,
:invalid
an:valid
. Et gëllt fir<input>
,<select>
, an<textarea>
Elementer. - Bootstrap scopes der
:invalid
a:valid
Stiler zu Elterendeel.was-validated
Klass, normalerweis applizéiert op d'<form>
. Soss gëtt all erfuerdert Feld ouni Wäert als ongëlteg op der Säitlaascht gewisen. Op dës Manéier kënnt Dir wielen wéini se ze aktivéieren (typesch nodeems d'Formuléierung versicht ass). - Als Réckfall,
.is-invalid
a.is-valid
Klassen kënnen amplaz vun de Pseudo-Klassen fir Server Säit Validatioun benotzt ginn . Si erfuerderen keng.was-validated
Elterenklass. - Wéinst Aschränkungen a wéi CSS funktionnéiert, kënne mir (am Moment) Stiler net applizéieren op eng
<label>
déi virun enger Form Kontroll an der DOM kënnt ouni d'Hëllef vu personaliséierten JavaScript. - All modern Browser ënnerstëtzen d' Constraint Validation API , eng Serie vu JavaScript Methoden fir d'Validatioun vun Form Kontrollen.
- Feedback Messagen kënnen d' Browser Defaults benotzen (ënnerscheed fir all Browser, an onstylbar iwwer CSS) oder eis personaliséiert Feedback Stiler mat zousätzlech HTML an CSS.
- Dir kënnt personaliséiert Validitéit Messagen mat
setCustomValidity
JavaScript ubidden.
Mat deem vergiessen, betruecht déi folgend Demos fir eis personaliséiert Form Validatioun Stiler, optional Server Säit Klassen, a Browser Default.
Fir personaliséiert Bootstrap Form Validatioun Messagen, musst Dir de novalidate
booleschen Attribut op Är <form>
. Dëst deaktivéiert de Browser Standardfeedback Tooltipps, awer gëtt ëmmer nach Zougang zu de Formvalidatiouns-APIs a JavaScript. Probéiert de Formulaire hei drënner ofzeginn; eis JavaScript interceptéiert de Submit Button a relais Feedback un Iech.
Wann Dir probéiert ofzeginn, gesitt Dir d' Stiler :invalid
a :valid
Stiler op Är Form Kontrollen applizéiert.
<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>
Net interesséiert fir personaliséiert Validatioun Feedback Messagen oder JavaScript ze schreiwen fir Form Verhalen z'änneren? Alles gutt, Dir kënnt de Browser Default benotzen. Probéiert de Formulaire hei drënner ofzeginn. Ofhängeg vun Ärem Browser an OS, gesitt Dir e bëssen anere Feedbackstil.
Wärend dës Feedbackstiler net mat CSS stylesch kënne ginn, kënnt Dir ëmmer nach de Feedbacktext duerch JavaScript personaliséieren.
<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>
Mir recommandéieren e benotzen Client Säit Validatioun, mä am Fall wou Dir Server Säit verlaangen, Dir kënnt ongëlteg a valabel Form Felder mat .is-invalid
an uginn .is-valid
. Notéiert datt .invalid-feedback
och mat dëse Klassen ënnerstëtzt gëtt.
<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>
Eis Beispill Forme weisen gebierteg textuell <input>
s uewen, awer Form Validatioun Stiler sinn fir eis personaliséiert Form Kontrollen, ze.
<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>
Wann Äre Formulaire Layout et erlaabt, kënnt Dir d' .{valid|invalid}-feedback
Klassen fir .{valid|invalid}-tooltip
Klassen austauschen fir Validatiounsfeedback an engem styleschen Tooltip ze weisen. Ginn sécher engem Elterendeel mat position: relative
op et fir tooltip Positionéierung. Am Beispill hei drënner hunn eis Kolonnklassen dëst schonn, awer Äre Projet kann en alternativen Setup erfuerderen.
<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>
Fir nach méi Personnalisatioun a Cross-Browser Konsistenz, benotzt eis komplett personaliséiert Formelementer fir d'Browserdefaults ze ersetzen. Si sinn uewen op semanteschen an zougängleche Markup gebaut, sou datt se zolidd Ersatz fir all Standardformkontrolle sinn.
All Checkbox a Radio ass an engem <div>
mat engem Geschwëster gewéckelt <span>
fir eis personaliséiert Kontroll ze kreéieren an e <label>
fir de begleedenden Text. Strukturell ass dëst déiselwecht Approche wéi eis Standard .form-check
.
Mir benotzen de Geschwësterwieler ( ~
) fir all eis <input>
Staaten - wéi :checked
- fir eis personaliséiert Formindikator richteg ze styléieren. Wa mir mat der .custom-control-label
Klass kombinéiert sinn, kënne mir och den Text fir all Element styléieren op Basis <input>
vum Zoustand.
Mir verstoppen d'Default <input>
mat opacity
a benotzen de .custom-control-label
fir en neie personaliséierte Formindikator op senger Plaz mat ::before
an ze bauen ::after
. Leider kënne mir net e Benotzerdefinéiert aus just bauen <input>
well CSS content
net op deem Element funktionnéiert.
An de kontrolléierte Staaten benotze mir base64 embedded SVG Symboler vun Open Iconic . Dëst bitt eis déi bescht Kontroll fir Styling a Positionéierung iwwer Browser an Apparater.
<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>
Benotzerdefinéiert Checkboxen kënnen och d' :indeterminate
Pseudo-Klass benotzen wann se manuell iwwer JavaScript gesat ginn (et gëtt kee verfügbaren HTML Attribut fir et ze spezifizéieren).
Wann Dir jQuery benotzt, sou eppes sollt duergoen:
<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>
Benotzerdefinéiert Checkboxen a Radios kënnen och behënnert ginn. Füügt de disabled
booleschen Attribut un <input>
an de personaliséierten Indikator an d'Labelbeschreiwung ginn automatesch stiléiert.
<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>
Benotzerdefinéiert <select>
Menüe brauchen nëmmen eng personaliséiert Klass, .custom-select
fir déi personaliséiert Stiler auszeléisen.
<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>
Dir kënnt och vu klengen a grousse personaliséierte Selektioune wielen fir eis ähnlech Gréissten Textinputen ze 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>
Den multiple
Attribut gëtt och ënnerstë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>
Wéi ass den 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>
D'Dateiinput ass dee schmuelste vun der Rëtsch a erfuerdert zousätzlech JavaScript wann Dir se mat funktionnelle Wielt Datei ukoppelen ... a gewielten Dateinumm Text.
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
Mir verstoppen d'Standarddatei <input>
iwwer opacity
an stattdessen de <label>
. De Knäppchen gëtt generéiert a positionéiert mat ::after
. Endlech erkläre mir eng width
an height
op der <input>
fir adäquate Abstand fir Ëmgéigend Inhalt.
D' :lang()
Pseudo-Klass gëtt benotzt fir d'Iwwersetzung vum "Browse" Text an aner Sproochen z'erméiglechen. Iwwerschreift oder füügt Entréen un d' $custom-file-text
Sass Variabel mat dem relevante Sproochetag a lokaliséierte Strings. Déi englesch Saiten kënnen op déiselwecht Manéier personaliséiert ginn. Zum Beispill, hei ass wéi een eng spuenesch Iwwersetzung derbäi kënnt (Spuenesch Sproochecode ass es
):
Hei ass lang(es)
an Handlung op de personaliséierte Dateiinput fir eng spuenesch Iwwersetzung:
<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>
Dir musst d'Sprooch vun Ärem Dokument (oder Ënnerbaum dovun) korrekt astellen, fir datt de richtegen Text ugewise gëtt. Dëst kann mat dem lang
Attribut am <html>
Element oder dem Content-Language
HTTP Header gemaach ginn, ënner anerem Methoden.