VBtn.css 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  1. .v-btn {
  2. align-items: center;
  3. border-radius: 4px;
  4. display: inline-grid;
  5. grid-template-areas: "prepend content append";
  6. grid-template-columns: max-content auto max-content;
  7. font-weight: 500;
  8. justify-content: center;
  9. letter-spacing: 0.0892857143em;
  10. line-height: normal;
  11. max-width: 100%;
  12. outline: none;
  13. position: relative;
  14. text-decoration: none;
  15. text-indent: 0.0892857143em;
  16. text-transform: uppercase;
  17. transition-property: box-shadow, transform, opacity, background;
  18. transition-duration: 0.28s;
  19. transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
  20. user-select: none;
  21. vertical-align: middle;
  22. flex-shrink: 0;
  23. }
  24. .v-btn--size-x-small {
  25. --v-btn-size: 0.625rem;
  26. --v-btn-height: 20px;
  27. font-size: var(--v-btn-size);
  28. min-width: 36px;
  29. padding: 0 8px;
  30. }
  31. .v-btn--size-small {
  32. --v-btn-size: 0.75rem;
  33. --v-btn-height: 28px;
  34. font-size: var(--v-btn-size);
  35. min-width: 50px;
  36. padding: 0 12px;
  37. }
  38. .v-btn--size-default {
  39. --v-btn-size: 0.875rem;
  40. --v-btn-height: 36px;
  41. font-size: var(--v-btn-size);
  42. min-width: 64px;
  43. padding: 0 16px;
  44. }
  45. .v-btn--size-large {
  46. --v-btn-size: 1rem;
  47. --v-btn-height: 44px;
  48. font-size: var(--v-btn-size);
  49. min-width: 78px;
  50. padding: 0 20px;
  51. }
  52. .v-btn--size-x-large {
  53. --v-btn-size: 1.125rem;
  54. --v-btn-height: 52px;
  55. font-size: var(--v-btn-size);
  56. min-width: 92px;
  57. padding: 0 24px;
  58. }
  59. .v-btn.v-btn--density-default {
  60. height: calc(var(--v-btn-height) + 0px);
  61. }
  62. .v-btn.v-btn--density-comfortable {
  63. height: calc(var(--v-btn-height) + -8px);
  64. }
  65. .v-btn.v-btn--density-compact {
  66. height: calc(var(--v-btn-height) + -12px);
  67. }
  68. .v-btn {
  69. border-color: rgba(var(--v-border-color), var(--v-border-opacity));
  70. border-style: solid;
  71. border-width: 0;
  72. }
  73. .v-btn--border {
  74. border-width: thin;
  75. box-shadow: none;
  76. }
  77. .v-btn--absolute {
  78. position: absolute;
  79. }
  80. .v-btn--fixed {
  81. position: fixed;
  82. }
  83. .v-btn:hover > .v-btn__overlay {
  84. opacity: calc(var(--v-hover-opacity) * var(--v-theme-overlay-multiplier));
  85. }
  86. .v-btn:focus-visible > .v-btn__overlay {
  87. opacity: calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier));
  88. }
  89. @supports not selector(:focus-visible) {
  90. .v-btn:focus > .v-btn__overlay {
  91. opacity: calc(var(--v-focus-opacity) * var(--v-theme-overlay-multiplier));
  92. }
  93. }
  94. .v-btn--active > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true] > .v-btn__overlay {
  95. opacity: calc(var(--v-activated-opacity) * var(--v-theme-overlay-multiplier));
  96. }
  97. .v-btn--active:hover > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:hover > .v-btn__overlay {
  98. opacity: calc((var(--v-activated-opacity) + var(--v-hover-opacity)) * var(--v-theme-overlay-multiplier));
  99. }
  100. .v-btn--active:focus-visible > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:focus-visible > .v-btn__overlay {
  101. opacity: calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier));
  102. }
  103. @supports not selector(:focus-visible) {
  104. .v-btn--active:focus > .v-btn__overlay, .v-btn[aria-haspopup=menu][aria-expanded=true]:focus > .v-btn__overlay {
  105. opacity: calc((var(--v-activated-opacity) + var(--v-focus-opacity)) * var(--v-theme-overlay-multiplier));
  106. }
  107. }
  108. .v-btn--variant-plain, .v-btn--variant-outlined, .v-btn--variant-text, .v-btn--variant-tonal {
  109. background: transparent;
  110. color: inherit;
  111. }
  112. .v-btn--variant-plain {
  113. opacity: 0.62;
  114. }
  115. .v-btn--variant-plain:focus, .v-btn--variant-plain:hover {
  116. opacity: 1;
  117. }
  118. .v-btn--variant-plain .v-btn__overlay {
  119. display: none;
  120. }
  121. .v-btn--variant-elevated, .v-btn--variant-flat {
  122. background: rgb(var(--v-theme-surface));
  123. color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity));
  124. }
  125. .v-btn--variant-elevated {
  126. box-shadow: 0px 3px 1px -2px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 2px 2px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 5px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
  127. }
  128. .v-btn--variant-flat {
  129. box-shadow: 0px 0px 0px 0px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 0px 0px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 0px 0px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
  130. }
  131. .v-btn--variant-outlined {
  132. border: thin solid currentColor;
  133. }
  134. .v-btn--variant-text .v-btn__overlay {
  135. background: currentColor;
  136. }
  137. .v-btn--variant-tonal .v-btn__underlay {
  138. background: currentColor;
  139. opacity: var(--v-activated-opacity);
  140. border-radius: inherit;
  141. top: 0;
  142. right: 0;
  143. bottom: 0;
  144. left: 0;
  145. pointer-events: none;
  146. }
  147. .v-btn .v-btn__underlay {
  148. position: absolute;
  149. }
  150. @supports selector(:focus-visible) {
  151. .v-btn::after {
  152. pointer-events: none;
  153. border: 2px solid currentColor;
  154. border-radius: inherit;
  155. opacity: 0;
  156. transition: opacity 0.2s ease-in-out;
  157. }
  158. .v-btn::after {
  159. content: "";
  160. position: absolute;
  161. top: 0;
  162. left: 0;
  163. width: 100%;
  164. height: 100%;
  165. }
  166. .v-btn:focus-visible::after {
  167. opacity: calc(0.25 * var(--v-theme-overlay-multiplier));
  168. }
  169. }
  170. .v-btn--icon {
  171. border-radius: 50%;
  172. min-width: 0;
  173. padding: 0;
  174. }
  175. .v-btn--icon.v-btn--size-default {
  176. --v-btn-size: 1rem;
  177. }
  178. .v-btn--icon.v-btn--density-default {
  179. width: calc(var(--v-btn-height) + 12px);
  180. height: calc(var(--v-btn-height) + 12px);
  181. }
  182. .v-btn--icon.v-btn--density-comfortable {
  183. width: calc(var(--v-btn-height) + 0px);
  184. height: calc(var(--v-btn-height) + 0px);
  185. }
  186. .v-btn--icon.v-btn--density-compact {
  187. width: calc(var(--v-btn-height) + -8px);
  188. height: calc(var(--v-btn-height) + -8px);
  189. }
  190. .v-btn--elevated:hover, .v-btn--elevated:focus {
  191. box-shadow: 0px 2px 4px -1px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 4px 5px 0px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 1px 10px 0px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
  192. }
  193. .v-btn--elevated:active {
  194. box-shadow: 0px 5px 5px -3px var(--v-shadow-key-umbra-opacity, rgba(0, 0, 0, 0.2)), 0px 8px 10px 1px var(--v-shadow-key-penumbra-opacity, rgba(0, 0, 0, 0.14)), 0px 3px 14px 2px var(--v-shadow-key-ambient-opacity, rgba(0, 0, 0, 0.12));
  195. }
  196. .v-btn--flat {
  197. box-shadow: none;
  198. }
  199. .v-btn--block {
  200. display: flex;
  201. flex: 1 0 auto;
  202. min-width: 100%;
  203. }
  204. .v-btn--disabled {
  205. pointer-events: none;
  206. opacity: 0.26;
  207. }
  208. .v-btn--disabled:hover {
  209. opacity: 0.26;
  210. }
  211. .v-btn--disabled.v-btn--variant-elevated, .v-btn--disabled.v-btn--variant-flat {
  212. box-shadow: none;
  213. opacity: 1;
  214. color: rgba(var(--v-theme-on-surface), 0.26);
  215. background: rgb(var(--v-theme-surface));
  216. }
  217. .v-btn--disabled.v-btn--variant-elevated .v-btn__overlay, .v-btn--disabled.v-btn--variant-flat .v-btn__overlay {
  218. opacity: 0.4615384615;
  219. }
  220. .v-btn--loading {
  221. pointer-events: none;
  222. }
  223. .v-btn--loading .v-btn__content,
  224. .v-btn--loading .v-btn__prepend,
  225. .v-btn--loading .v-btn__append {
  226. opacity: 0;
  227. }
  228. .v-btn--stacked {
  229. grid-template-areas: "prepend" "content" "append";
  230. grid-template-columns: auto;
  231. grid-template-rows: max-content max-content max-content;
  232. justify-items: center;
  233. align-content: center;
  234. }
  235. .v-btn--stacked .v-btn__content {
  236. flex-direction: column;
  237. line-height: 1.25;
  238. }
  239. .v-btn--stacked .v-btn__prepend,
  240. .v-btn--stacked .v-btn__append,
  241. .v-btn--stacked .v-btn__content > .v-icon--start,
  242. .v-btn--stacked .v-btn__content > .v-icon--end {
  243. margin-inline: 0;
  244. }
  245. .v-btn--stacked .v-btn__prepend,
  246. .v-btn--stacked .v-btn__content > .v-icon--start {
  247. margin-bottom: 4px;
  248. }
  249. .v-btn--stacked .v-btn__append,
  250. .v-btn--stacked .v-btn__content > .v-icon--end {
  251. margin-top: 4px;
  252. }
  253. .v-btn--stacked.v-btn--size-x-small {
  254. --v-btn-size: 0.625rem;
  255. --v-btn-height: 56px;
  256. font-size: var(--v-btn-size);
  257. min-width: 56px;
  258. padding: 0 12px;
  259. }
  260. .v-btn--stacked.v-btn--size-small {
  261. --v-btn-size: 0.75rem;
  262. --v-btn-height: 64px;
  263. font-size: var(--v-btn-size);
  264. min-width: 64px;
  265. padding: 0 14px;
  266. }
  267. .v-btn--stacked.v-btn--size-default {
  268. --v-btn-size: 0.875rem;
  269. --v-btn-height: 72px;
  270. font-size: var(--v-btn-size);
  271. min-width: 72px;
  272. padding: 0 16px;
  273. }
  274. .v-btn--stacked.v-btn--size-large {
  275. --v-btn-size: 1rem;
  276. --v-btn-height: 80px;
  277. font-size: var(--v-btn-size);
  278. min-width: 80px;
  279. padding: 0 18px;
  280. }
  281. .v-btn--stacked.v-btn--size-x-large {
  282. --v-btn-size: 1.125rem;
  283. --v-btn-height: 88px;
  284. font-size: var(--v-btn-size);
  285. min-width: 88px;
  286. padding: 0 20px;
  287. }
  288. .v-btn--stacked.v-btn--density-default {
  289. height: calc(var(--v-btn-height) + 0px);
  290. }
  291. .v-btn--stacked.v-btn--density-comfortable {
  292. height: calc(var(--v-btn-height) + -16px);
  293. }
  294. .v-btn--stacked.v-btn--density-compact {
  295. height: calc(var(--v-btn-height) + -24px);
  296. }
  297. .v-btn--slim {
  298. padding: 0 8px;
  299. }
  300. .v-btn--readonly {
  301. pointer-events: none;
  302. }
  303. .v-btn--rounded {
  304. border-radius: 24px;
  305. }
  306. .v-btn--rounded.v-btn--icon {
  307. border-radius: 4px;
  308. }
  309. .v-btn .v-icon {
  310. --v-icon-size-multiplier: 0.8571428571;
  311. }
  312. .v-btn--icon .v-icon {
  313. --v-icon-size-multiplier: 1;
  314. }
  315. .v-btn--stacked .v-icon {
  316. --v-icon-size-multiplier: 1.1428571429;
  317. }
  318. .v-btn--stacked.v-btn--block {
  319. min-width: 100%;
  320. }
  321. .v-btn__loader {
  322. align-items: center;
  323. display: flex;
  324. height: 100%;
  325. justify-content: center;
  326. left: 0;
  327. position: absolute;
  328. top: 0;
  329. width: 100%;
  330. }
  331. .v-btn__loader > .v-progress-circular {
  332. width: 1.5em;
  333. height: 1.5em;
  334. }
  335. .v-btn__content,
  336. .v-btn__prepend,
  337. .v-btn__append {
  338. align-items: center;
  339. display: flex;
  340. transition: transform, opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
  341. }
  342. .v-btn__prepend {
  343. grid-area: prepend;
  344. margin-inline: calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5);
  345. }
  346. .v-btn--slim .v-btn__prepend {
  347. margin-inline-start: 0;
  348. }
  349. .v-btn__append {
  350. grid-area: append;
  351. margin-inline: calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9);
  352. }
  353. .v-btn--slim .v-btn__append {
  354. margin-inline-end: 0;
  355. }
  356. .v-btn__content {
  357. grid-area: content;
  358. justify-content: center;
  359. white-space: nowrap;
  360. }
  361. .v-btn__content > .v-icon--start {
  362. margin-inline: calc(var(--v-btn-height) / -9) calc(var(--v-btn-height) / 4.5);
  363. }
  364. .v-btn__content > .v-icon--end {
  365. margin-inline: calc(var(--v-btn-height) / 4.5) calc(var(--v-btn-height) / -9);
  366. }
  367. .v-btn--stacked .v-btn__content {
  368. white-space: normal;
  369. }
  370. .v-btn__overlay {
  371. background-color: currentColor;
  372. border-radius: inherit;
  373. opacity: 0;
  374. transition: opacity 0.2s ease-in-out;
  375. }
  376. .v-btn__overlay,
  377. .v-btn__underlay {
  378. pointer-events: none;
  379. }
  380. .v-btn__overlay,
  381. .v-btn__underlay {
  382. position: absolute;
  383. top: 0;
  384. left: 0;
  385. width: 100%;
  386. height: 100%;
  387. }
  388. .v-pagination .v-btn {
  389. border-radius: 4px;
  390. }
  391. .v-pagination .v-btn--rounded {
  392. border-radius: 50%;
  393. }
  394. .v-pagination .v-btn__overlay {
  395. transition: none;
  396. }
  397. .v-pagination .v-pagination__item--is-active .v-btn__overlay {
  398. opacity: var(--v-border-opacity);
  399. }