mdb-ui-kit/scss/_switches.scss

84 lines
2.4 KiB
SCSS

// http://codepen.io/rosskevin/pen/EPPwRR?editors=110
.switch {
label {
position: relative;
padding-left: $bmd-switch-width + $bmd-switch-label-padding; // absolutely positioned so add the radio size
.bmd-switch-track {
position: absolute;
top: calc-top($line-height-base, $font-size-base, $bmd-switch-height);
left: 0;
display: inline-block;
width: $bmd-switch-width;
height: $bmd-switch-height;
cursor: pointer;
background-image: linear-gradient(
to right,
$bmd-switch-unchecked-bg 0%,
$bmd-switch-unchecked-bg 50%,
$bmd-switch-checked-bg 50%,
$bmd-switch-checked-bg 100%
);
background-position: 0%;
background-size: $bmd-switch-width * 2 $bmd-switch-height;
border-radius: $bmd-switch-width;
transition: background-position 0.2s ease-in;
&::after {
position: absolute;
top: 50%;
left: 0;
display: block;
align-self: center;
width: $bmd-switch-handle-size;
height: $bmd-switch-handle-size;
content: "";
background: $bmd-switch-handle-unchecked-bg;
border-radius: 100%;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
transition: left 0.2s ease-in, background-color 0.2s ease-in, transform 0.3s ease;
transform: translateY(-50%);
}
// Jelly effect on click
&:active::after {
transform: translateY(-50%) scale3d(1.15, 0.85, 1);
}
}
input {
// Hide original checkbox, but don't use `display: none` to allow focus on it using keyboard
position: absolute;
display: block;
width: 0;
height: 0;
opacity: 0;
&:checked {
+ .bmd-switch-track {
background-position: -100%;
&::after {
left: unquote("calc(100% - #{$bmd-switch-handle-size})"); //calc(100% - $bmd-switch-handle-size);
background-color: $bmd-switch-handle-checked-bg;
}
}
}
&:disabled {
// No jelly effect on disabled switchs
+ .bmd-switch-track:active::after {
transform: translateY(-50%);
}
+ .bmd-switch-track {
cursor: default;
background: $bmd-switch-disabled-bg;
&::after {
background: $bmd-switch-handle-disabled-bg;
}
}
}
}
}
}