Mga Pindutan
Gamitin ang mga custom na istilo ng button ng Bootstrap para sa mga aksyon sa mga form, dialog, at higit pa na may suporta para sa maraming laki, estado, at higit pa.
Mga halimbawa
Kasama sa Bootstrap ang ilang paunang natukoy na mga istilo ng button, bawat isa ay nagsisilbi sa sarili nitong semantic na layunin, na may ilang mga dagdag na itinapon para sa higit na kontrol.
<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>
Naghahatid ng kahulugan sa mga pantulong na teknolohiya
Ang paggamit ng kulay upang magdagdag ng kahulugan ay nagbibigay lamang ng visual na indikasyon, na hindi ibibigay sa mga gumagamit ng mga pantulong na teknolohiya - tulad ng mga screen reader. Siguraduhin na ang impormasyong tinutukoy ng kulay ay maaaring halata mula sa nilalaman mismo (hal. ang nakikitang teksto), o kasama sa pamamagitan ng mga alternatibong paraan, tulad ng karagdagang tekstong nakatago sa .visually-hidden
klase.
I-disable ang text wrapping
Kung ayaw mong i-wrap ang text ng button, maaari mong idagdag ang .text-nowrap
klase sa button. Sa Sass, maaari mong itakda $btn-white-space: nowrap
na huwag paganahin ang text wrapping para sa bawat button.
Mga tag ng pindutan
Ang .btn
mga klase ay idinisenyo upang magamit kasama ng <button>
elemento. Gayunpaman, maaari mo ring gamitin ang mga klase na ito sa <a>
o mga <input>
elemento (bagaman ang ilang mga browser ay maaaring maglapat ng bahagyang naiibang pag-render).
Kapag gumagamit ng mga klase ng button sa <a>
mga elemento na ginagamit upang mag-trigger ng in-page na functionality (tulad ng pag-collapse ng content), sa halip na mag-link sa mga bagong page o seksyon sa loob ng kasalukuyang page, ang mga link na ito ay dapat bigyan ng isang role="button"
upang naaangkop na maihatid ang kanilang layunin sa mga pantulong na teknolohiya tulad ng mga screen reader.
<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">
Mga pindutan ng outline
Nangangailangan ng isang pindutan, ngunit hindi ang mabigat na kulay ng background na dinadala nila? Palitan ang mga default na klase ng modifier ng .btn-outline-*
mga mag-aalis ng lahat ng larawan sa background at mga kulay sa anumang button.
<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>
Mga sukat
Gusto mo ba ng mas malaki o mas maliit na mga pindutan? Magdagdag .btn-lg
o .btn-sm
para sa mga karagdagang laki.
<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>
Estadong may kapansanan
Gawing hindi aktibo ang mga button sa pamamagitan ng pagdaragdag ng disabled
boolean attribute sa anumang <button>
elemento. Ang mga naka-disable na button ay pointer-events: none
inilapat sa, na pumipigil sa pag-hover at mga aktibong estado mula sa pag-trigger.
<button type="button" class="btn btn-lg btn-primary" disabled>Primary button</button>
<button type="button" class="btn btn-secondary btn-lg" disabled>Button</button>
<a>
Medyo naiiba ang pagkilos ng mga naka- disable na button gamit ang elemento:
<a>
s ay hindi sumusuporta sadisabled
katangian, kaya dapat mong idagdag ang.disabled
klase upang makita itong hindi pinagana.- Ang ilang mga istilong panghinaharap sa hinaharap ay kasama upang hindi paganahin ang lahat
pointer-events
sa mga pindutan ng anchor. - Ang mga naka- disable na button na gumagamit
<a>
ay dapat magsama ngaria-disabled="true"
katangian upang ipahiwatig ang estado ng elemento sa mga teknolohiyang pantulong. - Ang mga naka- disable na button na gumagamit
<a>
ay hindi dapat magsama nghref
attribute.
<a class="btn btn-primary btn-lg disabled" role="button" aria-disabled="true">Primary link</a>
<a class="btn btn-secondary btn-lg disabled" role="button" aria-disabled="true">Link</a>
Babala sa pagpapaandar ng link
Upang masakop ang mga kaso kung saan kailangan mong panatilihin ang href
katangian sa isang hindi pinaganang link, .disabled
ginagamit ng klase pointer-events: none
upang subukang huwag paganahin ang paggana ng link ng <a>
s. Tandaan na ang CSS property na ito ay hindi pa na-standardize para sa HTML, ngunit sinusuportahan ito ng lahat ng modernong browser. Bilang karagdagan, kahit na sa mga browser na sumusuporta pointer-events: none
, ang keyboard navigation ay nananatiling hindi naaapektuhan, ibig sabihin, ang mga nakikitang user ng keyboard at mga user ng mga pantulong na teknolohiya ay maa-activate pa rin ang mga link na ito. Kaya para maging ligtas, bilang karagdagan sa aria-disabled="true"
, magsama rin ng tabindex="-1"
attribute sa mga link na ito upang pigilan silang makatanggap ng focus sa keyboard, at gumamit ng custom na JavaScript upang ganap na i-disable ang kanilang functionality.
<a href="#" class="btn btn-primary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Primary link</a>
<a href="#" class="btn btn-secondary btn-lg disabled" tabindex="-1" role="button" aria-disabled="true">Link</a>
I-block ang mga button
Gumawa ng mga tumutugong stack ng buong lapad, "mga block button" tulad ng mga nasa Bootstrap 4 na may kumbinasyon ng aming mga utility sa display at gap. Sa pamamagitan ng paggamit ng mga utility sa halip na mga klase na partikular sa button, mayroon kaming higit na higit na kontrol sa spacing, alignment, at tumutugon na gawi.
<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>
Dito, lumikha kami ng isang tumutugon na pagkakaiba-iba, na nagsisimula sa mga patayong nakasalansan na mga pindutan hanggang sa md
breakpoint, kung saan .d-md-block
pinapalitan ang .d-grid
klase, kaya pinawalang-bisa ang gap-2
utility. Baguhin ang laki ng iyong browser upang makitang nagbabago ang mga ito.
<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>
Maaari mong ayusin ang lapad ng iyong mga block button na may mga klase sa lapad ng column ng grid. Halimbawa, para sa kalahating lapad na "block button", gamitin ang .col-6
. Igitna ito nang pahalang gamit ang .mx-auto
, masyadong.
<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>
Maaaring gamitin ang mga karagdagang kagamitan upang ayusin ang pagkakahanay ng mga pindutan kapag pahalang. Dito kinuha namin ang aming nakaraang tumutugon na halimbawa at nagdagdag ng ilang flex utilities at margin utility sa button para i-align sa kanan ang mga button kapag hindi na naka-stack ang mga ito.
<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 ng pindutan
Binibigyang-daan ka ng plugin ng button na lumikha ng mga simpleng on/off toggle button.
I-toggle ang mga estado
Idagdag data-bs-toggle="button"
upang i-toggle ang active
katayuan ng isang button. Kung pre-toggling mo ang isang button, dapat mong manu-manong idagdag ang .active
klase at aria-pressed="true"
upang matiyak na naaangkop ito sa mga pantulong na teknolohiya.
<button type="button" class="btn btn-primary" data-bs-toggle="button" autocomplete="off">Toggle button</button>
<button type="button" class="btn btn-primary active" data-bs-toggle="button" autocomplete="off" aria-pressed="true">Active toggle button</button>
<button type="button" class="btn btn-primary" disabled data-bs-toggle="button" autocomplete="off">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>
Paraan
Maaari kang lumikha ng isang halimbawa ng pindutan gamit ang tagabuo ng pindutan, halimbawa:
var button = document.getElementById('myButton')
var bsButton = new bootstrap.Button(button)
Pamamaraan | Paglalarawan |
---|---|
toggle |
I-toggle ang estado ng push. Binibigyan ang pindutan ng hitsura na ito ay na-activate. |
dispose |
Sinisira ang button ng isang elemento. (Aalisin ang nakaimbak na data sa elemento ng DOM) |
getInstance |
Static na paraan na nagbibigay-daan sa iyong makuha ang instance ng button na nauugnay sa isang elemento ng DOM, maaari mo itong gamitin tulad nito:bootstrap.Button.getInstance(element) |
getOrCreateInstance |
Static na paraan na nagbabalik ng button na instance na nauugnay sa isang elemento ng DOM o gumawa ng bago kung sakaling hindi ito nasimulan. Maaari mo itong gamitin tulad nito:bootstrap.Button.getOrCreateInstance(element) |
Halimbawa, upang i-toggle ang lahat ng mga pindutan
var buttons = document.querySelectorAll('.btn')
buttons.forEach(function (button) {
var button = new bootstrap.Button(button)
button.toggle()
})
Sass
Mga variable
$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: $link-color;
$btn-link-hover-color: $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%;
Mixins
May tatlong mixin para sa mga button: button at button outline na variant mixin (parehong batay sa $theme-colors
), kasama ang isang button na mixin na laki.
@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)
) {
color: $color;
@include gradient-bg($background);
border-color: $border;
@include box-shadow($btn-box-shadow);
&:hover {
color: $hover-color;
@include gradient-bg($hover-background);
border-color: $hover-border;
}
.btn-check:focus + &,
&:focus {
color: $hover-color;
@include gradient-bg($hover-background);
border-color: $hover-border;
@if $enable-shadows {
@include box-shadow($btn-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));
} @else {
// Avoid using mixin so we can pass custom focus shadow properly
box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);
}
}
.btn-check:checked + &,
.btn-check:active + &,
&:active,
&.active,
.show > &.dropdown-toggle {
color: $active-color;
background-color: $active-background;
// Remove CSS gradients if they're enabled
background-image: if($enable-gradients, none, null);
border-color: $active-border;
&:focus {
@if $enable-shadows {
@include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5));
} @else {
// Avoid using mixin so we can pass custom focus shadow properly
box-shadow: 0 0 0 $btn-focus-width rgba(mix($color, $border, 15%), .5);
}
}
}
&:disabled,
&.disabled {
color: $disabled-color;
background-color: $disabled-background;
// Remove CSS gradients if they're enabled
background-image: if($enable-gradients, none, null);
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)
) {
color: $color;
border-color: $color;
&:hover {
color: $color-hover;
background-color: $active-background;
border-color: $active-border;
}
.btn-check:focus + &,
&:focus {
box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
}
.btn-check:checked + &,
.btn-check:active + &,
&:active,
&.active,
&.dropdown-toggle.show {
color: $active-color;
background-color: $active-background;
border-color: $active-border;
&:focus {
@if $enable-shadows {
@include box-shadow($btn-active-box-shadow, 0 0 0 $btn-focus-width rgba($color, .5));
} @else {
// Avoid using mixin so we can pass custom focus shadow properly
box-shadow: 0 0 0 $btn-focus-width rgba($color, .5);
}
}
}
&:disabled,
&.disabled {
color: $color;
background-color: transparent;
}
}
@mixin button-size($padding-y, $padding-x, $font-size, $border-radius) {
padding: $padding-y $padding-x;
@include font-size($font-size);
// Manually declare to provide an override to the browser default
@include border-radius($border-radius, 0);
}
Mga loop
Ang mga variant ng button (para sa mga regular at outline na button) ay gumagamit ng kani-kanilang mga mixin sa aming $theme-colors
mapa upang bumuo ng mga klase ng modifier sa scss/_buttons.scss
.
@each $color, $value in $theme-colors {
.btn-#{$color} {
@include button-variant($value, $value);
}
}
@each $color, $value in $theme-colors {
.btn-outline-#{$color} {
@include button-outline-variant($value);
}
}