mytril
Version:
Mytril Svelte library component for rapidly building modern websites based on Svelte and Sveltekit
295 lines (264 loc) • 7.38 kB
CSS
.myt-btn {
--c: var(--myt-btn-c);
--bg: var(--myt-btn-bg);
align-items: center;
display: inline-grid;
grid-template-areas: 'prepend content append';
grid-template-columns: max-content auto max-content;
justify-content: center;
max-width: 100%;
outline: none;
position: relative;
text-decoration: none;
transition-property: box-shadow, transform, opacity, background-color, background;
transition-duration: 0.28s;
transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
user-select: none;
vertical-align: middle;
flex-shrink: 0;
color: var(--c);
background-color: var(--bg);
border-radius: var(--myt-btn-br);
transition:
color 0.5s,
background-color 0.5s;
}
.myt-btn.myt-btn--outline {
border: thin solid currentColor;
}
.myt-btn.myt-btn--text,
.myt-btn.myt-btn--outline {
background-color: transparent;
}
.myt-btn.myt-btn--icon {
min-width: 0 ;
padding: 0 ;
}
.myt-btn.myt-btn--icon.myt-btn--circle {
border-radius: 50%;
}
.myt-btn.myt-btn--square {
border-radius: var(--radius-lg);
}
.myt-btn.myt-btn--rounded {
border-radius: var(--radius-pill);
}
.myt-btn.myt-btn--circle:not(.myt-btn--icon) {
border-radius: var(--radius-circle);
}
.myt-btn.myt-btn--block {
display: flex;
flex: 1 0 auto;
min-width: 100%;
}
.myt-btn.myt-btn--wide {
width: 16rem;
}
.myt-btn.myt-btn--density-default:not(.myt-btn--icon) {
height: calc(var(--btn-height) + 0px);
}
.myt-btn.myt-btn--density-comfortable:not(.myt-btn--icon) {
height: calc(var(--btn-height) + -0.5rem);
}
.myt-btn.myt-btn--density-compact:not(.myt-btn--icon) {
height: calc(var(--btn-height) + -0.75rem);
}
.myt-btn.myt-btn--icon.myt-btn--density-comfortable {
width: calc(var(--btn-height) + 0px);
height: calc(var(--btn-height) + 0px);
}
.myt-btn.myt-btn--icon.myt-btn--density-compact {
width: calc(var(--btn-height) + -0.5rem);
height: calc(var(--btn-height) + -0.5rem);
}
.myt-btn.myt-btn--icon.myt-btn--density-default {
width: calc(var(--btn-height) + 0.75rem);
height: calc(var(--btn-height) + 0.75rem);
}
.myt-btn .myt-btn--content {
grid-area: content;
justify-content: center;
white-space: nowrap;
}
.myt-btn .myt-btn--prepend {
grid-area: prepend;
margin-inline: calc(var(--btn-height) / -9) calc(var(--btn-height) / 4.5);
}
.myt-btn .myt-btn--append {
grid-area: append;
margin-inline: calc(var(--btn-height) / 4.5) calc(var(--btn-height) / -9);
}
.myt-btn .myt-btn--content,
.myt-btn .myt-btn--prepend,
.myt-btn .myt-btn--append {
align-items: center;
display: flex;
transition:
transform,
opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}
.myt-btn.myt-btn--icon .myt-icon {
--icon-size-multiplier: 1;
}
.myt-btn .myt-icon {
--icon-size-multiplier: 0.86;
}
.myt-btn:active:hover,
.myt-btn:active:focus {
animation: button-effect 0s ease-out;
transform: scale(0.97);
}
.myt-btn.myt-btn--active:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
background-color: color-mix(in oklab, var(--bg) 85%, black);
}
.myt-btn:hover:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
background-color: color-mix(in oklab, var(--bg) 90%, black);
}
.myt-btn.myt-btn--outline.myt-btn--active,
.myt-btn.myt-btn--text.myt-btn--active {
background-color: color-mix(in oklab, var(--c) 15%, transparent);
}
.myt-btn.myt-btn--outline:hover,
.myt-btn.myt-btn--text:hover {
background-color: color-mix(in oklab, var(--c) 20%, transparent);
}
.myt-btn.myt-btn--link {
background-color: transparent;
text-decoration-line: underline;
}
.myt-btn.myt-btn--disabled,
.myt-btn[disabled] {
pointer-events: none;
user-select: none;
color: color-mix(in oklab, var(--c) 40%, transparent) ;
background-color: color-mix(in oklab, var(--bg) 70%, transparent) ;
}
.myt-btn.myt-btn--disabled.myt-btn--outline,
.myt-btn[disabled].myt-btn--outline {
border-color: color-mix(in oklab, var(--c) 40%, transparent) ;
}
.myt-btn.myt-btn--disabled.myt-btn--outline,
.myt-btn[disabled].myt-btn--outline,
.myt-btn.myt-btn--disabled.myt-btn--text,
.myt-btn[disabled].myt-btn--text,
.myt-btn.myt-btn--disabled.myt-btn--link,
.myt-btn[disabled].myt-btn--link {
background-color: transparent;
}
.myt-btn:where(.myt-btn:is(input[type='checkbox'])),
.myt-btn:where(.myt-btn:is(input[type='radio'])) {
width: auto;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.myt-btn:is(input[type='checkbox']):after,
.myt-btn:is(input[type='radio']):after {
--btn-content: attr(aria-label);
content: var(--btn-content);
}
.myt-btn:is(input[type='checkbox']:checked),
.myt-btn:is(input[type='radio']:checked) {
--c: var(--myt-btn-c);
--bg: var(--myt-btn-bg);
}
.myt-btn.myt-btn--info:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
--c: var(--mcolor-on-info);
--bg: var(--color-info);
}
.myt-btn.myt-btn--info.myt-btn--outline,
.myt-btn.myt-btn--info.myt-btn--text,
.myt-btn.myt-btn--info.myt-btn--link {
--c: var(--color-info);
}
.myt-btn.myt-btn--success:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
--c: var(--color-on-success);
--bg: var(--color-success);
}
.myt-btn.myt-btn--success.myt-btn--outline,
.myt-btn.myt-btn--success.myt-btn--text,
.myt-btn.myt-btn--success.myt-btn--link {
--c: var(--mcolor-success);
}
.myt-btn.myt-btn--warning:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
--c: var(--color-on-warning);
--bg: var(--color-warning);
}
.myt-btn.myt-btn--warning.myt-btn--outline,
.myt-btn.myt-btn--warning.myt-btn--text,
.myt-btn.myt-btn--warning.myt-btn--link {
--c: var(--color-warning);
}
.myt-btn.myt-btn--error:not(.myt-btn--outline):not(.myt-btn--text):not(.myt-btn--link) {
--c: var(--color-on-error);
--bg: var(--color-error);
}
.myt-btn.myt-btn--error.myt-btn--outline,
.myt-btn.myt-btn--error.myt-btn--text,
.myt-btn.myt-btn--error.myt-btn--link {
--c: var(--color-error);
}
/* @breakpoints */
.myt-btn[breakpoint]myt-btn--size-xs {
--btn-size: 0.625rem;
--btn-height: 1.25rem;
font-size: var(--btn-size);
min-width: 2.25rem;
padding: 0 0.5rem;
}
.myt-btn[breakpoint]myt-btn--size-sm {
--btn-size: 0.75rem;
--btn-height: 1.75rem;
font-size: var(--btn-size);
min-width: 3.125rem;
padding: 0 0.75rem;
}
.myt-btn[breakpoint]myt-btn--size-md {
--btn-size: 0.875rem;
--btn-height: 2.25rem;
font-size: var(--btn-size);
min-width: 4rem;
padding: 0 1rem;
}
.myt-btn[breakpoint]myt-btn--size-lg {
--btn-size: 1rem;
--btn-height: 2.75rem;
font-size: var(--btn-size);
min-width: 4.875rem;
padding: 0 1.25rem;
}
.myt-btn[breakpoint]myt-btn--size-xl {
--btn-size: 1.125rem;
--btn-height: 3.25rem;
font-size: var(--btn-size);
min-width: 5.75rem;
padding: 0 1.5rem;
}
.myt-btn[breakpoint]myt-btn--size-xs .myt-icon {
font-size: calc(var(--icon-size-multiplier) * 1em);
}
.myt-btn[breakpoint]myt-btn--size-sm .myt-icon {
font-size: calc(var(--icon-size-multiplier) * 1.25em);
}
.myt-btn[breakpoint]myt-btn--size-md .myt-icon {
font-size: calc(var(--icon-size-multiplier) * 1.5em);
}
.myt-btn[breakpoint]myt-btn--size-lg .myt-icon {
font-size: calc(var(--icon-size-multiplier) * 1.75em);
}
.myt-btn[breakpoint]myt-btn--size-xl .myt-icon {
font-size: calc(var(--icon-size-multiplier) * 2em);
}
/*! @breakpoints */
/* @keyframes */
@keyframes button-effect {
0% {
transform: scale(0.98);
}
40% {
transform: scale(1.02);
}
100% {
transform: scale(1);
}
}