/
githubmirror
/
tabler
Обзор
Документация
Войти
/
githubmirror
/
tabler
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
core/scss/ui/_buttons.scss
376 строк
8 KB
Bartosz-Do
Wire stylelint into the SCSS lint pipeline (#2794)
06 авг 2026, 01:46
Не верифицирован
06 авг 2026, 01:46
9cc9a36
Код
Авторство
О чём код?
@use 'sass:color'; @use 'sass:map'; // // Button // @use '../config' as *; .btn { --btn-icon-size: #{$input-btn-icon-size}; --btn-icon-color: inherit; --btn-bg: var(--bg-surface); --btn-color: var(--body-color); --btn-border-color: #{$btn-border-color}; --btn-hover-bg: var(--btn-bg); --btn-hover-border-color: var(--border-active-color); --btn-active-color: #{$active-color}; --btn-active-bg: #{$active-bg}; --btn-active-border-color: #{$active-border-color}; position: relative; display: inline-flex; align-items: center; justify-content: center; min-width: calc((var(--btn-line-height) * 1) + (var(--btn-padding-y) * 2) + (var(--btn-border-width) * 2)); min-height: calc((var(--btn-line-height) * 1) + (var(--btn-padding-y) * 2) + (var(--btn-border-width) * 2)); white-space: nowrap; box-shadow: var(--btn-box-shadow); @include border-radius(var(--btn-border-radius)); .icon { width: var(--btn-icon-size); min-width: var(--btn-icon-size); height: var(--btn-icon-size); margin: 0 calc(var(--btn-padding-x) / 2) 0 calc(var(--btn-padding-x) / -4); font-size: var(--btn-icon-size); color: var(--btn-icon-color); vertical-align: bottom; } .avatar { width: var(--btn-icon-size); height: var(--btn-icon-size); margin: 0 calc(var(--btn-padding-x) / 2) 0 calc(var(--btn-padding-x) / -4); } .icon-right, .icon-end { margin: 0 calc(var(--btn-padding-x) / -4) 0 calc(var(--btn-padding-x) / 2); } .badge { top: auto; } .btn-check + &:hover { color: var(--btn-hover-color); background-color: var(--btn-hover-bg); border-color: var(--btn-hover-border-color); } } .btn-link { color: #{color.adjust($primary, $lightness: 5%)}; background-color: transparent; border-color: transparent; box-shadow: none; .icon { color: inherit; } &:hover { color: $link-hover-color; border-color: transparent; } } // // Button color variations // .btn-ghost { --btn-bg: transparent; --btn-border-color: transparent; --btn-box-shadow: none; --btn-hover-bg: var(--bg-surface-secondary); --btn-hover-border-color: transparent; --btn-hover-color: var(--body-color); } @each $color, $value in map.merge($theme-colors, $social-colors) { .btn-#{$color} { @if $color == 'dark' { --btn-border-color: var(--dark-mode-border-color); --btn-hover-border-color: var(--dark-mode-border-active-color); --btn-active-border-color: var(--dark-mode-border-active-color); } @else { --btn-border-color: transparent; --btn-hover-border-color: transparent; --btn-active-border-color: transparent; } --btn-color: var(--#{$color}-fg, #{$white}); --btn-bg: var(--#{$color}); --btn-hover-color: var(--#{$color}-fg); --btn-hover-bg: var(--#{$color}-darken); --btn-active-color: var(--#{$color}-fg); --btn-active-bg: var(--#{$color}-darken); --btn-disabled-bg: var(--#{$color}); --btn-disabled-color: var(--#{$color}-fg); --btn-box-shadow: var(--shadow-input); } .btn-outline-#{$color}, .btn-outline.btn-#{$color} { --btn-color: var(--#{$color}); --btn-bg: transparent; --btn-border-color: var(--#{$color}); --btn-hover-color: var(--#{$color}-fg); --btn-hover-border-color: transparent; --btn-hover-bg: var(--#{$color}); --btn-active-color: var(--#{$color}-fg); --btn-active-bg: var(--#{$color}); --btn-active-border-color: var(--#{$color}); --btn-disabled-color: var(--#{$color}); --btn-disabled-border-color: var(--#{$color}); } .btn-ghost-#{$color}, .btn-ghost.btn-#{$color} { --btn-color: var(--#{$color}); --btn-bg: transparent; --btn-border-color: transparent; --btn-hover-color: var(--#{$color}-fg); --btn-hover-bg: var(--#{$color}); --btn-hover-border-color: var(--#{$color}); --btn-active-color: var(--#{$color}-fg); --btn-active-bg: var(--#{$color}); --btn-active-border-color: transparent; --btn-active-shadow: #{$btn-active-box-shadow}; --btn-disabled-color: var(--#{$color}); --btn-disabled-bg: transparent; --btn-disabled-border-color: transparent; --gradient: none; --btn-box-shadow: none; } } // // Button sizes // .btn-sm, .btn-group-sm > .btn { --btn-line-height: #{$input-btn-line-height-sm}; --btn-icon-size: #{$input-btn-icon-size-sm}; } .btn-lg, .btn-group-lg > .btn { --btn-line-height: #{$input-btn-line-height-lg}; --btn-icon-size: #{$input-btn-icon-size-lg}; } .btn-xl, .btn-group-xl > .btn { --btn-line-height: #{$input-btn-line-height-xl}; --btn-icon-size: #{$input-btn-icon-size-xl}; --btn-padding-y: #{$input-btn-padding-y-xl}; --btn-padding-x: #{$input-btn-padding-x-xl}; --btn-font-size: #{$input-btn-font-size-xl}; } // // Button shapes // .btn-pill { padding-inline-start: 1.5em; padding-inline-end: 1.5em; @include border-radius(var(--border-radius-pill)); &[class*='btn-icon'] { --btn-pill-icon-padding-y: #{$btn-pill-icon-padding-y}; --btn-pill-icon-padding-x: #{$btn-pill-icon-padding-x}; padding: var(--btn-pill-icon-padding-y) var(--btn-pill-icon-padding-x); } } .btn-square { border-radius: 0; } // // Icon button // .btn-icon, .btn-action { //[BUG] btn-sm and btn-xl with an icon looks broken //issue #2470 fixed min-width: calc(var(--btn-line-height) + (var(--btn-padding-y) * 2) + (var(--btn-border-width) * 2)); padding-inline-start: 0; padding-inline-end: 0; .icon { margin: calc(-1 * var(--btn-padding-x)); } } // // Button list // .btn-list { @include elements-list(); } .btn-list-center { justify-content: center; } // // Button floating // .btn-floating { --btn-floating-offset: #{$btn-floating-offset}; position: fixed; inset-inline-start: var(--btn-floating-offset); bottom: var(--btn-floating-offset); z-index: $zindex-fixed; box-shadow: var(--shadow-dropdown); @include media-print() { display: none; } } // // Button loading // .btn-loading { position: relative; color: transparent !important; text-shadow: none !important; pointer-events: none; > * { opacity: 0; } &::after { position: absolute; inset-inline-start: calc(50% - var(--btn-icon-size) / 2); top: calc(50% - var(--btn-icon-size) / 2); display: inline-block; width: var(--btn-icon-size); height: var(--btn-icon-size); color: var(--btn-color); vertical-align: text-bottom; content: ''; border: $spinner-border-width var(--border-style) currentColor; border-inline-end-color: transparent; animation: spinner-border 0.75s linear infinite; @include border-radius(var(--border-radius-pill)); } } // // Action button // .btn-action { --border-color: transparent; color: var(--secondary); @include border-radius(var(--border-radius)); background: transparent; box-shadow: none; &::after { content: none; } &:focus:not(:focus-visible) { outline: none; box-shadow: none; } &:focus-visible { outline: 2px solid var(--primary); outline-offset: -2px; box-shadow: none; } &:hover, &.show { color: var(--body-color); background: var(--active-bg); border-color: transparent; } &.show { color: var(--primary); } @include media-print() { display: none; } } .btn-actions { display: flex; @include media-print() { display: none; } } .btn-animate-icon { .icon { transition: transform 0.3s ease; } &:hover, &:focus-visible { .icon { /* rtl:ignore */ transform: translateX(calc(var(--dir) * 4px)); } } &.btn-animate-icon-rotate { &:hover, &:focus-visible { .icon { transform: rotate(90deg); } } } &.btn-animate-icon-move-start { &:hover, &:focus-visible { .icon { /* rtl:ignore */ transform: translateX(calc(var(--dir) * -4px)); } } } &.btn-animate-icon-pulse { &:hover, &:focus-visible { .icon { transform: none; animation: pulse 0.9s; } } } &.btn-animate-icon-shake { &:hover, &:focus-visible { .icon { transform: none; animation: shake 0.9s; } } } &.btn-animate-icon-tada { &:hover, &:focus-visible { .icon { transform: none; animation: tada 0.9s; } } } }