Ingen beskrivning
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

_buttons.scss 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365
  1. // Buttons
  2. // *******************************************************************************
  3. .btn {
  4. --#{$prefix}btn-box-shadow-rgb: transparent;
  5. --#{$prefix}btn-focus-shadow-rgb: transparent;
  6. --#{$prefix}btn-active-shadow-rgb: transparent;
  7. --#{$prefix}btn-box-shadow: 0 .125rem .25rem 0 rgba(var(--#{$prefix}btn-box-shadow-rgb), .4);
  8. --#{$prefix}btn-focus-box-shadow: none;
  9. --#{$prefix}btn-active-border-color: transparent;
  10. --#{$prefix}btn-active-shadow: none;
  11. display: inline-flex;
  12. align-items: center;
  13. justify-content: center;
  14. &:not(:focus, :active) {
  15. box-shadow: var(--#{$prefix}btn-box-shadow);
  16. }
  17. .btn-group &,
  18. .input-group & {
  19. border-inline-end: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
  20. border-inline-start: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
  21. }
  22. .btn-group-vertical & {
  23. border-block-end: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
  24. border-block-start: $input-btn-border-width solid var(--#{$prefix}btn-group-border-color);
  25. }
  26. .btn-check:checked + &,
  27. :not(.btn-check) + &:active,
  28. &:first-child:active,
  29. &.active,
  30. &.show {
  31. box-shadow: var(--#{$prefix}btn-active-shadow);
  32. }
  33. &:disabled,
  34. &.disabled,
  35. fieldset:disabled & {
  36. box-shadow: none;
  37. }
  38. &:focus {
  39. transform: $btn-focus-transform;
  40. --#{$prefix}btn-color: var(--#{$prefix}btn-active-color);
  41. --#{$prefix}btn-bg: var(--#{$prefix}btn-active-bg);
  42. }
  43. /* Table Action Dropdown fix */
  44. &:not([class*="btn-"]):active,
  45. &:not([class*="btn-"]).active,
  46. &:not([class*="btn-"]).show,
  47. &:not([class*="btn-"]) {
  48. --#{$prefix}btn-border-width: 0;
  49. }
  50. /* override bootstrap styles of the checkbox/radio buttons */
  51. .btn-check + &:hover {
  52. border-color: var(--#{$prefix}btn-hover-border-color);
  53. background-color: var(--#{$prefix}btn-hover-bg);
  54. color: var(--#{$prefix}btn-hover-color);
  55. }
  56. /* Buttons Variant */
  57. /* Label */
  58. &[class*="btn-label-"] {
  59. &:not(:hover),
  60. &:focus,
  61. &:active {
  62. --#{$prefix}btn-box-shadow: none;
  63. }
  64. &:hover {
  65. box-shadow: var(--#{$prefix}btn-box-shadow);
  66. }
  67. }
  68. /* Outline */
  69. &[class*="btn-outline-"] {
  70. &:not(:focus) {
  71. --#{$prefix}btn-bg: transparent;
  72. }
  73. --#{$prefix}btn-focus-box-shadow: none;
  74. --#{$prefix}btn-active-shadow: none;
  75. --#{$prefix}btn-disabled-bg: transparent;
  76. .badge {
  77. --#{$prefix}badge-bg-color: var(--#{$prefix}btn-color);
  78. --#{$prefix}badge-color: var(--#{$prefix}btn-hover-color);
  79. }
  80. &:not(:hover) {
  81. --#{$prefix}btn-box-shadow: none;
  82. }
  83. &:hover .badge,
  84. &:focus:hover .badge,
  85. &:focus:not(:hover) .badge,
  86. &:active .badge,
  87. &.active .badge,
  88. .show > &.dropdown-toggle .badge {
  89. &:not([class*="badge-outline"]) {
  90. --#{$prefix}badge-bg-color: var(--#{$prefix}btn-hover-color);
  91. --#{$prefix}badge-color: var(--#{$prefix}btn-hover-bg);
  92. }
  93. }
  94. }
  95. &.btn-white {
  96. --#{$prefix}btn-bg: var(--#{$prefix}white);
  97. --#{$prefix}btn-color: var(--#{$prefix}body-color);
  98. --#{$prefix}btn-border-color: var(--#{$prefix}white);
  99. --#{$prefix}btn-hover-color: var(--#{$prefix}black);
  100. --#{$prefix}btn-hover-bg: var(--#{$prefix}btn-bg);
  101. --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-border-color);
  102. --#{$prefix}btn-active-color: var(--#{$prefix}btn-hover-color);
  103. --#{$prefix}btn-active-bg: var(--#{$prefix}btn-hover-bg);
  104. --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-hover-border-color);
  105. --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}white-rgb);
  106. --#{$prefix}btn-active-shadow-rgb: var(--#{$prefix}btn-box-shadow-rgb);
  107. }
  108. /* Text */
  109. &[class*="btn-text-"] {
  110. --#{$prefix}btn-bg: transparent;
  111. --#{$prefix}btn-border-color: transparent;
  112. --#{$prefix}btn-box-shadow: none;
  113. --#{$prefix}btn-focus-box-shadow: none;
  114. --#{$prefix}btn-active-shadow: none;
  115. --#{$prefix}btn-disabled-bg: transparent;
  116. --#{$prefix}btn-disabled-border-color: transparent;
  117. &:not(.btn-icon) {
  118. padding-inline: .75rem;
  119. &[class*="btn-sm"] {
  120. padding-inline: .5rem;
  121. }
  122. &[class*="btn-lg"] {
  123. padding-inline: 1rem;
  124. }
  125. }
  126. }
  127. &:hover {
  128. transform: $btn-hover-transform;
  129. }
  130. }
  131. /* Badge within button */
  132. .btn .badge {
  133. @include transition($btn-transition);
  134. inset-block-start: 0;
  135. }
  136. label.btn {
  137. margin-block-end: 0;
  138. }
  139. /* Button Sizes */
  140. .btn-xl {
  141. @include button-size($btn-padding-y-xl, $btn-padding-x-xl, $btn-font-size-xl, $btn-border-radius-xl);
  142. }
  143. .btn-xs {
  144. @include button-size($btn-padding-y-xs, $btn-padding-x-xs, $btn-font-size-xs, $btn-border-radius-xs);
  145. }
  146. /* Icon button */
  147. .btn-icon {
  148. $btn-icon-size-xl: ($btn-font-size-xl * $btn-line-height-xl) + ($btn-padding-y-xl * 2);
  149. $btn-icon-font-size-xl: $btn-font-size-xl * $btn-line-height-xl;
  150. $btn-icon-size-lg: ($btn-font-size-lg * $btn-line-height-lg) + ($btn-padding-y-lg * 2);
  151. $btn-icon-font-size-lg: $btn-font-size-lg * $btn-line-height-lg;
  152. $btn-icon-size: ($btn-font-size * $btn-line-height) + ($btn-padding-y * 1.998);
  153. $btn-icon-font-size: $btn-font-size * $btn-line-height;
  154. $btn-icon-size-sm: ($btn-font-size-sm * $btn-line-height-sm) + ($btn-padding-y-sm * 1.998);
  155. $btn-icon-font-size-sm: $btn-font-size-sm;
  156. $btn-icon-size-xs: ($btn-font-size-xs * $btn-line-height-xs) + ($btn-padding-y-xs * 1.998);
  157. $btn-icon-font-size-xs: $btn-font-size-xs;
  158. $borders-width: calc(#{$btn-border-width} * 2);
  159. display: inline-flex;
  160. flex-shrink: 0;
  161. align-items: center;
  162. justify-content: center;
  163. padding: 0;
  164. block-size: calc(#{$btn-icon-size} + #{$borders-width});
  165. font-size: $btn-icon-font-size;
  166. inline-size: calc(#{$btn-icon-size} + #{$borders-width});
  167. .icon-base{
  168. @include icon-base($btn-icon-font-size);
  169. }
  170. &.btn-xl {
  171. block-size: calc(#{$btn-icon-size-xl} + #{$borders-width});
  172. inline-size: calc(#{$btn-icon-size-xl} + #{$borders-width});
  173. .icon-base {
  174. @include icon-base($btn-icon-font-size-xl);
  175. }
  176. }
  177. &.btn-lg {
  178. block-size: calc(#{$btn-icon-size-lg} + #{$borders-width});
  179. font-size: $btn-icon-font-size-lg;
  180. inline-size: calc(#{$btn-icon-size-lg} + #{$borders-width});
  181. .icon-base {
  182. @include icon-base($btn-icon-font-size-lg);
  183. }
  184. }
  185. &.btn-sm {
  186. block-size: calc(#{$btn-icon-size-sm} + #{$borders-width});
  187. font-size: $btn-icon-font-size-sm;
  188. inline-size: calc(#{$btn-icon-size-sm} + #{$borders-width});
  189. .icon-base {
  190. @include icon-base($btn-font-size-sm);
  191. }
  192. }
  193. &.btn-xs {
  194. block-size: calc(#{$btn-icon-size-xs} + #{$borders-width});
  195. font-size: $btn-icon-font-size-xs;
  196. inline-size: calc(#{$btn-icon-size-xs} + #{$borders-width});
  197. .icon-base {
  198. @include icon-base($btn-font-size-xs);
  199. }
  200. }
  201. }
  202. /* Link buttons */
  203. .btn.btn-link {
  204. font-size: inherit;
  205. }
  206. .btn-pinned {
  207. position: absolute;
  208. inset-block-start: .75rem;
  209. inset-inline-end: .75rem;
  210. }
  211. /* Button focus */
  212. button:focus,
  213. button:focus-visible {
  214. outline: 0;
  215. }
  216. /* Generate contextual modifier classes for colorizing the button */
  217. /* The $custom-theme-colors variable is used to ensure that the colors for the social buttons
  218. come from a separate array. To achieve this, both the $custom-colors and $theme-colors
  219. arrays are merged in the _color.scss file. */
  220. @each $state in map-keys($custom-theme-colors) {
  221. /* Default */
  222. .btn-#{$state} {
  223. --#{$prefix}btn-bg: var(--#{$prefix}#{$state});
  224. --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
  225. --#{$prefix}btn-border-color: var(--#{$prefix}#{$state});
  226. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
  227. --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-hover-bg-shade-amount}, var(--#{$prefix}#{$state}));
  228. --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
  229. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
  230. --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
  231. --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
  232. --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
  233. --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state}-contrast);
  234. --#{$prefix}btn-disabled-bg: var(--#{$prefix}#{$state});
  235. --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state});
  236. --#{$prefix}btn-group-border-color: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
  237. }
  238. /* Label */
  239. .btn-label-#{$state}{
  240. @if $state == "light" {
  241. --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
  242. } @else {
  243. --#{$prefix}btn-color: var(--#{$prefix}#{$state});
  244. }
  245. --#{$prefix}btn-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-label-tint-amount}, var(--#{$prefix}#{$state}));
  246. --#{$prefix}btn-border-color: var(--#{$prefix}btn-bg);
  247. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
  248. --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-label-active-shade-amount}, var(--#{$prefix}#{$state}));
  249. --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
  250. --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
  251. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
  252. --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-label-active-shade-amount}, var(--#{$prefix}#{$state}));
  253. --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
  254. --#{$prefix}btn-disabled-color: var(--#{$prefix}btn-color);
  255. --#{$prefix}btn-disabled-bg: var(--#{$prefix}btn-bg);
  256. --#{$prefix}btn-disabled-border-color: var(--#{$prefix}btn-border-color);
  257. --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
  258. --#{$prefix}btn-group-border-color: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-label-group-border-shade-amount}, var(--#{$prefix}#{$state}));
  259. }
  260. /* Outline */
  261. .btn-outline-#{$state}{
  262. --#{$prefix}btn-color: var(--#{$prefix}#{$state});
  263. --#{$prefix}btn-border-color: var(--#{$prefix}#{$state});
  264. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
  265. --#{$prefix}btn-hover-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-outline-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
  266. --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
  267. --#{$prefix}btn-box-shadow-rgb: var(--#{$prefix}#{$state}-rgb);
  268. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
  269. --#{$prefix}btn-active-bg: color-mix(in sRGB, #{$color-contrast-dark} #{$btn-outline-active-bg-shade-amount}, var(--#{$prefix}#{$state}));
  270. --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
  271. --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state});
  272. --#{$prefix}btn-disabled-border-color: var(--#{$prefix}#{$state});
  273. --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
  274. }
  275. /* Text */
  276. .btn-text-#{$state} {
  277. @if #{$state} == "secondary" {
  278. --#{$prefix}btn-color: var(--#{$prefix}body-color);
  279. --#{$prefix}btn-hover-color: var(--#{$prefix}body-color);
  280. --#{$prefix}btn-active-color: var(--#{$prefix}body-color);
  281. } @else {
  282. --#{$prefix}btn-color: var(--#{$prefix}#{$state});
  283. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state});
  284. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state});
  285. --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
  286. }
  287. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state});
  288. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state});
  289. --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state});
  290. --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-text-hover-tint-amount}, var(--#{$prefix}#{$state}));
  291. --#{$prefix}btn-hover-border-color: var(--#{$prefix}btn-hover-bg);
  292. --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}paper-bg) #{$btn-text-active-tint-amount}, var(--#{$prefix}#{$state}));
  293. --#{$prefix}btn-active-border-color: var(--#{$prefix}btn-active-bg);
  294. --#{$prefix}btn-disabled-color: var(--#{$prefix}#{$state});
  295. }
  296. }
  297. /* Dark Theme */
  298. @if $enable-dark-mode {
  299. @include color-mode(dark) {
  300. @each $state in map-keys($custom-theme-colors) {
  301. .btn-label-#{$state} {
  302. @if $state == "dark" or $state == "github" or $state == "slack" {
  303. --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
  304. --#{$prefix}btn-bg: color-mix(in sRGB, #{$color-contrast-dark} 50%, var(--#{$prefix}#{$state}));
  305. }
  306. }
  307. .btn-outline-#{$state} {
  308. @if $state == "dark" {
  309. --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
  310. }
  311. }
  312. .btn-text-#{$state} {
  313. --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) #{$btn-text-hover-shade-amount}, var(--#{$prefix}paper-bg));
  314. --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) #{$btn-text-active-shade-amount}, var(--#{$prefix}paper-bg));
  315. @if $state == "github" or $state == "slack" {
  316. --#{$prefix}btn-color: var(--#{$prefix}#{$state}-contrast);
  317. --#{$prefix}btn-hover-color: var(--#{$prefix}#{$state}-contrast);
  318. --#{$prefix}btn-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 25%, var(--#{$prefix}paper-bg));
  319. --#{$prefix}btn-hover-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 50%, var(--#{$prefix}paper-bg));
  320. --#{$prefix}btn-active-bg: color-mix(in sRGB, var(--#{$prefix}#{$state}) 50%, var(--#{$prefix}paper-bg));
  321. --#{$prefix}btn-active-color: var(--#{$prefix}#{$state}-contrast);
  322. --#{$prefix}btn-group-border-color: var(--#{$prefix}#{$state}-contrast);
  323. }
  324. }
  325. }
  326. }
  327. }