UNPKG

@arco-design/web-vue

Version:

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

267 lines (223 loc) 6.7 kB
@import '../../style/mixins/index.less'; @import './token.less'; @radio-prefix-cls: ~'@{prefix}-radio'; .@{radio-prefix-cls}, .@{radio-prefix-cls}-button { > input[type='radio'] { position: absolute; top: 0; left: 0; width: 0; height: 0; opacity: 0; &:focus + .@{prefix}-radio-icon-hover::before { background-color: @icon-hover-color-bg; } } } .icon-hover(@radio-prefix-cls, @radio-layout-height, @radio-size-mask-height); .@{radio-prefix-cls} { position: relative; display: inline-flex; align-items: center; padding-left: (@radio-size-mask-height / 2) - (@radio-layout-height / 2); font-size: @radio-font-text-size; line-height: unset; cursor: pointer; // radio circle &-label { margin-left: @radio-margin-text-left; color: @radio-color-text; } &-icon { position: relative; display: block; box-sizing: border-box; width: @radio-layout-height; height: @radio-layout-height; line-height: @radio-layout-height; border: @radio-border-width solid @radio-color-border; border-radius: @radio-border-radius; &::after { position: absolute; top: 0; left: 0; display: inline-block; box-sizing: border-box; width: @radio-layout-height - @radio-border-width * 2; height: @radio-layout-height - @radio-border-width * 2; background-color: @radio-color-bg; border-radius: @radio-border-radius; transform: scale(1); transition: transform @transition-duration-3 @transition-timing-function-overshoot; content: ''; } } &:hover &-icon { border-color: @radio-color-border_hover; } &-checked &-icon { background-color: @radio-color-bg_checked; border-color: @radio-color-bg_checked; &::after { background-color: var(~'@{arco-cssvars-prefix}-color-white'); transform: scale(0.4); } } &-checked:hover &-icon { border-color: @radio-color-bg_checked; } &-disabled { cursor: not-allowed; .@{prefix}-radio-icon-hover { cursor: not-allowed; } .@{radio-prefix-cls}-label { color: @radio-color-text_disabled; } } &-disabled &-icon { border-color: @radio-color-border_disabled; &::after { background-color: @radio-color-bg_disabled; } } &-disabled:hover &-icon { border-color: @radio-color-border_disabled; } &-checked&-disabled { .@{radio-prefix-cls}-icon, &:hover .@{radio-prefix-cls}-icon { background-color: @radio-color-bg_checked_disabled; border-color: @color-transparent; } .@{radio-prefix-cls}-icon::after { background-color: @radio-color-dot-bg_checked_disabled; } .@{radio-prefix-cls}-label { color: @radio-color-text_checked_disabled; } } &:hover { .@{prefix}-radio-icon-hover::before { background-color: @radio-mask-bg-color-bg; } } } // group type .@{radio-prefix-cls}-group { display: inline-block; box-sizing: border-box; .@{radio-prefix-cls} { margin-right: @radio-group-margin-right; } // button type &-button { display: inline-flex; padding: (@radio-button-spacing / 2); line-height: @radio-size-default-height - @radio-button-spacing * 2; background-color: @radio-group-button-color-bg; border-radius: @radio-button-bg-border-radius; } } .@{radio-prefix-cls}-button { position: relative; display: inline-block; margin: (@radio-button-spacing / 2); color: @radio-button-color-text; font-size: @radio-font-text-size; line-height: @radio-size-default-height - @radio-button-spacing * 2; background-color: @radio-button-color-bg; border-radius: @radio-button-border-radius; cursor: pointer; transition: all @transition-duration-1 @transition-timing-function-linear; &-content { position: relative; display: block; padding: 0 @radio-button-padding-horizontal; } // 按钮之间的分割线 &:not(:first-of-type)::before { position: absolute; top: 50%; left: -((@radio-button-spacing - @radio-button-size-separator-width) / 2) - @radio-button-size-separator-width; display: block; width: @radio-button-size-separator-width; height: @radio-button-size-separator-height; background-color: @radio-button-color-separator-bg; transform: translateY(-50%); transition: all @transition-duration-1 @transition-timing-function-linear; content: ''; } // 被选中的按钮不需要左右的分割线 &:hover::before, &:hover + &::before, &.@{radio-prefix-cls}-checked::before, &.@{radio-prefix-cls}-checked + &::before { opacity: 0; } &:hover { color: @radio-button-color-text_hover; background-color: @radio-button-color-bg_hover; } &.@{radio-prefix-cls}-checked { color: @radio-button-color-text_active; background-color: @radio-button-color-bg_active; } &.@{radio-prefix-cls}-disabled { color: @radio-button-color-text_disabled; background-color: @radio-button-color-bg_disabled; cursor: not-allowed; } &.@{radio-prefix-cls}-disabled.@{radio-prefix-cls}-checked { color: @radio-button-color-text_checked_disabled; background-color: @radio-button-color-bg_checked_disabled; } } // size small default large huge .@{radio-prefix-cls}-group { &-size-small { line-height: @radio-size-small-height; &.@{radio-prefix-cls}-group-button, .@{radio-prefix-cls}-button { font-size: @radio-font-text-size_small; line-height: @radio-size-small-height - @radio-button-spacing * 2; } } &-size-large { line-height: @radio-size-large-height; &.@{radio-prefix-cls}-group-button, .@{radio-prefix-cls}-button { font-size: @radio-font-text-size_large; line-height: @radio-size-large-height - @radio-button-spacing * 2; } } &-size-mini { line-height: @radio-size-mini-height; &.@{radio-prefix-cls}-group-button, .@{radio-prefix-cls}-button { font-size: @radio-font-text-size_mini; line-height: @radio-size-mini-height - @radio-button-spacing * 2; } } } // vertical direction .@{radio-prefix-cls}-group-direction-vertical { // default radio .@{radio-prefix-cls} { display: flex; margin-right: 0; line-height: @radio-group-size-line-height_vertical; } } // dark mode @{arco-theme-tag}[arco-theme='dark'] { .@{radio-prefix-cls}-button.@{radio-prefix-cls}-checked, .@{radio-prefix-cls}-button:not(.@{radio-prefix-cls}-disabled):hover { background-color: var(~'@{arco-cssvars-prefix}-color-fill-3'); } .@{radio-prefix-cls}-button::after { background-color: var(~'@{arco-cssvars-prefix}-color-bg-3'); } }