infogo-tree
Version:
A vue tree component using virtual list.
234 lines (213 loc) • 5.79 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: 28px;
color: @ctree-color-title;
.displayValue{
padding-left: 15px;
display: inline-block;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
width: 100%;
}
}
&-placeholder {
color: @ctree-color-input-placeholder;
}
&_focus {
border-color: @ctree-color-input-border;
&.ctree-tree-search__input{
border-color: @ctree-color-input-border;
}
// box-shadow: 0 0 0 2px fade(@ctree-color-primary, 20%);
}
}
// 图标
&-icon {
@icon-size: 16px;
.icon () {
position: absolute;
top: 11px;
right: 16px;
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: #606266;
// position: absolute;
// top: @diff / 2;
// left: @offset;
width: 100%;
position: absolute;
height: 1px;
background: #606266;
content: "";
top: 9px;
left: 0;
}
.icon();
// border-radius: 50%;
// // background-color: @ctree-color-sub;
// overflow: hidden;
// transform: scale(@scale) rotate(45deg);
// display: none;
width: 14px;
height: 16px;
cursor: pointer;
float: right;
position: absolute;
overflow: hidden;
background-color: #fff;
// margin-top: 10px;
display: none;
top: 10px;
&::before {
.pseudo();
transform: rotate(45deg);
-ms-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
-o-transform: rotate(45deg);
}
&::after {
.pseudo();
// transform: rotate(90deg);
transform: rotate(134deg);
-ms-transform: rotate(134deg);
-moz-transform: rotate(134deg);
-webkit-transform: rotate(134deg);
-o-transform: rotate(134deg);
}
}
}
&-input:hover &-icon-clear {
display: block;
right: 16px;
}
&-input:hover &-icon-only {
display: none;
}
}
// 下拉框
&__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;
}
}
}
}
.ctree-tree-drop__wrapper.selectable{
.ctree-tree-drop__dropdown{
.ctree-tree-search__tree-wrapper{
.ctree-tree__wrapper{
.ctree-tree-node__wrapper{
.ctree-tree-node__node-body{
padding: 0 8px;
border-radius: 4px;
&:hover {
background-color: #f6f6f8;
}
.ctree-tree-node__title_selected{
width: 100%;
}
&.ctree-tree-node__body_selected{
background-color: @ctree-color-primary;
.ctree-tree-node__title_selected{
color: #fff;
}
}
.ctree-tree-node__square{
display: none;
}
}
}
}
}
}
}
.ctree-tree-search__tree-wrapper-checkAll{
height: 100%;
.ctree-tree__wrapper{
height: calc(100% - 22px);
}
}
// 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();