Butoane
Utilizați stilurile personalizate de butoane Bootstrap pentru acțiuni în formulare, dialoguri și multe altele, cu suport pentru mai multe dimensiuni, stări și multe altele.
Exemple
Bootstrap include mai multe stiluri de butoane predefinite, fiecare având propriul scop semantic, cu câteva elemente suplimentare pentru mai mult control.
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-dark">Dark</button>
<button type="button" class="btn btn-link">Link</button>
Transmiterea sensului tehnologiilor de asistență
Folosirea culorii pentru a adăuga sens oferă doar o indicație vizuală, care nu va fi transmisă utilizatorilor de tehnologii de asistență, cum ar fi cititoarele de ecran. Asigurați-vă că informațiile notate de culoare sunt fie evidente din conținutul în sine (de exemplu, textul vizibil), fie sunt incluse prin mijloace alternative, cum ar fi textul suplimentar ascuns cu .visually-hidden
clasa.
Dezactivați împachetarea textului
Dacă nu doriți ca textul butonului să se încadreze, puteți adăuga .text-nowrap
clasa la buton. În Sass, puteți seta $btn-white-space: nowrap
să dezactivați împachetarea textului pentru fiecare buton.
Etichete pentru butoane
Clasele .btn
sunt concepute pentru a fi utilizate cu <button>
elementul. Cu toate acestea, puteți utiliza și aceste clase pe <a>
sau <input>
elemente (deși unele browsere pot aplica o randare ușor diferită).
Atunci când utilizați clase de butoane pe <a>
elemente care sunt utilizate pentru a declanșa funcționalitatea în pagină (cum ar fi restrângerea conținutului), mai degrabă decât să faceți linkuri către pagini noi sau secțiuni din pagina curentă, aceste linkuri ar trebui să aibă un role="button"
rol pentru a transmite în mod corespunzător scopul lor tehnologiilor de asistență, cum ar fi cititoare de ecran.
<a class="btn btn-primary" href="#" role="button">Link</a>
<button class="btn btn-primary" type="submit">Button</button>
<input class="btn btn-primary" type="button" value="Input">
<input class="btn btn-primary" type="submit" value="Submit">
<input class="btn btn-primary" type="reset" value="Reset">
Contur butoanele
Ai nevoie de un buton, dar nu de culorile puternice de fundal pe care le aduc? Înlocuiți clasele modificatoare implicite cu .btn-outline-*
cele pentru a elimina toate imaginile și culorile de fundal de pe orice buton.
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-light">Light</button>
<button type="button" class="btn btn-outline-dark">Dark</button>
Dimensiuni
Vrei nasturi mai mari sau mai mici? Adăugați .btn-lg
sau .btn-sm
pentru dimensiuni suplimentare.
<button type="button" class="btn btn-primary btn-lg">Large button</button>
<button type="button" class="btn btn-secondary btn-lg">Large button</button>
<button type="button" class="btn btn-primary btn-sm">Small button</button>
<button type="button" class="btn btn-secondary btn-sm">Small button</button>
Puteți chiar să rulați propria dimensiune personalizată cu variabile CSS:
<button type="button" class="btn btn-primary"
style="--bs-btn-padding-y: .25rem; --bs-btn-padding-x: .5rem; --bs-btn-font-size: .75rem;">
Custom button
</button>
Stare dezactivată
Faceți butoanele să pară inactive adăugând disabled
atributul boolean oricărui <button>
element. S-au aplicat butoane dezactivate pointer-events: none
, împiedicând declanșarea stărilor de trecere cu mouse-ul și activ.
<button type="button" class="btn btn-primary" disabled>Primary button</button>
<button type="button" class="btn btn-secondary" disabled>Button</button>
<button type="button" class="btn btn-outline-primary" disabled>Primary button</button>
<button type="button" class="btn btn-outline-secondary" disabled>Button</button>
Butoanele dezactivate care utilizează <a>
elementul se comportă puțin diferit:
<a>
s nu acceptădisabled
atributul, așa că trebuie să adăugați.disabled
clasa pentru ca aceasta să pară dezactivată vizual.- Unele stiluri prietenoase pentru viitor sunt incluse pentru a dezactiva toate
pointer-events
butoanele de ancorare. - Utilizarea butoanelor dezactivate
<a>
ar trebui să includăaria-disabled="true"
atributul pentru a indica starea elementului la tehnologiile de asistență. - Utilizarea butoanelor dezactivate
<a>
nu ar trebui să includăhref
atributul.
<a class="btn btn-primary disabled" role="button" aria-disabled="true">Primary link</a>
<a class="btn btn-secondary disabled" role="button" aria-disabled="true">Link</a>
Avertisment privind funcționalitatea linkului
Pentru a acoperi cazurile în care trebuie să păstrați href
atributul pe o legătură dezactivată, .disabled
clasa folosește pointer-events: none
pentru a încerca să dezactiveze funcționalitatea de legătură a lui <a>
s. Rețineți că această proprietate CSS nu este încă standardizată pentru HTML, dar toate browserele moderne o acceptă. În plus, chiar și în browserele care acceptă pointer-events: none
, navigarea cu tastatura rămâne neafectată, ceea ce înseamnă că utilizatorii de tastatură văzători și utilizatorii de tehnologii de asistență vor putea în continuare să activeze aceste linkuri. Deci, pentru a fi în siguranță, pe lângă aria-disabled="true"
, includeți și un tabindex="-1"
atribut pe aceste linkuri pentru a le împiedica să primească focalizarea tastaturii și utilizați JavaScript personalizat pentru a le dezactiva complet funcționalitatea.
<a href="#" class="btn btn-primary disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
<a href="#" class="btn btn-secondary disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
Blocați butoanele
Creați stive receptive de „butoane de blocare” cu lățime completă, cum ar fi cele din Bootstrap 4, cu o combinație de utilități de afișare și intervale. Folosind utilitare în loc de clase specifice butoanelor, avem un control mult mai mare asupra spațierii, alinierii și comportamentelor de răspuns.
<div class="d-grid gap-2">
<button class="btn btn-primary" type="button">Button</button>
<button class="btn btn-primary" type="button">Button</button>
</div>
Aici creăm o variație responsive, începând cu butoanele stivuite vertical până la punctul de md
întrerupere, unde .d-md-block
înlocuiește .d-grid
clasa, anulând astfel gap-2
utilitatea. Redimensionați browserul pentru a vedea cum se modifică.
<div class="d-grid gap-2 d-md-block">
<button class="btn btn-primary" type="button">Button</button>
<button class="btn btn-primary" type="button">Button</button>
</div>
Puteți ajusta lățimea butoanelor de bloc cu clasele de lățime a coloanei de grilă. De exemplu, pentru un „buton de blocare” de jumătate de lățime, utilizați .col-6
. Centrați-l și pe orizontală cu .mx-auto
.
<div class="d-grid gap-2 col-6 mx-auto">
<button class="btn btn-primary" type="button">Button</button>
<button class="btn btn-primary" type="button">Button</button>
</div>
Utilitare suplimentare pot fi folosite pentru a regla alinierea butoanelor atunci când sunt orizontale. Aici am luat exemplul nostru receptiv anterior și am adăugat câteva utilitare flexibile și un utilitar de marjă pe buton pentru a alinia la dreapta butoanele când nu mai sunt stivuite.
<div class="d-grid gap-2 d-md-flex justify-content-md-end">
<button class="btn btn-primary me-md-2" type="button">Button</button>
<button class="btn btn-primary" type="button">Button</button>
</div>
Plugin de buton
Plugin-ul pentru butoane vă permite să creați butoane simple de pornire/dezactivare.
Comutați stările
Adăugați data-bs-toggle="button"
pentru a comuta active
starea unui buton. Dacă comutați în prealabil un buton, trebuie să adăugați manual .active
clasa și aria-pressed="true"
să vă asigurați că este transmisă în mod corespunzător la tehnologiile de asistență.
<button type="button" class="btn btn-primary" data-bs-toggle="button">Toggle button</button>
<button type="button" class="btn btn-primary active" data-bs-toggle="button" aria-pressed="true">Active toggle button</button>
<button type="button" class="btn btn-primary" disabled data-bs-toggle="button">Disabled toggle button</button>
<a href="#" class="btn btn-primary" role="button" data-bs-toggle="button">Toggle link</a>
<a href="#" class="btn btn-primary active" role="button" data-bs-toggle="button" aria-pressed="true">Active toggle link</a>
<a class="btn btn-primary disabled" aria-disabled="true" role="button" data-bs-toggle="button">Disabled toggle link</a>
Metode
Puteți crea o instanță de buton cu constructorul de buton, de exemplu:
const bsButton = new bootstrap.Button('#myButton')
Metodă | Descriere |
---|---|
dispose |
Distruge butonul unui element. (Elimină datele stocate pe elementul DOM) |
getInstance |
Metodă statică care vă permite să obțineți instanța butonului asociată unui element DOM, o puteți utiliza astfel: bootstrap.Button.getInstance(element) . |
getOrCreateInstance |
Metodă statică care returnează o instanță de buton asociată unui element DOM sau creează una nouă în cazul în care nu a fost inițializată. Îl poți folosi astfel: bootstrap.Button.getOrCreateInstance(element) . |
toggle |
Comută starea push. Oferă butonului aspectul că a fost activat. |
De exemplu, pentru a comuta toate butoanele
document.querySelectorAll('.btn').forEach(buttonElement => {
const button = bootstrap.Button.getOrCreateInstance(buttonElement)
button.toggle()
})
CSS
Variabile
Adăugat în v5.2.0Ca parte a abordării în evoluție a variabilelor CSS a Bootstrap, butoanele folosesc acum variabile CSS locale activate .btn
pentru personalizare îmbunătățită în timp real. Valorile pentru variabilele CSS sunt setate prin Sass, astfel încât personalizarea Sass este încă acceptată.
--#{$prefix}btn-padding-x: #{$btn-padding-x};
--#{$prefix}btn-padding-y: #{$btn-padding-y};
--#{$prefix}btn-font-family: #{$btn-font-family};
@include rfs($btn-font-size, --#{$prefix}btn-font-size);
--#{$prefix}btn-font-weight: #{$btn-font-weight};
--#{$prefix}btn-line-height: #{$btn-line-height};
--#{$prefix}btn-color: #{$body-color};
--#{$prefix}btn-bg: transparent;
--#{$prefix}btn-border-width: #{$btn-border-width};
--#{$prefix}btn-border-color: transparent;
--#{$prefix}btn-border-radius: #{$btn-border-radius};
--#{$prefix}btn-hover-border-color: transparent;
--#{$prefix}btn-box-shadow: #{$btn-box-shadow};
--#{$prefix}btn-disabled-opacity: #{$btn-disabled-opacity};
--#{$prefix}btn-focus-box-shadow: 0 0 0 #{$btn-focus-width} rgba(var(--#{$prefix}btn-focus-shadow-rgb), .5);
Fiecare .btn-*
clasă modificatoare actualizează variabilele CSS corespunzătoare pentru a minimiza regulile CSS suplimentare cu mixurile noastre button-variant()
, button-outline-variant()
, și button-size()
.
Iată un exemplu de construire a unei .btn-*
clase modificatoare personalizate, așa cum facem noi pentru butoanele unice pentru documentele noastre, reatribuind variabilele CSS ale Bootstrap cu un amestec de propriile variabile CSS și Sass.
.btn-bd-primary {
--bs-btn-font-weight: 600;
--bs-btn-color: var(--bs-white);
--bs-btn-bg: var(--bd-violet);
--bs-btn-border-color: var(--bd-violet);
--bs-btn-border-radius: .5rem;
--bs-btn-hover-color: var(--bs-white);
--bs-btn-hover-bg: #{shade-color($bd-violet, 10%)};
--bs-btn-hover-border-color: #{shade-color($bd-violet, 10%)};
--bs-btn-focus-shadow-rgb: var(--bd-violet-rgb);
--bs-btn-active-color: var(--bs-btn-hover-color);
--bs-btn-active-bg: #{shade-color($bd-violet, 20%)};
--bs-btn-active-border-color: #{shade-color($bd-violet, 20%)};
}
Variabile Sass
$btn-padding-y: $input-btn-padding-y;
$btn-padding-x: $input-btn-padding-x;
$btn-font-family: $input-btn-font-family;
$btn-font-size: $input-btn-font-size;
$btn-line-height: $input-btn-line-height;
$btn-white-space: null; // Set to `nowrap` to prevent text wrapping
$btn-padding-y-sm: $input-btn-padding-y-sm;
$btn-padding-x-sm: $input-btn-padding-x-sm;
$btn-font-size-sm: $input-btn-font-size-sm;
$btn-padding-y-lg: $input-btn-padding-y-lg;
$btn-padding-x-lg: $input-btn-padding-x-lg;
$btn-font-size-lg: $input-btn-font-size-lg;
$btn-border-width: $input-btn-border-width;
$btn-font-weight: $font-weight-normal;
$btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075);
$btn-focus-width: $input-btn-focus-width;
$btn-focus-box-shadow: $input-btn-focus-box-shadow;
$btn-disabled-opacity: .65;
$btn-active-box-shadow: inset 0 3px 5px rgba($black, .125);
$btn-link-color: var(--#{$prefix}link-color);
$btn-link-hover-color: var(--#{$prefix}link-hover-color);
$btn-link-disabled-color: $gray-600;
// Allows for customizing button radius independently from global border radius
$btn-border-radius: $border-radius;
$btn-border-radius-sm: $border-radius-sm;
$btn-border-radius-lg: $border-radius-lg;
$btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out;
$btn-hover-bg-shade-amount: 15%;
$btn-hover-bg-tint-amount: 15%;
$btn-hover-border-shade-amount: 20%;
$btn-hover-border-tint-amount: 10%;
$btn-active-bg-shade-amount: 20%;
$btn-active-bg-tint-amount: 20%;
$btn-active-border-shade-amount: 25%;
$btn-active-border-tint-amount: 10%;
Sass mixins
Există trei mix-uri pentru butoane: mix-uri variante de contur de buton și buton (ambele bazate pe $theme-colors
), plus un mixin de dimensiunea butonului.
@mixin button-variant(
$background,
$border,
$color: color-contrast($background),
$hover-background: if($color == $color-contrast-light, shade-color($background, $btn-hover-bg-shade-amount), tint-color($background, $btn-hover-bg-tint-amount)),
$hover-border: if($color == $color-contrast-light, shade-color($border, $btn-hover-border-shade-amount), tint-color($border, $btn-hover-border-tint-amount)),
$hover-color: color-contrast($hover-background),
$active-background: if($color == $color-contrast-light, shade-color($background, $btn-active-bg-shade-amount), tint-color($background, $btn-active-bg-tint-amount)),
$active-border: if($color == $color-contrast-light, shade-color($border, $btn-active-border-shade-amount), tint-color($border, $btn-active-border-tint-amount)),
$active-color: color-contrast($active-background),
$disabled-background: $background,
$disabled-border: $border,
$disabled-color: color-contrast($disabled-background)
) {
--#{$prefix}btn-color: #{$color};
--#{$prefix}btn-bg: #{$background};
--#{$prefix}btn-border-color: #{$border};
--#{$prefix}btn-hover-color: #{$hover-color};
--#{$prefix}btn-hover-bg: #{$hover-background};
--#{$prefix}btn-hover-border-color: #{$hover-border};
--#{$prefix}btn-focus-shadow-rgb: #{to-rgb(mix($color, $border, 15%))};
--#{$prefix}btn-active-color: #{$active-color};
--#{$prefix}btn-active-bg: #{$active-background};
--#{$prefix}btn-active-border-color: #{$active-border};
--#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
--#{$prefix}btn-disabled-color: #{$disabled-color};
--#{$prefix}btn-disabled-bg: #{$disabled-background};
--#{$prefix}btn-disabled-border-color: #{$disabled-border};
}
@mixin button-outline-variant(
$color,
$color-hover: color-contrast($color),
$active-background: $color,
$active-border: $color,
$active-color: color-contrast($active-background)
) {
--#{$prefix}btn-color: #{$color};
--#{$prefix}btn-border-color: #{$color};
--#{$prefix}btn-hover-color: #{$color-hover};
--#{$prefix}btn-hover-bg: #{$active-background};
--#{$prefix}btn-hover-border-color: #{$active-border};
--#{$prefix}btn-focus-shadow-rgb: #{to-rgb($color)};
--#{$prefix}btn-active-color: #{$active-color};
--#{$prefix}btn-active-bg: #{$active-background};
--#{$prefix}btn-active-border-color: #{$active-border};
--#{$prefix}btn-active-shadow: #{$btn-active-box-shadow};
--#{$prefix}btn-disabled-color: #{$color};
--#{$prefix}btn-disabled-bg: transparent;
--#{$prefix}btn-disabled-border-color: #{$color};
--#{$prefix}gradient: none;
}
@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
--#{$prefix}btn-padding-y: #{$padding-y};
--#{$prefix}btn-padding-x: #{$padding-x};
@include rfs($font-size, --#{$prefix}btn-font-size);
--#{$prefix}btn-border-radius: #{$border-radius};
}
Sass bucle
Variantele de butoane (pentru butoanele obișnuite și de contur) folosesc mixurile lor respective cu $theme-colors
harta noastră pentru a genera clasele modificatoare în scss/_buttons.scss
.
@each $color, $value in $theme-colors {
.btn-#{$color} {
@if $color == "light" {
@include button-variant(
$value,
$value,
$hover-background: shade-color($value, $btn-hover-bg-shade-amount),
$hover-border: shade-color($value, $btn-hover-border-shade-amount),
$active-background: shade-color($value, $btn-active-bg-shade-amount),
$active-border: shade-color($value, $btn-active-border-shade-amount)
);
} @else if $color == "dark" {
@include button-variant(
$value,
$value,
$hover-background: tint-color($value, $btn-hover-bg-tint-amount),
$hover-border: tint-color($value, $btn-hover-border-tint-amount),
$active-background: tint-color($value, $btn-active-bg-tint-amount),
$active-border: tint-color($value, $btn-active-border-tint-amount)
);
} @else {
@include button-variant($value, $value);
}
}
}
@each $color, $value in $theme-colors {
.btn-outline-#{$color} {
@include button-outline-variant($value);
}
}