@geoffcox/sterling-svelte-themes
Version:
A modern theme for the sterling-svelte component library.
126 lines (113 loc) • 2.89 kB
CSS
.sterling-checkbox {
align-content: center;
align-items: center;
box-sizing: border-box;
display: inline-flex;
font: inherit;
margin: 0;
outline: none;
padding: 0;
}
/*
The container
- allows the input to be hidden
- avoids input participating in layout
- prevents collisions with surrounding slots
*/
.sterling-checkbox .container {
font: inherit;
position: relative;
display: grid;
align-items: center;
margin-right: 0.25em;
}
/*
The input is hidden since the built-in browser checkbox cannot be customized
*/
.sterling-checkbox input {
appearance: none;
font: inherit;
margin: 0;
padding: 0;
position: absolute;
opacity: 0;
height: 20px;
width: 20px;
}
/*
The indicator handles both the box and the checkmark.
The box cannot be on the container since the adjacent sibling selector is needed
and there is not a parent CSS selector.
*/
.sterling-checkbox .indicator {
background-color: var(--stsv-input__background-color);
border-color: var(--stsv-input__border-color);
border-style: solid;
border-width: var(--stsv-input__border-width);
box-sizing: border-box;
display: inline-block;
height: 20px;
position: relative;
transition:
background-color 250ms,
color 250ms,
border-color 250ms;
width: 20px;
pointer-events: none;
}
.sterling-checkbox:not(.disabled) input:checked + .indicator {
background-color: var(--stsv-input__background-color);
border-color: var(--stsv-input__border-color);
}
.sterling-checkbox:not(.disabled):hover .indicator {
background-color: var(--stsv-input__background-color--hover);
border-color: var(--stsv-input__border-color--hover);
}
.sterling-checkbox input:focus-visible + .indicator {
outline-color: var(--stsv-common__outline-color);
outline-offset: 0;
outline-style: solid;
outline-width: var(--stsv-common__outline-width);
}
/*
The checkmark is a rotated L centered in the box.
*/
.sterling-checkbox .indicator::after {
border-style: solid;
border-width: 0 3px 3px 0;
box-sizing: border-box;
content: '';
height: 14px;
left: 50%;
position: absolute;
top: 45%;
transform: translate(-50%, -50%) rotate(45deg);
transform-origin: center;
transition:
border-color 250ms,
opacity 150ms;
width: 7px;
opacity: 0;
}
.sterling-checkbox input:checked + .indicator::after {
opacity: 1;
}
.sterling-checkbox:not(.disabled) .indicator::after {
border-color: var(--stsv-input__color);
}
.sterling-checkbox:not(.disabled):hover input:checked + .indicator::after {
border-color: var(--stsv-input__color--hover);
}
.sterling-checkbox > label {
color: var(--stsv-common__color);
transition: color 250ms;
font: inherit;
}
@media (prefers-reduced-motion) {
.sterling-checkbox .indicator,
.sterling-checkbox .indicator::after,
.sterling-checkbox .container::after,
.sterling-checkbox > label {
transition: none;
}
}