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.
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.
Pentru intrări de fișiere, schimbați .form-controlcu .form-control-file.
Dimensiunea
Setați înălțimi folosind clase precum .form-control-lgși .form-control-sm.
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.
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.
Interval de intrare
Setați intrările de interval de defilare orizontală folosind .form-control-range.
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. Atributul disabledva aplica o culoare mai deschisă pentru a ajuta la indicarea stării intrării.
Casetele de selectare și butoanele radio acceptă validarea formularelor pe bază de HTML și oferă 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.
In linie
Grupați casetele de selectare sau radiourile pe același rând orizontal adăugând .form-check-inlinela orice .form-check.
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).
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ă 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ă 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.
De asemenea, pot fi create layout-uri mai complexe cu sistemul de grilă.
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.
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.
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.
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.
Puteți apoi să remixați acest lucru din nou cu clase de coloane specifice dimensiunii.
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.
Controalele și selectările personalizate ale formularelor sunt, de asemenea, acceptate.
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.
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.
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ă.
Adăugați disabledatributul la a <fieldset>pentru a dezactiva toate controalele din interior.
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 sa 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 Internet Explorer 10 și nu va împiedica utilizatorii de tastatură să fie capabil să focalizeze sau să activeze 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.
În prezent, recomandăm să utilizați stiluri de validare personalizate, deoarece mesajele de validare implicite ale browserului nativ nu sunt expuse în mod constant la tehnologiile de asistență în toate browserele (mai ales, Chrome pe desktop și mobil).
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>
Pentru a reseta aspectul formularului (de exemplu, în cazul trimiterilor de formulare dinamice folosind AJAX), eliminați .was-validatedclasa din <form>nou după trimitere.
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.
Stilurile personalizate de feedback aplică culori personalizate, chenare, stiluri de focalizare și pictograme de fundal pentru a comunica mai bine feedbackul. Pictogramele de fundal pentru <select>s sunt disponibile numai cu .custom-selectși nu .form-control.
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.
Partea de server
Vă recomandăm să utilizați validarea pe partea client, dar în cazul în care aveți nevoie de validare pe 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.
Elemente suportate
Stilurile de validare sunt disponibile pentru următoarele controale și componente de formular:
<input>s și <textarea>s cu .form-control(inclusiv până la unul .form-controlîn grupurile de intrare)
<select>s cu .form-controlsau.custom-select
.form-checks
.custom-checkboxs și .custom-radios
.custom-file
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ă.
Personalizare
Stările de validare pot fi personalizate prin Sass cu $form-validation-statesharta. Situată în _variables.scssfișierul nostru, această hartă Sass este recircuită pentru a genera stările implicite valid/ de invalidvalidare. Este inclusă o hartă imbricată pentru personalizarea culorii și pictogramei fiecărui stat. Deși nicio altă stare nu este acceptată de browsere, cei care folosesc stiluri personalizate pot adăuga cu ușurință feedback de formulare mai complex.
Vă rugăm să rețineți că nu vă recomandăm să personalizați aceste valori fără a modifica și form-validation-statemixin-ul.
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, radio <input>și <label>împerechere sunt înfășurate într-o <div>pentru a crea controlul nostru personalizat. 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
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:
Radiouri
In linie
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.
Comutatoare
Un comutator are marcajul unei casete de selectare personalizată, dar folosește .custom-switchclasa pentru a reda un comutator de comutare. Comutatoarele acceptă, de asemenea, disabledatributul.
Selectați meniul
<select>Meniurile personalizate au nevoie doar de o clasă personalizată, .custom-selectpentru a declanșa stilurile personalizate. Stilurile personalizate sunt limitate la <select>aspectul inițial și nu le pot modifica din <option>cauza limitărilor browserului.
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.
Atributul multipleeste, de asemenea, acceptat:
La fel și sizeatributul:
Gamă
Creați <input type="range">controale personalizate cu .custom-range. Piesa (fondul) și degetul mare (valoarea) sunt ambele stilate astfel încât să apară la fel în toate browserele. Întrucât numai IE și Firefox acceptă „umplerea” piesei lor din stânga sau dreapta degetului mare ca mijloc de a indica vizual progresul, în prezent nu îl acceptăm.
Intrările de interval au valori implicite pentru minși max, 0respectiv 100, . Puteți specifica noi valori pentru cei care folosesc atributele minși .max
În mod implicit, intrările intervalului „snap” la valori întregi. Pentru a schimba acest lucru, puteți specifica o stepvaloare. În exemplul de mai jos, dublăm numărul de pași folosind step="0.5".
Browser de fișiere
Pluginul recomandat pentru a anima introducerea fișierului personalizat: bs-custom-file-input , asta este ceea ce folosim în prezent aici în documentele noastre.
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.
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 de caractere cu SCSS
: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):
Iată lang(es)în acțiune introducerea fișierului personalizat pentru o traducere în spaniolă:
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.
Traducerea sau personalizarea șirurilor de caractere cu HTML
Bootstrap oferă, de asemenea, o modalitate de a traduce textul „Răsfoiți” în HTML cu data-browseatributul care poate fi adăugat la eticheta de introducere personalizată (exemplu în olandeză):