Формс
Примери и упутства за употребу стилова контроле образаца, опција изгледа и прилагођених компоненти за креирање широког спектра образаца.
Боотстрап-ове контроле обрасца проширују наше поново покренуте стилове обрасца са класама. Користите ове класе да бисте омогућили њихове прилагођене приказе за конзистентније приказивање у прегледачима и уређајима.
Обавезно користите одговарајући type
атрибут на свим улазима (нпр. email
за адресу е-поште или number
за нумеричке информације) да бисте искористили предности новијих контрола уноса као што су верификација е-поште, избор броја и још много тога.
Ево кратког примера за демонстрацију Боотстрап стилова образаца. Наставите да читате документацију о потребним часовима, изгледу обрасца и још много тога.
<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>
Контроле текстуалног облика — попут <input>
с, <select>
с и <textarea>
с — стилизоване су са .form-control
класом. Укључени су стилови за општи изглед, стање фокуса, величине и још много тога.
Обавезно истражите наше прилагођене форме да бисте додатно стилизовали <select>
.
<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>
За уносе датотека, замените .form-control
за .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>
Подесите висине користећи класе као што су .form-control-lg
и .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>
Додајте readonly
логички атрибут на улаз да бисте спречили модификацију вредности улаза. Уноси само за читање изгледају лакши (баш као и онемогућени улази), али задржавају стандардни курсор.
<input class="form-control" type="text" placeholder="Readonly input here…" readonly>
Ако желите да <input readonly>
елементи у обрасцу буду стилизовани као обичан текст, користите .form-control-plaintext
класу да бисте уклонили подразумевани стил поља обрасца и сачували исправну маргину и допуну.
<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>
Подразумевана поља за потврду и радио уређаји су побољшани уз помоћ једне класе за оба типа уноса која побољшава изглед и понашање њихових ХТМЛ.form-check
елемената . Поља за потврду служе за бирање једне или више опција на листи, док су радио уређаји за избор једне опције из више.
Подржани су онемогућени оквири за потврду и радио станице, али да бисте обезбедили not-allowed
курсор на надређеном <label>
, мораћете да додате disabled
атрибут у .form-check-input
. Дисаблед атрибут ће применити светлију боју како би помогао да се укаже на стање уноса.
Поље за потврду и коришћење радио уређаја су направљени да подржавају валидацију обрасца засновану на ХТМЛ-у и пружају сажете, приступачне ознаке. Као такви, наши <input>
с и <label>
с су сродни елементи за разлику од <input>
унутар а <label>
. Ово је мало опширније јер морате навести id
и for
атрибуте да бисте повезали <input>
и <label>
.
Подразумевано, било који број поља за потврду и радија који су непосредни брат или сестра биће вертикално наслагани и на одговарајући начин распоређени са .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>
Групирајте поља за потврду или радио станице у истом хоризонталном реду додавањем .form-check-inline
у било који .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
у уносе .form-check
који немају текст ознаке. Не заборавите да и даље обезбедите неки облик ознаке за помоћне технологије (на пример, коришћење 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>
Пошто се Боотстрап примењује display: block
и width: 100%
на скоро све наше контроле обрасца, обрасци ће се подразумевано слагати вертикално. Додатне класе се могу користити за варирање овог распореда на основу облика.
Класа .form-group
је најлакши начин за додавање структуре обрасцима. Пружа флексибилну класу која подстиче правилно груписање ознака, контрола, опционог текста помоћи и порука о валидацији образаца. Подразумевано се примењује само margin-bottom
, али .form-inline
по потреби преузима додатне стилове. Користите га са <fieldset>
с, <div>
с или скоро било којим другим елементом.
<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>
Сложеније форме се могу изградити помоћу наших мрежних класа. Користите их за изгледе образаца који захтевају више колона, различите ширине и додатне опције поравнања.
<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
за .form-row
, варијацију нашег стандардног реда мреже која замењује подразумеване олуке колона за чвршће и компактније распореде.
<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>
Сложенији распореди се такође могу креирати помоћу система мреже.
<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>
Креирајте хоризонталне форме помоћу мреже додавањем .row
класе у групе образаца и коришћењем .col-*-*
класа да одредите ширину ваших ознака и контрола. Обавезно додајте .col-form-label
и своје <label>
с тако да буду вертикално центрирани са припадајућим контролама обрасца.
Понекад ћете можда морати да користите помоћне програме за маргине или паддинг да бисте направили савршено поравнање које вам је потребно. На пример, уклонили смо padding-top
ознаку на нашим наслаганим радио улазима да бисмо боље поравнали основну линију текста.
<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>
Обавезно користите .col-form-label-sm
или .col-form-label-lg
за своје <label>
с или <legend>
с да бисте правилно пратили величину .form-control-lg
и .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>
Као што је приказано у претходним примерима, наш систем мреже вам омогућава да поставите било који број .col
с унутар .row
или .form-row
. Они ће подједнако поделити доступну ширину између себе. Такође можете одабрати подскуп својих колона који ће заузимати више или мање простора, док преостали .col
с подједнако деле остатак, са специфичним класама колона као што је .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>
Пример у наставку користи услужни програм флекбок да вертикално центрира садржај и мења .col
се .col-auto
тако да ваше колоне заузимају само онолико простора колико је потребно. Другим речима, колона се сама одређује на основу садржаја.
<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>
Затим можете то још једном ремиксовати са класама колона специфичних за величину.
<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>
И наравно , подржане су прилагођене контроле обрасца .
<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>
Користите .form-inline
класу да прикажете низ ознака, контрола обрасца и дугмади у једном хоризонталном реду. Контроле обрасца унутар уметнутих образаца незнатно се разликују од подразумеваних стања.
- Контроле су
display: flex
, сажимају било који ХТМЛ бели простор и омогућавају вам да обезбедите контролу поравнања помоћу услужних програма за размак и флексбокс . - Контроле и улазне групе добијају
width: auto
да замене Боотстрап подразумевану вредностwidth: 100%
. - Контроле се појављују само у оквирима за приказ који су широки најмање 576 пиксела да би се узели у обзир уски оквири за приказ на мобилним уређајима.
Можда ћете морати ручно да решите ширину и поравнање појединачних контрола обрасца помоћу услужних програма за размак (као што је приказано испод). На крају, обавезно увек укључите а <label>
уз сваку контролу обрасца, чак и ако треба да га сакријете од посетилаца који не читају екран помоћу .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>
Подржане су и прилагођене контроле обрасца и избори.
<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>
Алтернативе скривеним ознакама
Помоћне технологије као што су читачи екрана ће имати проблема са вашим обрасцима ако не укључите ознаку за сваки унос. За ове уметнуте обрасце, можете сакрити ознаке помоћу .sr-only
класе. Постоје додатне алтернативне методе обезбеђивања ознаке за помоћне технологије, као што је aria-label
атрибут или aria-labelledby
. title
Ако ништа од овога није присутно, помоћне технологије могу да прибегну коришћењу placeholder
атрибута, ако постоји, али имајте на уму да се не препоручује употреба placeholder
као замена за друге методе обележавања.
Текст помоћи на нивоу блока у обрасцима се може креирати помоћу .form-text
(раније познатог као .help-block
у в3). Уграђени текст помоћи може се флексибилно имплементирати коришћењем било ког уграђеног ХТМЛ елемента и услужних класа као што је .text-muted
.
Повезивање текста помоћи са контролама обрасца
Текст помоћи треба да буде експлицитно повезан са контролом обрасца на коју се односи коришћењем aria-describedby
атрибута. Ово ће осигурати да ће помоћне технологије — као што су читачи екрана — објавити овај текст помоћи када се корисник фокусира или уђе у контролу.
Текст помоћи испод уноса може бити стилизован са .form-text
. Ова класа укључује display: block
и додаје горњу маргину ради лакшег размака од улаза изнад.
<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>
Уметнути текст може да користи било који типичан инлине ХТМЛ елемент (било да се ради о <small>
, <span>
, или нешто треће) са ништа више од услужне класе.
<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>
Додајте disabled
логички атрибут на улаз да бисте спречили интеракције корисника и учинили да изгледа лакше.
Додајте disabled
атрибут у а <fieldset>
да бисте онемогућили све контроле унутар.
<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>
Упозорење са сидрима
Подразумевано, прегледачи ће третирати све изворне контроле обрасца ( <input>
и елементе) унутар а као онемогућене, спречавајући интеракције <select>
и тастатуре и миша на њима. Међутим, ако ваш образац такође укључује елементе, њима ће бити дат само стил . Као што је наведено у одељку о онемогућеном стању за дугмад (а посебно у пододељку за елементе сидра), ово ЦСС својство још увек није стандардизовано и није у потпуности подржано у Опера 18 и старијим верзијама, или у Интернет Екплорер-у 10, и победило је не спречава кориснике тастатуре да се фокусирају или активирају ове везе. Да бисте били сигурни, користите прилагођени ЈаваСцрипт да бисте онемогућили такве везе.<button>
<fieldset disabled>
<a ... class="btn btn-*">
pointer-events: none
Компатибилност са више претраживача
Док ће Боотстрап применити ове стилове у свим прегледачима, Интернет Екплорер 11 и старији не подржавају у потпуности disabled
атрибут на <fieldset>
. Користите прилагођени ЈаваСцрипт да бисте онемогућили скуп поља у овим прегледачима.
Обезбедите вредне повратне информације својим корисницима уз ХТМЛ5 валидацију обрасца – доступну у свим подржаним прегледачима . Изаберите неку од подразумеваних повратних информација о валидацији прегледача или примените прилагођене поруке помоћу наших уграђених класа и почетничког ЈаваСцрипт-а.
Топло препоручујемо прилагођене стилове провере пошто се подразумеване поставке претраживача не објављују читачима екрана.
Ево како функционише валидација обрасца са Боотстрапом:
- Валидација ХТМЛ форме се примењује преко ЦСС две псеудокласе
:invalid
и:valid
. Односи се на<input>
,<select>
и<textarea>
елементе. - Боотстрап обухвата
:invalid
и:valid
стилове на родитељску.was-validated
класу, обично се примењује на<form>
. У супротном, свако обавезно поље без вредности приказује се као неважеће при учитавању странице. На овај начин можете изабрати када да их активирате (обично након покушаја подношења обрасца). - Као резервни,
.is-invalid
и.is-valid
класе се могу користити уместо псеудо-класа за валидацију на страни сервера . Не захтевају.was-validated
родитељску класу. - Због ограничења у начину на који ЦСС функционише, не можемо (тренутно) да применимо стилове на а
<label>
који се налази испред контроле обрасца у ДОМ-у без помоћи прилагођеног ЈаваСцрипт-а. - Сви савремени претраживачи подржавају АПИ за валидацију ограничења , серију ЈаваСцрипт метода за проверу контроле обрасца.
- Поруке са повратним информацијама могу да користе подразумеване поставке претраживача (различите за сваки прегледач и нестилизиране преко ЦСС-а) или наше прилагођене стилове повратних информација са додатним ХТМЛ-ом и ЦСС-ом.
- Можете да обезбедите прилагођене поруке о валидности са
setCustomValidity
у ЈаваСцрипт-у.
Имајући то на уму, размотрите следеће демонстрације за наше прилагођене стилове валидације обрасца, опционе класе на страни сервера и подразумеване вредности претраживача.
За поруке о валидацији прилагођеног Боотстрап обрасца, мораћете да додате novalidate
логички атрибут у свој <form>
. Ово онемогућава подразумеване савете прегледача за повратне информације, али и даље пружа приступ АПИ-јима за валидацију обрасца у ЈаваСцрипт-у. Покушајте да пошаљете образац испод; наш ЈаваСцрипт ће пресрести дугме за слање и пренети вам повратне информације.
Када покушате да пошаљете, видећете стилове :invalid
и :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>
Нисте заинтересовани за прилагођене повратне информације о валидацији или писање ЈаваСцрипт-а да бисте променили понашање обрасца? Све у реду, можете користити подразумеване поставке претраживача. Покушајте да пошаљете образац испод. У зависности од вашег претраживача и ОС-а, видећете мало другачији стил повратних информација.
Иако се ови стилови повратних информација не могу стилизовати помоћу ЦСС-а, и даље можете да прилагодите текст повратних информација путем ЈаваСцрипт-а.
<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>
Препоручујемо да користите проверу ваљаности на страни клијента, али у случају да вам је потребна страна сервера, можете навести неважећа и важећа поља обрасца са .is-invalid
и .is-valid
. Имајте на уму да .invalid-feedback
је такође подржано са овим класама.
<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>
Наши примери образаца приказују изворне текстуалне слова <input>
изнад, али стилови валидације обрасца су доступни и за наше прилагођене контроле обрасца.
<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>
Ако ваш изглед обрасца то дозвољава, можете заменити .{valid|invalid}-feedback
класе за .{valid|invalid}-tooltip
класе да бисте приказали повратне информације о валидацији у стилизованом опису алата. Обавезно имате родитеља са position: relative
њим за позиционирање у опису алатке. У примеру испод, наше класе колона то већ имају, али ваш пројекат може захтевати алтернативно подешавање.
<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>
За још више прилагођавања и конзистентност више прегледача, користите наше потпуно прилагођене елементе обрасца да замените подразумеване вредности прегледача. Изграђени су на врху семантичке и приступачне ознаке, тако да су солидна замена за сваку подразумевану контролу обрасца.
Свако поље за потврду и радио су умотани у а <div>
са братом или сестром <span>
да би се креирала наша прилагођена контрола и а <label>
за пратећи текст. Структурно, ово је исти приступ као и наш подразумевани .form-check
.
Користимо селектор брата и сестра ( ~
) за сва наша <input>
стања — на пример — да бисмо :checked
правилно стилизовали наш прилагођени индикатор обрасца. Када се комбинује са .custom-control-label
класом, можемо такође да стилизујемо текст за сваку ставку на основу стања <input>
'.
Сакривамо подразумевану вредност <input>
помоћу opacity
и користимо .custom-control-label
за изградњу новог прилагођеног индикатора обрасца уместо њега помоћу ::before
и ::after
. Нажалост, не можемо да направимо прилагођени само из <input>
јер ЦСС content
не ради на том елементу.
У провереним стањима користимо басе64 уграђене СВГ иконе из Опен Ицониц . Ово нам пружа најбољу контролу за стилизовање и позиционирање у прегледачима и уређајима.
<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>
Прилагођена поља за потврду такође могу да користе :indeterminate
псеудо класу када се ручно подесе преко ЈаваСцрипт-а (нема доступног ХТМЛ атрибута за његово навођење).
Ако користите јКуери, нешто попут овога би требало да буде довољно:
<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>
Прилагођени оквири за потврду и радио такође могу бити онемогућени. Додајте disabled
логички атрибут у <input>
и прилагођени индикатор и опис ознаке ће бити аутоматски стилизовани.
<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>
Прилагођеним <select>
менијима је потребна само прилагођена класа .custom-select
да би покренули прилагођене стилове.
<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>
Такође можете бирати између малих и великих прилагођених одабира који одговарају нашим уносима текста сличне величине.
<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>
Атрибут multiple
је такође подржан:
<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>
Као што је size
атрибут:
<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>
Унос датотеке је најгрубљи од гомиле и захтева додатни ЈаваСцрипт ако желите да их повежете са функционалним Изаберите датотеку... и текстом имена изабраног фајла.
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Choose file</label>
</div>
Сакривамо подразумевану датотеку <input>
преко opacity
и уместо тога стилизујемо <label>
. Дугме се генерише и позиционира са ::after
. На крају, проглашавамо а width
и height
он <input>
за правилан размак за околни садржај.
:lang()
Псеудо-класа се користи да омогући превод текста „Прегледај“ на друге језике. Замените или додајте уносе у $custom-file-text
Сасс променљиву са релевантном језичком ознаком и локализованим стринговима. Енглеске жице се могу прилагодити на исти начин. На пример, ево како се може додати шпански превод (шифра шпанског језика је es
):
Ево lang(es)
у акцији на прилагођеном уносу датотеке за шпански превод:
<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>
Мораћете да правилно подесите језик свог документа (или његовог подстабла) да би се приказао исправан текст. Ово се може урадити помоћу атрибутаlang
на <html>
елементу или Content-Language
ХТТП заглавља , између осталих метода.