Source

Forme

Exemple și instrucțiuni de utilizare pentru stilurile de control al formularelor, opțiunile de aspect și componentele personalizate pentru crearea unei game largi de formulare.

Prezentare generală

Controalele formularului Bootstrap se extind pe stilurile noastre de formulare repornite cu clase. Utilizați aceste clase pentru a opta pentru afișajele lor personalizate pentru o redare mai consecventă pe browsere și dispozitive.

Asigurați-vă că utilizați un typeatribut adecvat pentru toate intrările (de exemplu, emailpentru adresa de e-mail sau numberpentru informații numerice) pentru a profita de controalele de intrare mai noi, cum ar fi verificarea e-mailului, selectarea numerelor și multe altele.

Iată un exemplu rapid pentru a demonstra stilurile de formulare ale Bootstrap. Continuați să citiți pentru documentația despre clasele necesare, aspectul formularelor și multe altele.

Nu vom împărtăși niciodată e-mailul tău cu nimeni altcineva.
<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>

Controale de formulare

Controalele formularelor textuale, cum ar fi <input>s, <select>s și <textarea>s, sunt stilate cu .form-controlclasa. Sunt incluse stiluri pentru aspectul general, starea de focalizare, dimensiunea și multe altele.

Asigurați-vă că explorați formele noastre personalizate pentru a crea mai multe stiluri <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>

Pentru intrări de fișiere, schimbați .form-controlcu .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>

Dimensiunea

Setați înălțimi folosind clase precum .form-control-lgși .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>

Numai citire

Adăugați readonlyatributul boolean pe o intrare pentru a preveni modificarea valorii intrării. Intrările numai pentru citire par mai ușoare (la fel ca intrările dezactivate), dar păstrează cursorul standard.

<input class="form-control" type="text" placeholder="Readonly input here…" readonly>

Numai text simplu

Dacă doriți să aveți <input readonly>elemente din formularul dvs. stilate ca text simplu, utilizați .form-control-plaintextclasa pentru a elimina stilul implicit al câmpului de formular și pentru a păstra marginea și umplutura corecte.

<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>

Casete de selectare și radiouri

Casetele de selectare și radiourile implicite sunt îmbunătățite cu ajutorul unei singure clase pentru ambele tipuri de intrare .form-check, care îmbunătățește aspectul și comportamentul elementelor lor HTML . Casetele de selectare sunt pentru a selecta una sau mai multe opțiuni dintr-o listă, în timp ce radiourile sunt pentru a selecta o opțiune din mai multe.

Casetele de selectare și radiourile dezactivate sunt acceptate, dar pentru a oferi un not-allowedcursor la plasarea cursorului pe părinte <label>, va trebui să adăugați disabledatributul la .form-check-input. Atributul dezactivat va aplica o culoare mai deschisă pentru a ajuta la indicarea stării intrării.

Casetele de selectare și utilizarea radiourilor sunt concepute pentru a accepta validarea formularelor pe bază de HTML și pentru a oferi etichete concise și accesibile. Ca atare, <input>s și <label>s-urile noastre sunt elemente frate, spre deosebire de un <input>în interiorul unui <label>. Acest lucru este puțin mai detaliat, deoarece trebuie să specificați idși foratributele pentru a lega <input>și <label>.

Implicit (stivuit)

În mod implicit, orice număr de casete de selectare și radiouri care sunt frați imediate vor fi stivuite vertical și distanțate corespunzător cu .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>

In linie

Grupați casetele de selectare sau radiourile pe același rând orizontal adăugând .form-check-inlinela orice .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>

Fara etichete

