mirror of
https://github.com/discourse/discourse.git
synced 2024-11-24 13:38:49 +08:00
113 lines
2.5 KiB
SCSS
113 lines
2.5 KiB
SCSS
.d-toggle-switch {
|
|
--toggle-switch-width: 45px;
|
|
--toggle-switch-height: 24px;
|
|
|
|
&:focus {
|
|
.d-toggle-switch__checkbox-slider {
|
|
outline: 2px solid var(--tertiary);
|
|
outline-offset: 2px;
|
|
}
|
|
}
|
|
|
|
&:hover {
|
|
.d-toggle-switch__checkbox-slider {
|
|
background-color: var(--primary-high);
|
|
}
|
|
|
|
.d-toggle-switch__checkbox[aria-checked="true"]:not([disabled])
|
|
+ .d-toggle-switch__checkbox-slider {
|
|
background-color: var(--tertiary-hover);
|
|
}
|
|
}
|
|
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
|
|
&__label {
|
|
position: relative;
|
|
display: inline-block;
|
|
cursor: pointer;
|
|
}
|
|
|
|
&__checkbox {
|
|
position: absolute;
|
|
border: 0;
|
|
padding: 0;
|
|
background: transparent;
|
|
|
|
&:focus {
|
|
+ .d-toggle-switch__checkbox-slider {
|
|
outline: 2px solid var(--tertiary);
|
|
outline-offset: 2px;
|
|
}
|
|
|
|
// Outline should show only when tabbing, not clicking
|
|
&:not(:focus-visible) {
|
|
+ .d-toggle-switch__checkbox-slider {
|
|
outline: none;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
&__checkbox[aria-checked="true"] + .d-toggle-switch__checkbox-slider {
|
|
background-color: var(--tertiary);
|
|
}
|
|
|
|
&__checkbox[aria-checked="true"] + .d-toggle-switch__checkbox-slider::before {
|
|
left: calc(var(--toggle-switch-width) - 22px);
|
|
}
|
|
|
|
&__checkbox[disabled] + .d-toggle-switch__checkbox-slider {
|
|
opacity: 0.5;
|
|
cursor: not-allowed;
|
|
|
|
&::before {
|
|
cursor: not-allowed;
|
|
}
|
|
}
|
|
|
|
&__checkbox-slider {
|
|
display: inline-block;
|
|
cursor: pointer;
|
|
background: var(--primary-low-mid);
|
|
border-radius: var(--toggle-switch-height);
|
|
width: var(--toggle-switch-width);
|
|
height: var(--toggle-switch-height);
|
|
position: relative;
|
|
vertical-align: middle;
|
|
transition: background 0.25s;
|
|
|
|
.d-icon {
|
|
font-size: var(--font-down-1);
|
|
color: var(--secondary);
|
|
left: 7px;
|
|
top: 6px;
|
|
position: absolute;
|
|
}
|
|
}
|
|
|
|
&__checkbox-slider::before,
|
|
&__checkbox-slider::after {
|
|
content: "";
|
|
display: block;
|
|
position: absolute;
|
|
cursor: pointer;
|
|
}
|
|
|
|
&__checkbox-slider::before {
|
|
background: var(--secondary);
|
|
border-radius: 50%;
|
|
width: calc(var(--toggle-switch-height) * 0.75);
|
|
height: calc(var(--toggle-switch-height) * 0.75);
|
|
top: calc(var(--toggle-switch-height) * 0.125);
|
|
left: calc(var(--toggle-switch-height) * 0.125);
|
|
transition: left 0.25s;
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
transition-duration: 0ms;
|
|
}
|
|
}
|
|
}
|