@arco-design/web-react
Version:
Arco Design React UI Library.
395 lines (324 loc) • 11.2 kB
text/less
@import './token.less';
@btn-prefix-cls: ~'@{prefix}-btn';
.btn-type(@type) {
.@{btn-prefix-cls}-@{type}:not(.@{btn-prefix-cls}-disabled) {
background-color: ~'@{btn-@{type}-color-bg}';
color: ~'@{btn-@{type}-color-text}';
border: @btn-size-default-border-width ~'@{btn-@{type}-border-style}' ~'@{btn-@{type}-color-border}';
&:not(.@{btn-prefix-cls}-loading):hover {
border-color: ~'@{btn-@{type}-color-border_hover}';
color: ~'@{btn-@{type}-color-text_hover}';
background-color: ~'@{btn-@{type}-color-bg_hover}';
}
&:not(.@{btn-prefix-cls}-loading):active {
border-color: ~'@{btn-@{type}-color-border_active}';
color: ~'@{btn-@{type}-color-text_active}';
background-color: ~'@{btn-@{type}-color-bg_active}';
}
&:focus-visible {
box-shadow: 0 0 0 @btn-box-shadow-radius ~'@{btn-@{type}-color-box-shadow}';
}
}
.@{btn-prefix-cls}-@{type}.@{btn-prefix-cls}-disabled {
background-color: ~'@{btn-@{type}-color-bg_disabled}';
color: ~'@{btn-@{type}-color-text_disabled}';
border: @btn-size-default-border-width ~'@{btn-@{type}-border-style}' ~'@{btn-@{type}-color-border_disabled}';
cursor: not-allowed;
}
}
.btn-status(@type, @status) {
.@{btn-prefix-cls}-@{type}.@{btn-prefix-cls}-status-@{status}:not(.@{btn-prefix-cls}-disabled) {
background-color: ~'@{btn-@{type}-color-bg_@{status}}';
color: ~'@{btn-@{type}-color-text_@{status}}';
border-color: ~'@{btn-@{type}-color-border_@{status}}';
&:not(.@{btn-prefix-cls}-loading):hover {
border-color: ~'@{btn-@{type}-color-border_@{status}_hover}';
color: ~'@{btn-@{type}-color-text_@{status}_hover}';
background-color: ~'@{btn-@{type}-color-bg_@{status}_hover}';
}
&:not(.@{btn-prefix-cls}-loading):active {
border-color: ~'@{btn-@{type}-color-border_@{status}_active}';
color: ~'@{btn-@{type}-color-text_@{status}_active}';
background-color: ~'@{btn-@{type}-color-bg_@{status}_active}';
}
&:focus-visible {
box-shadow: 0 0 0 @btn-box-shadow-radius ~'@{btn-color-box-shadow_@{status}}';
}
}
.@{btn-prefix-cls}-@{type}.@{btn-prefix-cls}-status-@{status}.@{btn-prefix-cls}-disabled {
color: ~'@{btn-@{type}-color-text_@{status}_disabled}';
background-color: ~'@{btn-@{type}-color-bg_@{status}_disabled}';
border: @btn-size-default-border-width ~'@{btn-@{type}-border-style}' ~'@{btn-@{type}-color-border_@{status}_disabled}';
}
}
.btn-size(@size) {
.@{btn-prefix-cls}-size-@{size} {
padding: 0 ~'@{btn-size-@{size}-padding-horizontal}';
font-size: ~'@{btn-size-@{size}-font-size}';
height: ~'@{btn-size-@{size}-height}';
border-radius: ~'@{btn-size-@{size}-radius}';
// line-height: calc(~'@{size-@{size}}' - ~'@{btn-size-@{size}-border-width}' * 2);
> svg + span,
> span + svg {
margin-left: ~'@{btn-size-@{size}-icon-spacing}';
}
svg {
vertical-align: ~'@{btn-size-@{size}-icon-vertical-align}';
}
&.@{btn-prefix-cls}-rtl {
> svg + span,
> span + svg {
margin-left: 0;
margin-right: ~'@{btn-size-@{size}-icon-spacing}';
}
}
}
@bsp: ~'btn-size-@{size}-padding-horizontal';
@bsf: ~'btn-size-@{size}-font-size';
@bss: ~'btn-size-@{size}-icon-spacing';
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-loading-fixed-width.@{btn-prefix-cls}-loading {
padding-left: @@bsp - ((@@bsf + @@bss) / 2);
padding-right: @@bsp - ((@@bsf + @@bss) / 2);
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-icon-only {
width: ~'@{size-@{size}}';
height: ~'@{size-@{size}}';
padding: 0;
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-circle {
width: ~'@{size-@{size}}';
height: ~'@{size-@{size}}';
padding: 0;
text-align: center;
border-radius: @radius-circle;
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round {
border-radius: calc(~'@{size-@{size}}' * 0.5);
}
.@{btn-prefix-cls}-group {
.@{btn-prefix-cls}-size-@{size}:first-child {
border-radius: ~'@{btn-size-@{size}-radius}' 0 0 ~'@{btn-size-@{size}-radius}';
}
.@{btn-prefix-cls}-size-@{size}:last-child {
border-radius: 0 ~'@{btn-size-@{size}-radius}' ~'@{btn-size-@{size}-radius}' 0;
}
.@{btn-prefix-cls}-size-@{size}:first-child:last-child {
border-radius: ~'@{btn-size-@{size}-radius}';
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:first-child {
border-radius: calc(~'@{size-@{size}}' * 0.5) 0 0 calc(~'@{size-@{size}}' * 0.5);
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:last-child {
border-radius: 0 calc(~'@{size-@{size}}' * 0.5) calc(~'@{size-@{size}}' * 0.5) 0;
}
.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:first-child:last-child {
border-radius: calc(~'@{size-@{size}}' * 0.5);
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}:first-child {
border-radius: 0 ~'@{btn-size-@{size}-radius}' ~'@{btn-size-@{size}-radius}' 0;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}:last-child {
border-radius: ~'@{btn-size-@{size}-radius}' 0 0 ~'@{btn-size-@{size}-radius}';
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}:first-child:last-child {
border-radius: ~'@{btn-size-@{size}-radius}';
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:first-child {
border-radius: 0 calc(~'@{size-@{size}}' * 0.5) calc(~'@{size-@{size}}' * 0.5) 0;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:last-child {
border-radius: calc(~'@{size-@{size}}' * 0.5) 0 0 calc(~'@{size-@{size}}' * 0.5);
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-size-@{size}.@{btn-prefix-cls}-shape-round:first-child:last-child {
border-radius: calc(~'@{size-@{size}}' * 0.5);
}
}
}
.@{btn-prefix-cls} {
display: inline-block;
position: relative;
outline: none;
font-weight: @btn-font-weight;
appearance: none;
user-select: none;
cursor: pointer;
white-space: nowrap;
transition: all @transition-duration-1 @transition-timing-function-linear;
box-sizing: border-box;
line-height: @line-height-base;
> a:only-child {
color: currentColor;
}
&:active {
transition: none;
}
&:empty {
display: inline-block;
vertical-align: bottom;
}
&-long {
display: block;
width: 100%;
}
// link
&-link {
display: inline-flex;
align-items: center;
justify-content: center;
text-decoration: none;
&:not([href]) {
color: var(~'@{arco-cssvars-prefix}-color-text-4');
}
&:hover {
text-decoration: none;
}
}
&-loading {
cursor: default;
position: relative;
&::before {
content: '';
position: absolute;
top: -1px;
right: -1px;
bottom: -1px;
left: -1px;
z-index: 1;
display: block;
background: #fff;
border-radius: inherit;
opacity: 0.4;
transition: opacity @transition-duration-1 @transition-timing-function-linear;
pointer-events: none;
}
}
&-loading-fixed-width {
transition: none;
}
&-two-chinese-chars > *:not(svg) {
letter-spacing: 0.3em;
margin-right: -0.3em;
}
a&-icon-only {
display: inline-flex;
align-items: center;
justify-content: center;
vertical-align: top;
}
}
.btn-type(outline);
.btn-status(outline, warning);
.btn-status(outline, danger);
.btn-status(outline, success);
.btn-type(primary);
.btn-status(primary, warning);
.btn-status(primary, danger);
.btn-status(primary, success);
.btn-type(secondary);
.btn-status(secondary, warning);
.btn-status(secondary, danger);
.btn-status(secondary, success);
.btn-type(dashed);
.btn-status(dashed, warning);
.btn-status(dashed, danger);
.btn-status(dashed, success);
.btn-type(text);
.btn-status(text, warning);
.btn-status(text, danger);
.btn-status(text, success);
.btn-size(mini);
.btn-size(small);
.btn-size(default);
.btn-size(large);
.@{btn-prefix-cls}-group {
display: inline-block;
.@{btn-prefix-cls}-outline:not(:first-child),
.@{btn-prefix-cls}-dashed:not(:first-child) {
margin-left: -1px;
}
.@{btn-prefix-cls}-primary:not(:last-child) {
border-right: 1px solid @btn-primary-color-bg_hover;
}
.@{btn-prefix-cls}-secondary:not(:last-child) {
border-right: 1px solid @btn-secondary-color-bg_hover;
}
.@{btn-prefix-cls}-text:not(:last-child) {
border-right: 1px solid @btn-text-color-border_hover;
}
.@{btn-prefix-cls}-status-warning:not(:last-child) {
border-right: 1px solid @btn-primary-color-bg_warning_hover;
&.@{btn-prefix-cls}-text {
border-right: 1px solid @btn-text-color-bg_warning_hover;
}
}
.@{btn-prefix-cls}-status-danger:not(:last-child) {
border-right: 1px solid @btn-primary-color-bg_danger_hover;
&.@{btn-prefix-cls}-text {
border-right: 1px solid @btn-text-color-bg_danger_hover;
}
}
.@{btn-prefix-cls}-status-success:not(:last-child) {
border-right: 1px solid @btn-primary-color-bg_success_hover;
&.@{btn-prefix-cls}-text {
border-right: 1px solid @btn-text-color-bg_success_hover;
}
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-outline:not(:first-child),
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-dashed:not(:first-child) {
margin-left: 0;
margin-right: -1px;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-primary:not(:last-child) {
border-left: 1px solid @btn-primary-color-bg_hover;
border-right: 0;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-secondary:not(:last-child) {
border-left: 1px solid @btn-secondary-color-bg_hover;
border-right: 0;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-text:not(:last-child) {
border-left: 1px solid @btn-text-color-border_hover;
border-right: 0;
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-status-warning:not(:last-child) {
border-left: 1px solid @btn-primary-color-bg_warning_hover;
border-right: 0;
&.@{btn-prefix-cls}-text {
border-left: 1px solid @btn-text-color-bg_warning_hover;
}
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-status-danger:not(:last-child) {
border-left: 1px solid @btn-primary-color-bg_danger_hover;
border-right: 0;
&.@{btn-prefix-cls}-text {
border-left: 1px solid @btn-text-color-bg_danger_hover;
}
}
.@{btn-prefix-cls}-rtl.@{btn-prefix-cls}-status-success:not(:last-child) {
border-left: 1px solid @btn-primary-color-bg_success_hover;
border-right: 0;
&.@{btn-prefix-cls}-text {
border-left: 1px solid @btn-text-color-bg_success_hover;
}
}
.@{btn-prefix-cls}-outline,
.@{btn-prefix-cls}-dashed {
&:hover,
&:active {
z-index: 2;
}
}
.@{btn-prefix-cls}:not(:first-child):not(:last-child) {
border-radius: 0;
}
}
.@{btn-prefix-cls}-rtl {
direction: rtl;
}
@{arco-theme-tag} {
&[arco-theme='dark'] {
.@{btn-prefix-cls}-primary.@{btn-prefix-cls}-disabled {
color: rgba(255, 255, 255, 30%);
}
}
}