110 lines
3.4 KiB
SCSS
110 lines
3.4 KiB
SCSS
$switch-width-number: 2.75;
|
|
$switch-width: $switch-width-number * 1em;
|
|
$switch-padding: 0.2em;
|
|
|
|
$switch-active-background-color: $primary !default;
|
|
|
|
.switch {
|
|
cursor: pointer;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
@include unselectable;
|
|
& + .switch {
|
|
margin-left: 0.5em;
|
|
}
|
|
input[type=checkbox] {
|
|
position: absolute;
|
|
left: 0;
|
|
opacity: 0;
|
|
outline: none;
|
|
z-index: -1;
|
|
+ .check {
|
|
display: flex;
|
|
align-items: center;
|
|
flex-shrink: 0;
|
|
width: $switch-width;
|
|
height: #{$switch-width / 2 + $switch-padding};
|
|
padding: $switch-padding;
|
|
background: $grey-light;
|
|
border-radius: 1em;
|
|
transition: background $speed-slow $easing;
|
|
&:before {
|
|
content: "";
|
|
display: block;
|
|
border-radius: 1em;
|
|
width: #{($switch-width - $switch-padding * 2) / 2};
|
|
height: #{($switch-width - $switch-padding * 2) / 2};
|
|
background: $background;
|
|
box-shadow: 0 3px 1px 0 rgba(0, 0, 0, 0.05), 0 2px 2px 0 rgba(0, 0, 0, 0.1), 0 3px 3px 0 rgba(0, 0, 0, 0.05);
|
|
transition: transform $speed-slow $easing, width $speed-slow $easing;
|
|
will-change: transform;
|
|
}
|
|
&.is-elastic:before {
|
|
width: 1.75em;
|
|
}
|
|
}
|
|
&:checked + .check {
|
|
background: $switch-active-background-color;
|
|
@each $name, $pair in $colors {
|
|
$color: nth($pair, 1);
|
|
&.is-#{$name} {
|
|
background: $color;
|
|
}
|
|
}
|
|
&:before {
|
|
transform: translate3d(100%, 0, 0);
|
|
}
|
|
&.is-elastic:before {
|
|
// Might be a little offset if base font is not 16px
|
|
transform: translate3d(percentage(16 / ($switch-width-number * 16)), 0, 0);
|
|
}
|
|
}
|
|
&:focus {
|
|
outline: none;
|
|
+ .check {
|
|
box-shadow: 0 0 0.5em rgba($grey, 0.6);
|
|
}
|
|
&:checked + .check {
|
|
box-shadow: 0 0 0.5em rgba($switch-active-background-color, 0.8);
|
|
@each $name, $pair in $colors {
|
|
$color: nth($pair, 1);
|
|
&.is-#{$name} {
|
|
box-shadow: 0 0 0.5em rgba($color, 0.8);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.control-label {
|
|
padding-left: 0.5em;
|
|
}
|
|
&:hover {
|
|
input[type=checkbox] + .check {
|
|
background: rgba($grey-light, 0.9);
|
|
}
|
|
input[type=checkbox]:checked + .check {
|
|
background: rgba($switch-active-background-color, 0.9);
|
|
@each $name, $pair in $colors {
|
|
$color: nth($pair, 1);
|
|
&.is-#{$name} {
|
|
background: rgba($color, 0.9);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
&.is-small {
|
|
@include control-small;
|
|
}
|
|
&.is-medium{
|
|
@include control-medium;
|
|
}
|
|
&.is-large {
|
|
@include control-large;
|
|
}
|
|
&[disabled] {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
color: $grey;
|
|
}
|
|
}
|