UNPKG

preact-arco-design

Version:

Arco Design React UI Library.

390 lines (323 loc) 9.12 kB
@import '../../style/mixin.less'; @import './token.less'; @import '../../InputTag/style/index.less'; @select-prefix-cls: ~'@{prefix}-select'; // used by form .color(@prefixCls, @status) { @suffix: if(@status = default, ~'', ~'-@{status}'); .@{prefixCls}@{suffix} { .@{prefixCls}-view { & when (@status = default) , (@status = disabled) { color: ~'@{select-color-text_@{status}}'; } background-color: ~'@{select-color-bg_@{status}}'; border: 1px solid ~'@{select-color-border_@{status}}'; } &:hover { .@{prefixCls}-view { background-color: ~'@{select-color-bg_@{status}_hover}'; border-color: ~'@{select-color-border_@{status}_hover}'; } } &.@{prefixCls}-focused when not (@status = disabled) { .@{prefixCls}-view { color: @select-color-text_focused; background-color: ~'@{select-color-bg_@{status}_focus}'; border-color: ~'@{select-color-border_@{status}_focus}'; box-shadow: 0 0 0 ~'@{select-shadow-distance_@{status}_focus}' ~'@{select-color-shadow_@{status}_focus}'; } } .@{prefixCls}-suffix-icon, .@{prefixCls}-loading-icon, .@{prefixCls}-search-icon, .@{prefixCls}-clear-icon, .@{prefixCls}-arrow-icon, .@{prefixCls}-expand-icon { & when (@status = default) , (@status = disabled) { color: ~'@{select-color-icon_@{status}}'; } } } .@{prefixCls}-no-border { .@{prefixCls}-view { border: none !important; background: none !important; } } } .select-view(@prefixCls) { @tail-icon-position-right: 10px; .size(@size) { @ref-font-size: ~'select-size-@{size}-font-size'; @ref-height: ~'select-size-@{size}-height'; @ref-padding: ~'select-signal-size-@{size}-padding'; @font-size: @@ref-font-size; @height: @@ref-height; @padding: @@ref-padding - @select-border-width; @multi-padding: @select-multi-padding - @select-border-width; .@{prefixCls} { &-size-@{size}&-multiple { .@{prefixCls}-view { height: auto; font-size: @font-size; padding: 0 @multi-padding; line-height: 0; } .input-tag-input-element-padding(@padding - @multi-padding); .@{prefixCls}-suffix { padding-right: @padding - @multi-padding; } input { font-size: @font-size; } } &-size-@{size}&-single { .@{prefixCls}-view { height: @height; line-height: $height - @select-border-width * 2; font-size: @font-size; padding: 0 @padding; } input { font-size: @font-size; } } &-size-@{size}&-multiple { .@{prefixCls}-view-with-prefix { padding-left: @padding; } } } } .color(@prefixCls, default); .color(@prefixCls, error); .color(@prefixCls, disabled); .size(mini); .size(small); .size(default); .size(large); .@{prefixCls} { display: inline-block; position: relative; box-sizing: border-box; width: 100%; cursor: pointer; &-view { display: flex; position: relative; box-sizing: border-box; width: 100%; border-radius: @select-border-radius; outline: none; user-select: none; text-align: left; transition: all @transition-duration-1 @transition-timing-function-linear, padding 0s linear; input { color: inherit; cursor: inherit; &::placeholder { color: @select-color-placeholder_default; } } } .hide-input-element() { // 需要在隐藏 input 的同时保证其能被 Tab 键聚焦 // 故不要用 display: none / visibility: hidden width: 0 !important; // width: 0 的 div 还能引起换行导致输入框被撑开,将其脱离标准文档流 position: absolute; } &-multiple, &-show-search { cursor: text; } &-disabled { cursor: not-allowed; .@{prefixCls}-view input::placeholder { color: @select-color-placeholder_disabled; } } &-single &-view { &-input { box-sizing: border-box; width: 100%; padding: 0; border: none; outline: none; background: transparent; .text-ellipsis(); } &-value { display: inline-block; box-sizing: border-box; width: 100%; .text-ellipsis(); // 修复当value为空字符串时,造成select外层div的高度多余了4px的样式问题。 &::after { content: '.'; font-size: 0; line-height: 0; visibility: hidden; } } .@{prefixCls}-hidden { .hide-input-element(); } } &-multiple { vertical-align: top; .@{prefixCls}-view { padding: 0 @select-multi-padding; line-height: 0; } .@{prefixCls}-view-with-prefix { padding-left: @select-signal-size-default-padding; } .@{prefix}-input-tag { flex: 1; padding: 0; border: none !important; background: none !important; box-shadow: none !important; overflow: hidden; } .@{prefix}-tag { max-width: 100%; } // 多选的空白输入框在已存在选择项并且未聚焦时隐藏,避免导致不必要的换行 &:not(.@{prefixCls}-focused) { .@{prefix}-input-tag input:not(:first-child)[value=''] { .hide-input-element(); } } } &-prefix { display: flex; align-items: center; margin-right: 12px; white-space: nowrap; color: @select-color-icon_default; } &-suffix { display: flex; align-items: center; margin-left: 4px; } &-suffix-icon, &-search-icon, &-loading-icon, &-expand-icon, &-clear-icon { font-size: @select-size-icon; transition: all @transition-duration-1 @transition-timing-function-linear; } &-arrow-icon { font-size: @select-size-icon; } &-open &-arrow-icon svg { transform: rotateZ(180deg); } & &-clear-icon { display: none; cursor: pointer; > svg { position: relative; transition: all @transition-duration-1 @transition-timing-function-linear; } } &:hover &-clear-icon { display: block; & ~ * { display: none; } } } } .select-view(@select-prefix-cls); .@{select-prefix-cls} { &-popup { top: 4px; box-sizing: border-box; padding: @select-popup-padding-vertical 0; border: 1px solid @select-popup-color-border; border-radius: @select-popup-border-radius; background-color: @select-popup-color-bg; box-shadow: @select-popup-box-shadow; overflow: hidden; &-hidden { display: none; } } &-popup &-popup-inner { width: 100%; max-height: @select-popup-max-height; list-style: none; } &-popup &-option { position: relative; box-sizing: border-box; width: 100%; padding: 0 @select-signal-popup-option-padding-horizontal; font-size: @select-popup-font-size; text-align: left; cursor: pointer; line-height: @select-popup-option-height; .text-ellipsis(); .option-color(@status) { @class-suffix: if(@status = default, ~'', ~'-@{status}'); &@{class-suffix} { color: ~'@{select-popup-option-color-text_@{status}}'; background-color: ~'@{select-popup-option-color-bg_@{status}}'; } } .option-color(default); .option-color(selected); .option-color(hover); // disabled 优先级最高,放在最后 .option-color(disabled); &-disabled { cursor: not-allowed; } &-selected { font-weight: @select-popup-option-font-weight_selected; } &-empty { height: $line-height; } } &-option-wrapper { display: flex; align-items: center; padding: 0 7px; .@{select-prefix-cls}-checkbox { padding: 0 5px; // 避免点击复选框导致 select-view 的输入框失焦 input { display: none; } } .@{select-prefix-cls}-option { flex: 1; margin-left: 1px; padding: 0 @select-multi-popup-option-padding-horizontal; border-radius: @select-border-radius; } } &-group-title { box-sizing: border-box; width: 100%; padding: @select-popup-group-title-padding-top @select-popup-group-title-padding-horizontal 0 @select-popup-group-title-padding-horizontal; line-height: @select-popup-group-title-height; font-size: @select-popup-group-title-font-size; color: @select-popup-group-title-color-text; .text-ellipsis(); &:first-child { padding-top: @select-popup-group-title-padding-top - @select-popup-padding-vertical; } } &-highlight { font-weight: @select-popup-option-font-hightlight-weight; color: @select-popup-option-color-hightlight-text; } }