@sms-frontend/components
Version:
SMS Design React UI Library.
668 lines (558 loc) • 16.9 kB
text/less
@import './token.less';
@import '../../style/mixin.less';
@tabs-prefix-cls: ~'@{prefix}-tabs';
.get-title-padding(@header-height, @font-size, @padding-vertical ) {
@result: max(
0,
round((@header-height / 2) - @line-height-base * (@font-size / 2) - @padding-vertical)
);
}
// tabs icon style
.icon-hover(@tabs-prefix-cls, @tabs-size-icon, @tabs-size-icon-bg);
.@{tabs-prefix-cls} {
& &-icon-hover {
font-size: @tabs-size-icon;
color: @tabs-color-icon;
user-select: none;
}
&-dropdown-icon {
font-size: @tabs-size-icon;
margin-left: @tabs-spacing-nav-icon-header;
user-select: none;
}
&-close-icon {
margin-left: @tabs-margin-close-icon-left;
user-select: none;
}
&-add-icon {
font-size: @tabs-size-icon;
display: inline-flex;
align-items: center;
user-select: none;
justify-content: center;
padding: 0 @tabs-margin-add-icon-left;
}
&-add {
position: relative;
}
&-left-icon {
margin-left: @tabs-padding-header-wrapper-horizontal;
margin-right: @tabs-spacing-nav-icon-header;
}
&-right-icon {
margin-right: @tabs-padding-header-wrapper-horizontal;
margin-left: @tabs-spacing-nav-icon-header;
}
&-up-icon {
margin-bottom: @tabs-padding-header-wrapper-horizontal;
}
&-down-icon {
margin-top: @tabs-padding-header-wrapper-horizontal;
}
&-nav-icon-disabled {
cursor: not-allowed;
color: @tabs-color-icon_disabled;
}
}
.@{tabs-prefix-cls} {
position: relative;
overflow: hidden;
&-header-nav {
position: relative;
&::before {
content: '';
clear: both;
position: absolute;
bottom: 0;
left: 0;
right: 0;
height: @tabs-line-size-header-border;
background-color: @tabs-line-color-header-border;
display: block;
}
}
&-header-wrapper {
display: flex;
overflow: hidden;
flex: 1;
}
&-header {
position: relative;
display: inline-block;
transition: transform @transition-duration-2 @transition-timing-function-standard;
white-space: nowrap;
&-extra {
width: auto;
display: flex;
align-items: center;
line-height: @tabs-size-default-header-height;
.@{tabs-prefix-cls}-add-icon {
padding-left: 0;
}
}
&-title {
box-sizing: border-box;
font-size: @tabs-size-default-font-size;
cursor: pointer;
color: @tabs-color-title-text;
transition: color @transition-duration-2 @transition-timing-function-linear;
display: inline-flex;
align-items: center;
line-height: 1.5715;
padding: .get-title-padding(
@tabs-size-default-header-height,
@tabs-size-default-font-size,
@tabs-padding-title-text-vertical
)
[] 0;
&-text {
display: inline-block;
}
&:hover {
color: @tabs-color-title-text_hover;
font-weight: @tabs-line-font-title-text-weight_hover;
}
&-disabled,
&-disabled:hover {
color: @tabs-color-title-text_disabled;
cursor: not-allowed;
}
&-active,
&-active:hover {
color: @tabs-color-title-text_active;
font-weight: @tabs-line-font-title-text-weight_active;
&.@{tabs-prefix-cls}-header-title-disabled {
color: @tabs-color-title-text_disabled_active;
}
}
}
&-ink {
position: absolute;
bottom: 0;
right: initial;
top: initial;
height: @tabs-line-size-ink-stroke;
background-color: @tabs-line-color-ink-bg;
transition: left @transition-duration-2 @transition-timing-function-standard,
width @transition-duration-2 @transition-timing-function-standard;
&.@{tabs-prefix-cls}-header-ink-no-animation {
transition: none;
}
&-disabled {
background-color: @tabs-line-color-ink-bg_disabled;
}
}
}
}
// card card-gutter 类型
.@{tabs-prefix-cls} {
// type = line
&-header-nav-line &-header-extra {
line-height: @tabs-size-default-header-height_line;
}
&-header-nav-line &-header-title {
line-height: 1.5715;
margin: 0 (@tabs-line-margin-title-horizontal / 2);
padding: .get-title-padding(
@tabs-size-default-header-height_line,
@tabs-size-default-font-size,
@tabs-padding-title-text-vertical
)
[] 0;
&-text {
display: inline-block;
position: relative;
padding: @tabs-padding-title-text-vertical 0;
&::before {
content: '';
z-index: -1;
opacity: 1;
transition: all @transition-duration-2 @transition-timing-function-linear;
border-radius: @tabs-line-border-radius;
position: absolute;
top: 0;
bottom: 0;
left: -@tabs-padding-title-text-horizontal;
right: -@tabs-padding-title-text-horizontal;
background-color: @tabs-line-color-title-bg;
}
}
&:hover {
.@{tabs-prefix-cls}-header-title-text::before {
background-color: @tabs-line-color-title-bg_hover;
}
}
&-active,
&-active:hover {
.@{tabs-prefix-cls}-header-title-text::before {
background-color: @tabs-line-color-title-bg_active;
}
}
&-disabled,
&-disabled:hover {
.@{tabs-prefix-cls}-header-title-text::before {
opacity: 0;
}
}
}
&-header-nav-line&-header-nav-horizontal > &-header-scroll &-header-title:first-of-type {
margin-left: @tabs-line-margin-title-horizontal_first;
}
// headerPadding=false & type === line/text & horizontal
&-header-nav-line&-header-nav-horizontal &-header-no-padding > &-header-title:first-of-type,
&-header-nav-text&-header-nav-horizontal &-header-no-padding > &-header-title:first-of-type {
margin-left: 0;
}
// type = card card-gutter
&-header-nav-card &-header,
&-header-nav-card-gutter &-header {
&-title {
font-size: @tabs-size-default-font-size_card;
border: @tabs-card-border-width solid @tabs-card-color-title-border;
transition: padding @transition-duration-2 @transition-timing-function-linear,
color @transition-duration-2 @transition-timing-function-linear;
padding: .get-title-padding(
(@tabs-size-default-header-height - @tabs-card-border-width * 2),
@tabs-size-default-font-size_card,
0
)
[] @tabs-card-padding-title-horizontal;
}
&-title-editable {
padding-right: @tabs-card-padding-title-right_editable;
}
&-title-editable:not(.@{tabs-prefix-cls}-header-title-active):hover
.@{prefix}-icon-hover:hover::before {
background-color: @tabs-card-color-close-icon-bg_hover;
}
}
&-header-nav-card,
&-header-nav-card-gutter {
.@{tabs-prefix-cls}-add-icon {
height: @tabs-size-default-header-height;
}
}
&-header-nav-card &-header-title {
border-right: none;
background-color: @tabs-card-color-title-bg;
&:last-child {
border-right: @tabs-card-border-width solid @tabs-card-color-title-border;
border-top-right-radius: @tabs-card-border-radius;
}
&:first-child {
border-top-left-radius: @tabs-card-border-radius;
}
&:hover {
background-color: @tabs-card-color-title-bg_hover;
}
&-disabled,
&-disabled:hover {
background-color: @tabs-card-color-title-bg_disabled;
}
&-active,
&-active:hover {
border-bottom-color: var(--color-bg-2);
background-color: @tabs-card-color-title-bg_active;
}
}
&-header-nav-card-gutter &-header-title {
margin-left: @tabs-card-gutter-spacing-horizontal;
border-right: @tabs-card-border-width solid @tabs-card-color-title-border;
background-color: @tabs-card-gutter-color-title-bg;
border-radius: @tabs-card-border-radius @tabs-card-border-radius 0 0;
&:hover {
background-color: @tabs-card-gutter-color-title-bg_hover;
}
&-disabled,
&-disabled:hover {
background-color: @tabs-card-gutter-color-title-bg_disabled;
}
&-active,
&-active:hover {
border-bottom-color: var(--color-bg-2);
background-color: @tabs-card-gutter-color-title-bg_active;
}
&:first-child {
margin-left: 0;
}
}
// type = text
&-header-nav-text {
&::before {
display: none;
}
.@{tabs-prefix-cls}-header-title {
position: relative;
line-height: 1.5715;
margin: 0 (@tabs-text-margin-title-horizontal + (@tabs-text-size-separator-width / 2));
font-size: @tabs-size-default-font-size_text;
padding: .get-title-padding(
@tabs-size-default-header-height_text,
@tabs-size-default-font-size,
0
)
[] 0;
&:not(:first-of-type)::before {
height: @tabs-text-size-separator-height;
position: absolute;
width: @tabs-text-size-separator-width;
background-color: @tabs-text-color-separator-bg;
content: '';
display: block;
top: 50%;
transform: translateY(-50%);
left: -(@tabs-text-margin-title-horizontal + (@tabs-text-size-separator-width / 2));
}
&-text {
padding-left: @tabs-text-margin-title-horizontal;
padding-right: @tabs-text-margin-title-horizontal;
background-color: @tabs-text-color-title-bg;
}
&-text:hover {
background-color: @tabs-text-color-title-bg_hover;
}
&-active {
.@{tabs-prefix-cls}-header-title-text,
.@{tabs-prefix-cls}-header-title-text:hover {
background-color: @tabs-text-color-title-bg_active;
}
}
&-disabled {
.@{tabs-prefix-cls}-header-title-text,
.@{tabs-prefix-cls}-header-title-text:hover {
background-color: @tabs-text-color-title-bg_disabled;
}
}
&-active&-disabled {
.@{tabs-prefix-cls}-header-title-text,
.@{tabs-prefix-cls}-header-title-text:hover {
background-color: @tabs-text-color-title-bg_disabled_active;
}
}
}
}
&-header-nav-rounded {
&::before {
display: none;
}
.@{tabs-prefix-cls}-header-title {
padding: .get-title-padding(
@tabs-size-default-header-height_rounded,
@tabs-size-default-font-size_rounded,
0
)
[] 0;
padding-left: @tabs-rounded-padding-title-horizontal;
padding-right: @tabs-rounded-padding-title-horizontal;
margin: 0 (@tabs-rounded-margin-title-horizontal / 2);
font-size: @tabs-size-default-font-size_rounded;
background-color: @tabs-rounded-color-title-bg;
border-radius: @tabs-size-default-header-height_rounded;
&:hover {
background-color: @tabs-rounded-color-title-bg_hover;
}
&-disabled:hover {
background-color: @tabs-rounded-color-title-bg_disabled;
}
&-active,
&-active:hover {
background-color: @tabs-rounded-color-title-bg_active;
}
}
}
&-header-nav-capsule {
&::before {
display: none;
}
.@{tabs-prefix-cls}-header-wrapper {
justify-content: flex-end;
}
.@{tabs-prefix-cls}-header {
line-height: 1;
background-color: @tabs-capsule-color-header-bg;
border-radius: @tabs-capsule-border-header-radius;
padding: @tabs-capsule-padding-header-vertical @tabs-capsule-padding-header-horizontal;
}
.@{tabs-prefix-cls}-header-title {
line-height: @tabs-size-default-header-height_capsule - @tabs-capsule-padding-header-vertical *
2;
padding: 0 @tabs-capsule-padding-title-horizontal;
background-color: @tabs-capsule-color-title-bg;
position: relative;
font-size: @tabs-size-default-font-size_capsule;
border-radius: @tabs-capsule-border-title-radius;
&:hover {
background-color: @tabs-capsule-color-title-bg_hover;
}
&-disabled:hover {
background-color: unset;
}
&-active,
&-active:hover {
background-color: @tabs-capsule-color-title-bg_active;
&::before,
& + .@{tabs-prefix-cls}-header-title::before {
opacity: 0;
}
}
}
&.@{tabs-prefix-cls}-header-nav-horizontal
.@{tabs-prefix-cls}-header-title:not(:first-of-type) {
margin-left: @tabs-capsule-margin-title-horizontal;
&::before {
position: absolute;
top: 50%;
left: -(@tabs-capsule-margin-title-horizontal / 2) - (@tabs-capsule-size-separator-width / 2);
transform: translateY(-50%);
display: block;
height: @tabs-capsule-size-separator-height;
width: @tabs-capsule-size-separator-width;
background-color: @tabs-capsule-color-separator-bg;
content: '';
transition: all @transition-duration-2 @transition-timing-function-linear;
}
}
}
}
// .@{tabs-prefix-cls} {
// /* Horizontal */
// &-header-nav {
// position: relative;
// background: #fff;
// .@{tabs-prefix-cls}-icon {
// line-height: @tab-pane-height;
// font-size: 12px;
// position: absolute;
// color: @color--grey7;
// cursor: pointer;
// user-select: none;
// &:hover {
// color: @tab-pane-active-color;
// color: @color--grey6;
// }
// }
// }
// /** header */
.@{tabs-prefix-cls} {
&-header-scroll {
overflow: hidden;
position: relative;
display: flex;
align-items: center;
}
&-content {
width: 100%;
overflow: hidden;
padding-top: @tabs-content-padding;
box-sizing: border-box;
.@{tabs-prefix-cls}-content-inner {
display: flex;
width: 100%;
}
.@{tabs-prefix-cls}-content-item {
width: 100%;
overflow: hidden;
height: 0;
flex-shrink: 0;
&.@{tabs-prefix-cls}-content-item-active {
height: auto;
}
}
}
&-card,
&-card-gutter {
> .@{tabs-prefix-cls}-content {
border: @tabs-card-border-content-width solid @tabs-line-color-header-border;
border-top: none;
}
}
&-animation&-content {
&-inner {
transition: all @transition-duration-2 @transition-timing-function-standard;
}
}
&-horizontal&-justify {
display: flex;
flex-direction: column;
height: 100%;
.@{tabs-prefix-cls}-content,
.@{tabs-prefix-cls}-content-inner,
.@{tabs-prefix-cls}-pane {
height: 100%;
}
}
}
// 不同尺寸
@sizes: mini, small, large;
.for(@data, @i: 1) when(@i =< length(@data)) {
@size: extract(@data, @i);
.@{tabs-prefix-cls}-header-size-@{size} {
&.@{tabs-prefix-cls}-header-nav-line {
@height: ~'tabs-size-@{size}-header-height_line';
@font-size: ~'tabs-size-@{size}-font-size';
.@{tabs-prefix-cls}-header-extra {
line-height: @@height;
font-size: @@font-size;
}
.@{tabs-prefix-cls}-header-title {
font-size: @@font-size;
@padding: .get-title-padding(@@height, @@font-size, @tabs-padding-title-text-vertical) [];
padding-top: @padding;
padding-bottom: @padding;
}
.@{tabs-prefix-cls}-header-extra {
line-height: @@height;
font-size: @@font-size;
}
}
&.@{tabs-prefix-cls}-header-nav-card,
&.@{tabs-prefix-cls}-header-nav-card-gutter {
@card-font-size: ~'tabs-size-@{size}-font-size_card';
@card-height: ~'tabs-size-@{size}-header-height';
.@{tabs-prefix-cls}-header-title {
font-size: @@card-font-size;
padding-top: .get-title-padding(
@@card-height - @tabs-card-border-width * 2,
@@card-font-size,
0
)
[];
padding-bottom: $padding-top;
}
.@{tabs-prefix-cls}-header-extra {
line-height: @@card-height;
font-size: @@card-font-size;
}
.@{tabs-prefix-cls}-add-icon {
height: @@card-height;
}
}
&.@{tabs-prefix-cls}-header-nav-capsule {
@capsule-font-size: ~'tabs-size-@{size}-font-size_capsule';
@capsule-height: ~'tabs-size-@{size}-header-height_capsule';
.@{tabs-prefix-cls}-header-title {
font-size: @@capsule-font-size;
line-height: @@capsule-height - @tabs-capsule-padding-header-vertical * 2;
}
.@{tabs-prefix-cls}-header-extra {
line-height: @@capsule-height;
font-size: @@capsule-font-size;
}
}
}
.for(@data, (@i + 1));
}
.for(@sizes);
@import './vertical.less';
@{arco-theme-tag}[arco-theme='dark'] {
.@{tabs-prefix-cls}-header-nav-capsule {
.@{tabs-prefix-cls}-header-title {
&-active {
background-color: var(--color-fill-3);
}
&:hover {
background-color: var(--color-fill-3);
}
}
}
}