UNPKG

@arco-design/web-vue

Version:

Arco Design Vue 2.0: A Vue.js 3 UI Library

333 lines (270 loc) 7.38 kB
@import './token.less'; @switch-prefix-cls: ~'@{prefix}-switch'; @switch-size-default-gap: ( (@switch-size-default - @switch-size-dot-default) / 2 ); @switch-size-small-gap: ((@switch-size-small - @switch-size-dot-small) / 2); @switch-size-default-line-gap: ( (@switch-size-default - @switch-line-size-dot-default) / 2 ); @switch-size-small-line-gap: ( (@switch-size-small - @switch-line-size-dot-small) / 2 ); .switch-slide-text-enter-from { left: -100% !important; } .switch-slide-text-enter-to { left: 8px !important; } .switch-slide-text-enter-active { transition: left @transition-duration-2 @transition-timing-function-standard; } .switch-slide-text-leave-from { left: 100% !important; } .switch-slide-text-leave-to { left: @switch-size-dot-default + @switch-size-default-gap + 6px !important; } .switch-slide-text-leave-active { transition: left @transition-duration-2 @transition-timing-function-standard; } .@{switch-prefix-cls} { position: relative; box-sizing: border-box; min-width: @switch-circle-default-width; height: @switch-size-default; padding: 0; overflow: hidden; line-height: @switch-size-default; vertical-align: middle; background-color: @switch-color-bg_off; border: none; border-radius: (@switch-size-default / 2); outline: none; cursor: pointer; transition: background-color @transition-duration-2 @transition-timing-function-standard; &-handle { position: absolute; top: @switch-size-default-gap; left: @switch-size-default-gap; display: flex; align-items: center; justify-content: center; width: @switch-size-dot-default; height: @switch-size-dot-default; color: @switch-color-dot-icon_off; font-size: 12px; background-color: @switch-color-dot-bg; border-radius: 50%; transition: all @transition-duration-2 @transition-timing-function-standard; } &-checked { background-color: @switch-color-bg_on; } &-checked &-handle { left: calc(100% - @switch-size-dot-default - @switch-size-default-gap); color: @switch-color-dot-icon_on; } &[disabled] &-handle { color: @switch-color-dot-icon_off_disabled; } &[disabled]&-checked &-handle { color: @switch-color-dot-icon_on_disabled; } &[disabled] &-handle { color: @switch-color-dot-icon_off_disabled; } &[disabled]&-checked &-handle { color: @switch-color-dot-icon_on_disabled; } &-text-holder { margin: 0 8px 0 @switch-size-dot-default + @switch-size-default-gap + 6px; font-size: @switch-font-size-text; opacity: 0; } &-text { position: absolute; top: 0; left: @switch-size-dot-default + @switch-size-default-gap + 6px; color: @switch-color-text_off; font-size: @switch-font-size-text; } &-checked &-text-holder { margin: 0 @switch-size-dot-default + @switch-size-default-gap + 6px 0 8px; } &-checked &-text { left: 8px; color: @switch-color-text_on; } // Disabled &[disabled] { background-color: @switch-color-bg_off_disabled; cursor: not-allowed; } &[disabled] &-text { color: @switch-color-text_off_disabled; } &[disabled]&-checked { background-color: @switch-color-bg_on_disabled; } &[disabled]&-checked &-text { color: @switch-color-text_on_disabled; } // Loading &-loading { background-color: @switch-color-bg_off_loading; } &-loading &-handle { color: @switch-color-dot-icon_off_loading; } &-loading &-text { color: @switch-color-text_off_loading; } &-loading&-checked { background-color: @switch-color-bg_on_loading; } &-loading&-checked &-handle { color: @switch-color-dot-icon_on_loading; } &-loading&-checked &-text { color: @switch-color-text_on_loading; } &-small { min-width: @switch-circle-small-width; height: @switch-size-small; line-height: @switch-size-small; } &-small&-checked { padding-left: -@switch-size-small-gap; } &-small &-handle { top: @switch-size-small-gap; left: @switch-size-small-gap; width: @switch-size-dot-small; height: @switch-size-dot-small; border-radius: (@switch-size-small / 2); &-icon { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.66667); } } &-small&-checked &-handle { left: calc(100% - @switch-size-dot-small - @switch-size-small-gap); } } // Round .@{switch-prefix-cls} { &-type-round { min-width: @switch-round-default-width; border-radius: @radius-small; } &-type-round &-handle { border-radius: 2px; } &-type-round&-small { min-width: @switch-round-small-width; height: @switch-size-small; line-height: @switch-size-small; border-radius: 2px; } &-type-round&-small &-handle { border-radius: 1px; } } // Line .@{switch-prefix-cls} { &-type-line { min-width: @switch-line-default-width; overflow: unset; background-color: transparent; &::after { display: block; width: 100%; height: @switch-line-height-bg-line; background-color: @switch-color-bg_off; border-radius: (@switch-line-height-bg-line / 2); transition: background-color @transition-duration-2 @transition-timing-function-standard; content: ''; } } &-type-line &-handle { top: @switch-size-default-line-gap; left: 0; width: @switch-line-size-dot-default; height: @switch-line-size-dot-default; background-color: @switch-color-dot-bg; border-radius: (@switch-line-size-dot-default / 2); box-shadow: 0 1px 3px @switch-line-color-dot-shadow; } &-type-line&-checked { background-color: transparent; &::after { background-color: @switch-color-bg_on; } } &-type-line&-custom-color { --custom-color: @switch-color-bg_off; &::after { background-color: var(--custom-color); } } &-type-line&-custom-color&-checked { --custom-color: @switch-color-bg_on; } &-type-line&-checked &-handle { left: calc(100% - @switch-line-size-dot-default); } // Disabled &-type-line[disabled] { background-color: transparent; cursor: not-allowed; &::after { background-color: @switch-color-bg_off_disabled; } } &-type-line[disabled]&-checked { background-color: transparent; &::after { background-color: @switch-color-bg_on_disabled; } } // Loading &-type-line&-loading { background-color: transparent; &::after { background-color: @switch-color-bg_off_loading; } } &-type-line&-loading&-checked { background-color: transparent; &::after { background-color: @switch-color-bg_on_loading; } } &-type-line&-small { min-width: @switch-line-small-width; height: @switch-size-small; line-height: @switch-size-small; } &-type-line&-small&-checked { padding-left: -@switch-size-small-line-gap; } &-type-line&-small &-handle { top: @switch-size-small-line-gap; width: @switch-line-size-dot-small; height: @switch-line-size-dot-small; border-radius: (@switch-size-small / 2); &-icon { transform: translate(-50%, -50%) scale(1); } } &-type-line&-small&-checked &-handle { left: calc( 100% - @switch-line-size-dot-small - @switch-size-small-line-gap ); } }