Adăugați .position-staticla intrări în .form-checkcare nu au niciun text de etichetă. Nu uitați să furnizați în continuare o formă de etichetă pentru tehnologiile de asistență (de exemplu, folosind 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>

Aspect

Deoarece Bootstrap se aplică display: blockși width: 100%pentru aproape toate controalele noastre de formulare, formularele se vor stivui în mod implicit pe verticală. Pot fi folosite clase suplimentare pentru a varia acest aspect pe bază de formular.

Formați grupuri

Clasa .form-groupeste cea mai simplă modalitate de a adăuga o structură la formulare. Oferă o clasă flexibilă care încurajează gruparea adecvată a etichetelor, controalelor, textului de ajutor opțional și a mesajelor de validare a formularelor. În mod implicit, se aplică doar margin-bottom, dar preia stiluri suplimentare după .form-inlinecum este necesar. Utilizați-l cu <fieldset>s, <div>s sau aproape orice alt 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>

Formă grilă

Forme mai complexe pot fi construite folosind clasele noastre grid. Folosiți-le pentru modele de formulare care necesită mai multe coloane, lățimi variate și opțiuni suplimentare de aliniere.

<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>

Formă rând

De asemenea, puteți schimba .rowcu .form-row, o variantă a rândului nostru de grilă standard care înlocuiește jgheaburile implicite ale coloanei pentru aspecte mai strânse și mai compacte.

<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>

De asemenea, pot fi create layout-uri mai complexe cu sistemul de grilă.

<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>

Forma orizontală

Creați formulare orizontale cu grila adăugând .rowclasa pentru a forma grupuri și folosind .col-*-*clasele pentru a specifica lățimea etichetelor și a controalelor. Asigurați-vă că adăugați .col-form-labelși la <label>e-urile dvs., astfel încât acestea să fie centrate vertical cu controalele de formular asociate.

Uneori, poate trebuie să utilizați utilități de marjă sau de umplutură pentru a crea alinierea perfectă de care aveți nevoie. De exemplu, am eliminat padding-topeticheta de pe intrările radio stivuite pentru a alinia mai bine linia de bază a textului.

Radiouri
Caseta de bifat
<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>
Dimensiunea orizontală a etichetei

Asigurați-vă că utilizați .col-form-label-smsau .col-form-label-lgla <label>s sau <legend>s pentru a urma corect dimensiunea .form-control-lgși .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>

Dimensiunea coloanei

După cum se arată în exemplele anterioare, sistemul nostru de grilă vă permite să plasați orice număr de .cols în a .rowsau .form-row. Ei vor împărți în mod egal lățimea disponibilă între ele. De asemenea, puteți alege un subset de coloane pentru a ocupa mai mult sau mai puțin spațiu, în timp ce restul .cols-a împărțit în mod egal pe restul, cu clase de coloane specifice, cum ar fi .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>

Dimensiune automată

Exemplul de mai jos folosește un utilitar flexbox pentru a centra vertical conținutul și se modifică .colastfel .col-autoîncât coloanele dvs. să ocupe doar spațiul necesar. Cu alte cuvinte, coloana se autodimensionează în funcție de conținut.

@
<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>

Puteți apoi să remixați acest lucru din nou cu clase de coloane specifice dimensiunii.

@
<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>

Și, desigur , controalele personalizate ale formularelor sunt acceptate.

<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>

Formulare inline

Utilizați .form-inlineclasa pentru a afișa o serie de etichete, controale de formular și butoane pe un singur rând orizontal. Controalele formularelor din formularele inline variază ușor față de stările lor implicite.

  • Controalele sunt display: flex, restrângând orice spațiu alb HTML și permițându-vă să oferiți control al alinierii cu utilitare de spațiere și flexbox .
  • Controalele și grupurile de intrare primesc width: autopentru a înlocui valoarea implicită Bootstrap width: 100%.
  • Comenzile apar în linie numai în ferestrele de vizualizare care au o lățime de cel puțin 576 px pentru a ține cont de ferestrele de vizualizare înguste de pe dispozitivele mobile.

Este posibil să fie nevoie să abordați manual lățimea și alinierea controalelor individuale ale formularelor cu utilitare de spațiere (după cum se arată mai jos). În cele din urmă, asigurați-vă că includeți întotdeauna un <label>control la fiecare formular, chiar dacă trebuie să îl ascundeți de vizitatorii care nu sunt cititori de ecran cu .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>

Controalele și selectările personalizate ale formularelor sunt, de asemenea, acceptate.

<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>
Alternative la etichetele ascunse

Tehnologiile de asistență, cum ar fi cititoarele de ecran, vor avea probleme cu formularele dvs. dacă nu includeți o etichetă pentru fiecare intrare. Pentru aceste formulare inline, puteți ascunde etichetele folosind .sr-onlyclasa. Există și alte metode alternative de furnizare a unei etichete pentru tehnologiile de asistență, cum ar fi aria-labelatributul sau aria-labelledby. titleDacă niciuna dintre acestea nu este prezentă, tehnologiile de asistență pot recurge la utilizarea placeholderatributului, dacă este prezent, dar rețineți că utilizarea lui placeholderca înlocuitor pentru alte metode de etichetare nu este recomandată.

Text de ajutor

Textul de ajutor la nivel de bloc în formulare poate fi creat folosind .form-text(cunoscut anterior ca .help-blockîn v3). Textul de ajutor inline poate fi implementat flexibil folosind orice element HTML inline și clase de utilitate precum .text-muted.

Asocierea textului de ajutor cu controalele formularului

Textul de ajutor ar trebui să fie asociat în mod explicit cu controlul formularului la care se referă folosind aria-describedbyatributul. Acest lucru va asigura că tehnologiile de asistență, cum ar fi cititoarele de ecran, vor anunța acest text de ajutor atunci când utilizatorul se concentrează sau intră în control.

Textul de ajutor de mai jos intrările poate fi stilat cu .form-text. Această clasă include display: blockși adaugă o marjă superioară pentru o distanță ușoară față de intrările de mai sus.

Parola dvs. trebuie să aibă 8-20 de caractere, să conțină litere și cifre și nu trebuie să conțină spații, caractere speciale sau emoji.
<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>

Textul inline poate folosi orice element HTML inline tipic (fie acesta <small>, <span>, sau altceva) cu nimic mai mult decât o clasă de utilitate.

Trebuie să aibă 8-20 de caractere.
<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>

Formulare dezactivate

Adăugați disabledatributul boolean pe o intrare pentru a preveni interacțiunile utilizatorului și pentru a o face să pară mai ușoară.

<input class="form-control" id="disabledInput" type="text" placeholder="Disabled input here..." disabled>

Adăugați disabledatributul la a <fieldset>pentru a dezactiva toate controalele din interior.

<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>
Avertisment cu ancore

În mod implicit, browserele vor trata toate comenzile de formulare native ( <input>, <select>și <button>elementele) din interiorul unui <fieldset disabled>ca fiind dezactivate, prevenind atât interacțiunile de la tastatură, cât și ale mouse-ului. Cu toate acestea, dacă formularul dvs. include și <a ... class="btn btn-*">elemente, acestea vor primi doar un stil pointer-events: none. După cum s-a menționat în secțiunea despre starea dezactivată pentru butoane (și în special în subsecțiunea pentru elementele de ancorare), această proprietate CSS nu este încă standardizată și nu este pe deplin acceptată în Opera 18 și mai jos, sau în Internet Explorer 10 și a câștigat nu împiedică utilizatorii de tastatură să poată concentra sau activa aceste legături. Deci, pentru a fi în siguranță, utilizați JavaScript personalizat pentru a dezactiva astfel de link-uri.

Compatibilitate între browsere

În timp ce Bootstrap va aplica aceste stiluri în toate browserele, Internet Explorer 11 și versiunile anterioare nu acceptă pe deplin disabledatributul pe un <fieldset>. Utilizați JavaScript personalizat pentru a dezactiva setul de câmpuri în aceste browsere.

Validare

Furnizați feedback valoros și posibil utilizatorilor dvs. cu validarea formularelor HTML5 – disponibilă în toate browserele noastre acceptate . Alegeți din feedbackul de validare implicit al browserului sau implementați mesaje personalizate cu clasele noastre încorporate și JavaScript de pornire.

recomandăm cu căldură stilurile de validare personalizate, deoarece valorile implicite ale browserului nativ nu sunt anunțate cititorilor de ecran.

Cum functioneaza

Iată cum funcționează validarea formularelor cu Bootstrap:

  • Validarea formularului HTML este aplicată prin intermediul celor două pseudoclase CSS :invalidși :valid. Se aplică elementelor <input>, <select>, și <textarea>.
  • Bootstrap vizează stilurile :invalidși la clasa părinte, de obicei aplicate la . În caz contrar, orice câmp obligatoriu fără valoare va apărea ca nevalid la încărcarea paginii. În acest fel, puteți alege când să le activați (de obicei, după ce se încearcă trimiterea formularului).:valid.was-validated<form>
  • Ca alternativă, .is-invalidși .is-validclasele pot fi utilizate în locul pseudo-claselor pentru validarea pe partea serverului . Nu necesită o .was-validatedclasă pentru părinți.
  • Din cauza constrângerilor legate de modul în care funcționează CSS, nu putem (în prezent) să aplicăm stiluri unui <label>control care vine înaintea unui control de formular în DOM fără ajutorul JavaScript personalizat.
  • Toate browserele moderne acceptă API-ul de validare a constrângerilor , o serie de metode JavaScript pentru validarea controalelor de formulare.
  • Mesajele de feedback pot utiliza setările implicite ale browserului (diferite pentru fiecare browser și nestilabile prin CSS) sau stilurile noastre personalizate de feedback cu HTML și CSS suplimentar.
  • Puteți furniza mesaje de valabilitate personalizate setCustomValidityîn JavaScript.

Având în vedere acest lucru, luați în considerare următoarele demonstrații pentru stilurile noastre personalizate de validare a formularelor, clasele opționale pe partea serverului și valorile implicite ale browserului.

Stiluri personalizate

Pentru mesajele personalizate de validare a formularelor Bootstrap, va trebui să adăugați novalidateatributul boolean la <form>. Aceasta dezactivează sfaturile instrumente de feedback implicite ale browserului, dar oferă totuși acces la API-urile de validare a formularelor în JavaScript. Încercați să trimiteți formularul de mai jos; JavaScript-ul nostru va intercepta butonul de trimitere și vă va transmite feedback.

Când încercați să trimiteți, veți vedea stilurile :invalidși :validaplicate controalelor formularului.

Looks good!
Arata bine!
@
Vă rugăm să alegeți un nume de utilizator.
Vă rugăm să furnizați un oraș valid.
Vă rugăm să furnizați o stare validă.
Please provide a valid zip.
You must agree before submitting.
<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>

Valori implicite ale browserului

Nu sunteți interesat de mesajele de feedback personalizate de validare sau de a scrie JavaScript pentru a schimba comportamentul formularelor? Toate bune, puteți folosi setările implicite ale browserului. Încercați să trimiteți formularul de mai jos. În funcție de browser și de sistemul de operare, veți vedea un stil ușor diferit de feedback.

Deși aceste stiluri de feedback nu pot fi stilate cu CSS, puteți totuși să personalizați textul de feedback prin JavaScript.

@
<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>

Partea de server

Vă recomandăm să utilizați validarea pe partea clientului, dar în cazul în care aveți nevoie de partea serverului, puteți indica câmpurile de formular nevalide și valide cu .is-invalidși .is-valid. Rețineți că .invalid-feedbackeste acceptat și cu aceste clase.

Arata bine!
Arata bine!
@
Vă rugăm să alegeți un nume de utilizator.
Vă rugăm să furnizați un oraș valid.
Vă rugăm să furnizați o stare validă.
Vă rugăm să furnizați un zip valid.
Trebuie să fiți de acord înainte de a trimite.
<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>

Elemente suportate

Exemplele noastre de formulare arată textul nativ <input>de mai sus, dar stilurile de validare a formularelor sunt disponibile și pentru controalele noastre personalizate ale formularelor.

Exemplu de text de feedback nevalid
Mai multe exemple de text de feedback nevalid
Exemplu de feedback de selecție personalizată nevalid
Exemplu de feedback nevalid pentru fișierele personalizate
<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>

Sfaturi instrumente

Dacă aspectul formularului permite acest lucru, puteți schimba .{valid|invalid}-feedbackclasele cu clase pentru .{valid|invalid}-tooltipa afișa feedback-ul de validare într-un sfat cu stil. Asigurați-vă că aveți un părinte position: relativepe el pentru poziționarea balonului. În exemplul de mai jos, clasele noastre de coloane au deja acest lucru, dar proiectul dvs. poate necesita o configurare alternativă.

Looks good!
Looks good!
@
Please choose a unique and valid username.
Please provide a valid city.
Please provide a valid state.
Please provide a valid zip.
<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>

Formulare personalizate

Pentru și mai multă personalizare și coerență între browsere, utilizați elementele noastre de formular complet personalizate pentru a înlocui setările implicite ale browserului. Sunt construite pe baza unui marcaj semantic și accesibil, astfel încât sunt înlocuitori solide pentru orice control implicit al formularului.

Casete de selectare și radiouri

Fiecare casetă de selectare și radio este împachetat într-o <div>cu un frate <span>pentru a crea controlul nostru personalizat și o <label>pentru textul însoțitor. Din punct de vedere structural, aceasta este aceeași abordare ca cea implicită .form-check.

Folosim selectorul de frați ( ~) pentru toate <input>stările noastre, cum ar fi, :checkedpentru a stila corect indicatorul de formular personalizat. Atunci când sunt combinate cu .custom-control-labelclasa, putem, de asemenea, stila textul pentru fiecare articol în funcție de <input>starea lui.

Ascundem implicit <input>cu opacityși folosim .custom-control-labelpentru a construi un nou indicator de formular personalizat în locul lui cu ::beforeși ::after. Din păcate, nu putem construi unul personalizat doar din <input>cauza că CSS-urile contentnu funcționează pe acel element.

În stările bifate, folosim pictograme SVG încorporate base64 din Open Iconic . Acest lucru ne oferă cel mai bun control pentru stil și poziționare pe browsere și dispozitive.

Casete de selectare

<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>

Casetele de selectare personalizate pot utiliza și :indeterminatepseudoclasa atunci când sunt setate manual prin JavaScript (nu există un atribut HTML disponibil pentru specificarea acesteia).

Dacă utilizați jQuery, ceva de genul acesta ar trebui să fie suficient:

$('.your-checkbox').prop('indeterminate', true)

Radiouri

<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>

In linie

<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>

Dezactivat

Casetele de selectare personalizate și radiourile pot fi, de asemenea, dezactivate. Adăugați disabledatributul boolean la <input>și indicatorul personalizat și descrierea etichetei vor fi stilate automat.

<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>

Selectați meniul

<select>Meniurile personalizate au nevoie doar de o clasă personalizată, .custom-selectpentru a declanșa stilurile personalizate.

<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>

De asemenea, puteți alege dintre selecții personalizate mici și mari pentru a se potrivi cu intrările noastre de text de dimensiuni similare.

<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>

Atributul multipleeste, de asemenea, acceptat:

<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>

La fel și sizeatributul:

<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>

Browser de fișiere

Fișierul de intrare este cel mai noduros din grup și necesită JavaScript suplimentar dacă doriți să le conectați cu funcția Alegeți fișierul... și textul cu numele fișierului selectat.

<div class="custom-file">
  <input type="file" class="custom-file-input" id="customFile">
  <label class="custom-file-label" for="customFile">Choose file</label>
</div>

Ascundem fișierul implicit <input>prin opacityși în schimb stilăm fișierul <label>. Butonul este generat și poziționat cu ::after. În cele din urmă, declarăm a widthși heightpe <input>pentru o spațiere adecvată pentru conținutul din jur.

Traducerea sau personalizarea șirurilor

:lang()Pseudo-clasa este folosită pentru a permite traducerea textului „Răsfoiește” în alte limbi. Suprascrieți sau adăugați intrări la $custom-file-textvariabila Sass cu eticheta de limbă relevantă și șiruri localizate. Corzile englezești pot fi personalizate în același mod. De exemplu, iată cum se poate adăuga o traducere în spaniolă (codul limbii spaniole este es):

$custom-file-text: (
  en: "Browse",
  es: "Elegir"
);

Iată lang(es)în acțiune introducerea fișierului personalizat pentru o traducere în spaniolă:

<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>

Va trebui să setați corect limba documentului (sau subarborele acestuia) pentru ca textul corect să fie afișat. Acest lucru se poate face folosind atributul delang pe <html>element sau Content-Languageantetul HTTP , printre alte metode.