دکمه ها
از سبک های دکمه سفارشی بوت استرپ برای عملکردها در فرم ها، دیالوگ ها و موارد دیگر با پشتیبانی از چندین اندازه، حالت و موارد دیگر استفاده کنید.
مثال ها
بوت استرپ شامل چندین سبک دکمه از پیش تعریف شده است، که هر کدام هدف معنایی خود را انجام می دهند، و برای کنترل بیشتر، چند مورد اضافی به کار رفته است.
<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>
انتقال معنا به فناوری های کمکی
استفاده از رنگ برای افزودن معنی فقط یک نشانه بصری ارائه می دهد که به کاربران فناوری های کمکی - مانند صفحه خوان ها - منتقل نمی شود. اطمینان حاصل کنید که اطلاعات مشخص شده با رنگ یا از خود محتوا واضح است (مثلاً متن قابل مشاهده)، یا از طریق ابزارهای جایگزین، مانند متن اضافی پنهان شده با .visually-hidden
کلاس، گنجانده شده است.
بسته بندی متن را غیرفعال کنید
اگر نمی خواهید متن دکمه پیچیده شود، می توانید .text-nowrap
کلاس را به دکمه اضافه کنید. در Sass، می توانید تنظیم $btn-white-space: nowrap
کنید که بسته بندی متن برای هر دکمه غیرفعال شود.
برچسب های دکمه
کلاس .btn
ها برای استفاده با <button>
عنصر طراحی شده اند. با این حال، میتوانید از این کلاسها بر روی <a>
یا <input>
عناصر نیز استفاده کنید (اگرچه برخی از مرورگرها ممکن است رندر کمی متفاوت اعمال کنند).
هنگام استفاده از کلاس های دکمه بر روی <a>
عناصری که برای فعال کردن عملکرد درون صفحه (مانند جمع شدن محتوا) استفاده می شوند، به جای پیوند دادن به صفحات یا بخش های جدید در صفحه فعلی، این پیوندها باید به این پیوندها داده شود role="button"
تا هدف خود را به طور مناسب به فناوری های کمکی مانند صفحه خوان ها
<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">
دکمه های طرح کلی
به یک دکمه نیاز دارید، اما نه به رنگهای پسزمینه سنگینی که میآورند؟ کلاسهای اصلاحکننده پیشفرض را با کلاسهایی .btn-outline-*
جایگزین کنید تا همه تصاویر پسزمینه و رنگهای روی هر دکمه حذف شوند.
<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>
اندازه ها
دکمه های بزرگتر یا کوچکتر را دوست دارید؟ اضافه کردن .btn-lg
یا .btn-sm
برای اندازه های اضافی.
<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>
شما حتی می توانید اندازه سفارشی خود را با متغیرهای 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>
حالت غیر فعال
با افزودن disabled
ویژگی Boolean به هر <button>
عنصر، دکمهها را غیرفعال کنید. دکمههای غیرفعال روی آن pointer-events: none
اعمال شدهاند و از راهاندازی حالت شناور و فعال جلوگیری میکنند.
<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>
دکمه های غیرفعال شده با استفاده از <a>
عنصر کمی متفاوت عمل می کنند:
<a>
s ویژگی را پشتیبانی نمی کندdisabled
، بنابراین باید.disabled
کلاس را اضافه کنید تا بصری غیرفعال به نظر برسد.- برخی از سبک های آینده پسند برای غیرفعال کردن همه
pointer-events
دکمه های لنگر گنجانده شده است. - دکمه های غیرفعال استفاده شده
<a>
باید دارایaria-disabled="true"
ویژگی برای نشان دادن وضعیت عنصر به فناوری های کمکی باشند. - دکمه های غیرفعال استفاده شده
<a>
نباید شامل اینhref
ویژگی باشند.
<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>
هشدار عملکرد پیوند
برای پوشش مواردی که باید href
ویژگی را روی یک پیوند غیرفعال نگه دارید، .disabled
کلاس از pointer-events: none
تلاش برای غیرفعال کردن عملکرد پیوند <a>
s استفاده می کند. توجه داشته باشید که این ویژگی CSS هنوز برای HTML استاندارد نشده است، اما همه مرورگرهای مدرن از آن پشتیبانی می کنند. علاوه بر این، حتی در مرورگرهایی که پشتیبانی میکنند pointer-events: none
، پیمایش صفحه کلید بیتأثیر باقی میماند، به این معنی که کاربران بینا صفحه کلید و کاربران فناوریهای کمکی همچنان میتوانند این پیوندها را فعال کنند. بنابراین برای ایمن بودن، علاوه بر aria-disabled="true"
, یک tabindex="-1"
ویژگی را نیز در این پیوندها قرار دهید تا از دریافت فوکوس صفحه کلید جلوگیری کنید و از جاوا اسکریپت سفارشی برای غیرفعال کردن عملکرد آنها به طور کلی استفاده کنید.
<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>
دکمه های مسدود کردن
با ترکیبی از ابزارهای نمایشگر و شکاف ما، پشتههای پاسخگو از دکمههای «بلاک» با عرض کامل مانند موارد موجود در Bootstrap 4 ایجاد کنید. با استفاده از برنامه های کاربردی به جای کلاس های خاص دکمه، کنترل بسیار بیشتری بر فاصله، تراز و رفتارهای پاسخگو داریم.
<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>
در اینجا ما یک تغییر پاسخگو ایجاد می کنیم، که با دکمه های انباشته عمودی شروع می شود تا md
نقطه شکست، جایی .d-md-block
که کلاس را جایگزین می کند .d-grid
، بنابراین gap-2
ابزار را باطل می کند. اندازه مرورگر خود را تغییر دهید تا آنها را ببینید.
<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>
می توانید عرض دکمه های بلوک خود را با کلاس های عرض ستون شبکه تنظیم کنید. به عنوان مثال، برای یک "دکمه مسدود کردن" با عرض نیمه، از .col-6
. آن را نیز به صورت افقی با .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>
ابزارهای اضافی را می توان برای تنظیم تراز دکمه ها در حالت افقی استفاده کرد. در اینجا ما نمونه پاسخگوی قبلی خود را آورده ایم و برخی از ابزارهای انعطاف پذیر و یک ابزار حاشیه بر روی دکمه اضافه کرده ایم تا زمانی که دکمه ها دیگر انباشته نیستند، به راست تراز شوند.
<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>
افزونه دکمه
افزونه دکمه به شما امکان می دهد دکمه های روشن/خاموش ساده ایجاد کنید.
وضعیت ها را تغییر دهید
data-bs-toggle="button"
به تغییر وضعیت یک دکمه اضافه کنید active
. اگر از قبل دکمه ای را تغییر می دهید، باید .active
کلاس را به صورت دستی اضافه کنید و aria-pressed="true"
مطمئن شوید که به طور مناسب به فناوری های کمکی منتقل می شود.
<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>
مواد و روش ها
می توانید یک نمونه دکمه با سازنده دکمه ایجاد کنید، به عنوان مثال:
const bsButton = new bootstrap.Button('#myButton')
روش | شرح |
---|---|
dispose |
دکمه یک عنصر را از بین می برد. (داده های ذخیره شده در عنصر DOM را حذف می کند) |
getInstance |
روش استاتیک که به شما امکان می دهد نمونه دکمه مرتبط با یک عنصر DOM را دریافت کنید، می توانید از آن به صورت زیر استفاده کنید: bootstrap.Button.getInstance(element) . |
getOrCreateInstance |
روش ایستا که یک نمونه دکمه مرتبط با یک عنصر DOM را برمی گرداند یا در صورتی که اولیه نشده بود یک نمونه جدید ایجاد می کند. می توانید از آن به این صورت استفاده کنید: bootstrap.Button.getOrCreateInstance(element) . |
toggle |
وضعیت فشار را تغییر می دهد. به دکمه ظاهری می دهد که فعال شده است. |
به عنوان مثال، برای جابجایی همه دکمه ها
document.querySelectorAll('.btn').forEach(buttonElement => {
const button = bootstrap.Button.getOrCreateInstance(buttonElement)
button.toggle()
})
CSS
متغیرها
اضافه شده در نسخه 5.2.0به عنوان بخشی از رویکرد متغیرهای CSS در حال تکامل Bootstrap، دکمهها اکنون از متغیرهای CSS محلی .btn
برای سفارشیسازی در زمان واقعی استفاده میکنند. مقادیر برای متغیرهای CSS از طریق Sass تنظیم میشوند، بنابراین سفارشیسازی Sass نیز همچنان پشتیبانی میشود.
--#{$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);
هر .btn-*
کلاس اصلاح کننده، متغیرهای CSS مناسب را بهروزرسانی میکند تا قوانین اضافی CSS را با، و میکسهای ما به button-variant()
حداقل button-outline-variant()
برساند button-size()
.
در اینجا نمونهای از ساخت یک .btn-*
کلاس اصلاحکننده سفارشی است که برای دکمههای منحصربهفرد برای اسناد خود با تخصیص مجدد متغیرهای CSS Bootstrap با ترکیبی از متغیرهای CSS و 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%)};
}
متغیرهای 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%;
میکس های ساس
سه میکس برای دکمهها وجود دارد: میکسهای مختلف دکمهای و دکمهای (هر دو بر اساس $theme-colors
)، بهعلاوه یک میکس اندازه دکمه.
@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};
}
حلقه های ساس
انواع دکمه ها (برای دکمه های معمولی و طرح کلی) از ترکیب های مربوطه خود با $theme-colors
نقشه ما برای تولید کلاس های اصلاح کننده در 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);
}
}