rsuite
Version:
A suite of react components
183 lines (149 loc) • 4.15 kB
text/less
@import '../../styles/common';
@import '../../Checkbox/styles/mixin';
@import '../../Button/styles/mixin';
@import 'mixin';
.@{ns}radio {
.radio-checkbox-common;
&-group-inline {
display: inline-block;
margin-left: -1 * @radio-sense-width;
}
&-group-picker {
color: @picker-default-toggle-font-color;
border: 1px solid @picker-default-toggle-border-color;
border-radius: @border-radius-base;
margin-left: 0;
.@{ns}radio-inline {
margin-left: 0;
}
.@{ns}radio-inline + .@{ns}radio-inline {
margin-left: @radio-sense-width; // space out consecutive inline controls
}
}
// Reset checker padding value.
&-group-picker &-checker {
padding: 0;
min-height: auto;
}
// Picker Radio group hidden radio.
&-group-picker &-wrapper {
display: none;
}
&-group-picker &-checker > label {
.btn(base);
color: @radio-label-font-color;
transition: color 0.3s linear;
padding: @padding-base-vertical - 1px @padding-base-horizontal - 1px;
&:hover,
&:active {
color: @radio-label-font-hover-color;
}
}
&-group-picker &-checked &-checker > label {
color: @radio-picker-active-color;
}
&-group-picker &-disabled &-checker > label {
opacity: 0.3;
cursor: not-allowed;
}
&-group-picker &-disabled:not(&-checked) &-checker > label {
color: @radio-label-font-color;
}
}
.@{ns}radio-checker {
padding-top: 10px;
padding-bottom: 10px;
padding-left: @radio-sense-width * 2 + @radio-width-height;
min-height: @radio-sense-width * 2 + @radio-width-height;
line-height: 1;
position: relative;
}
.@{ns}radio-wrapper {
position: absolute;
width: @radio-width-height;
height: @radio-width-height;
display: inline-block;
left: @radio-sense-width;
top: @checkbox-sense-width;
[type='radio'] {
opacity: 0;
}
&::before,
&::after,
.@{ns}radio-inner::before,
.@{ns}radio-inner::after {
content: '';
position: absolute;
left: 0;
top: 0;
display: block;
}
&::before,
.@{ns}radio-inner::before,
.@{ns}radio-inner::after {
width: @radio-width-height;
height: @radio-width-height;
}
// Ripple effect area.
&::before {
.radio-inner-wrapper(@radio-checked-border-color);
transform: scale(1);
opacity: 0.7;
visibility: hidden;
transition: transform 0.2s linear, opacity 0.2s linear;
.@{ns}radio-checked & {
transform: scale(1.5);
opacity: 0;
visibility: visible;
}
}
// Sense area(Can be clicked).
&::after {
top: -@radio-sense-width;
right: -@radio-sense-width;
bottom: -@radio-sense-width;
left: -@radio-sense-width;
}
// Out border.
.@{ns}radio-inner::before {
.radio-inner-wrapper(@radio-default-border-color);
transition: background 0.2s linear, border 0.2s linear, box-shadow 0.2s linear;
.@{ns}radio-checked & {
border-color: @radio-checked-border-color;
background-color: @radio-checked-border-color;
}
.@{ns}radio-disabled:not(.@{ns}radio-checked) & {
border-color: @radio-disabled-color;
background-color: @radio-disabled-color;
}
.@{ns}radio-disabled.@{ns}radio-checked & {
opacity: 0.3;
}
}
// Solid circle.
.@{ns}radio-inner::after {
width: @radio-inner-width-height;
height: @radio-inner-width-height;
background: @radio-inner-checked-color;
margin-top: (@radio-width-height - @radio-inner-width-height) / 2;
margin-left: (@radio-width-height - @radio-inner-width-height) / 2;
border-radius: @radio-border-radius;
opacity: 0;
transform: scale(0);
transition: opacity 0.2s ease-in, transform 0.2s cubic-bezier(0.12, 0.4, 0.29, 1.46);
.@{ns}radio-checked & {
transform: scale(1);
opacity: 1;
}
}
[type='radio']:focus ~ .@{ns}radio-inner::before {
.radio-inner-active-shadow(@radio-default-border-color);
@hover: ~':hover';
@{hover}& {
.radio-inner-active-shadow(@radio-checked-border-color);
}
.@{ns}radio-checked & {
.radio-inner-active-shadow(@radio-checked-border-color);
}
}
}