ctree-virtualtree
Version:
A vue tree component using virtual list.fork from @wsfe/ctree
158 lines (135 loc) • 3.45 kB
text/less
#ctree-tree-drop-styles () {
// prefix
@tree-drop-prefix: ~"@{ctree-prefix}-tree-drop";
@tree-search-prefix: ~"@{ctree-prefix}-tree-search";
@tree-dropdown-prefix: ~"@{ctree-prefix}-dropdown";
// TreeDrop
.@{tree-drop-prefix} {
// 容器
&__wrapper {
position: relative;
}
// 下拉框触发区域
&__reference {
cursor: pointer;
}
// 触发区域
&__display {
// 输入框
&-input {
position: relative;
user-select: none;
padding-right: 20px;
&-text {
display: block;
height: 100%;
line-height: 22px;
}
&-placeholder {
color: @ctree-color-input-placeholder;
}
&_focus {
border-color: @ctree-color-input-border;
box-shadow: 0 0 0 2px fade(@ctree-color-primary, 20%);
}
}
// 图标
&-icon {
@icon-size: 14px;
.icon () {
position: absolute;
top: 8px;
right: 3px;
width: @icon-size;
height: @icon-size;
box-sizing: border-box;
}
// 下拉图标
&-drop {
@scale: 0.5;
@translate: -(@icon-size / 2) * @scale;
@transform-rest: scale(@scale) translateX(@translate) translateY(@translate);
.icon();
border: 3px solid @ctree-color-sub;
border-top: none;
border-left: none;
transform: rotate(45deg) @transform-rest;
transition: transform .2s ease-in-out;
&_active {
transform: rotate(225deg) @transform-rest;
}
}
// 清除图标
&-clear {
@scale: 0.9;
.pseudo () {
@thick: 1px;
@offset: (@icon-size - @thick) / 2;
@diff: 7px;
content: "";
width: @thick;
height: @icon-size - @diff;
display: block;
background-color: #fff;
position: absolute;
top: @diff / 2;
left: @offset;
}
.icon();
border-radius: 50%;
background-color: @ctree-color-sub;
overflow: hidden;
transform: scale(@scale) rotate(45deg);
display: none;
&::before {
.pseudo();
}
&::after {
.pseudo();
transform: rotate(90deg);
}
}
}
&-input:hover &-icon-clear {
display: block;
}
}
// 下拉框
&__dropdown {
position: absolute;
top: -999px;
left: -999px;
box-shadow: 0 1px 6px fade(#000, 20%);
border-radius: 4px;
margin: 5px 0;
padding: 5px 0;
transform-origin: center top 0px;
background-color: #fff;
z-index: 9999;
.@{tree-search-prefix} {
// TreeSearch 搜索区域
&__search {
border-bottom: 1px solid @ctree-color-border;
padding-bottom: 5px;
height: 38px;
}
// TreeSearch 树区域
&__tree-wrapper {
padding-top: 5px;
}
}
}
}
// Dropdown animation
.@{tree-dropdown-prefix} {
&-enter, &-leave-to {
opacity: 0;
transform: scaleY(0.8)
}
&-enter-active, &-leave-active {
transition: opacity .3s,
transform .3s;
}
}
}
#ctree-tree-drop-styles();