light-vue-tree
Version:
* Support drag, check, multiple check, bigData virtual scroll, lazy load, checkStrictly, add and delete node, etc.
172 lines (171 loc) • 3.31 kB
CSS
.transition-drop-enter-active {
animation-duration: 0.3s;
animation-fill-mode: both;
animation-play-state: paused;
}
.transition-drop-leave-active {
animation-duration: 0.3s;
animation-fill-mode: both;
animation-play-state: paused;
}
.transition-drop-enter-active {
animation-name: shTransitionDropIn;
animation-play-state: running;
}
.transition-drop-leave-active {
animation-name: shTransitionDropOut;
animation-play-state: running;
}
.transition-drop-enter-active {
animation-timing-function: ease-in-out;
}
.transition-drop-leave-active {
animation-timing-function: ease-in-out;
}
@keyframes shTransitionDropIn {
0% {
opacity: 0;
transform: scaleY(0.8);
}
100% {
opacity: 1;
transform: scaleY(1);
}
}
@keyframes shTransitionDropOut {
0% {
opacity: 1;
transform: scaleY(1);
}
100% {
opacity: 0;
transform: scaleY(0.8);
}
}
.transform {
transform-origin: center;
transition: 0.2s;
}
.rotate90-enter {
transform: rotate(90deg);
transform-origin: center;
transition: 0.2s;
}
.rotate90-leave {
transform: rotate(0deg);
transform-origin: center;
transition: 0.2s;
}
.transform {
transform-origin: center;
transition: 0.2s;
}
.rotate180-enter {
transform: rotate(180deg);
transform-origin: center;
transition: 0.2s;
}
.rotate180-leave {
transform: rotate(0deg);
transform-origin: center;
transition: 0.2s;
}
.vue-tree {
user-select: none;
position: relative;
}
.vue-tree .drop-indicator {
position: absolute;
left: 0;
right: 0;
height: 1px;
background-color: #409eff;
}
.vue-tree .child-node {
padding-left: 22px;
line-height: 28px;
cursor: pointer;
}
.vue-tree .child-node .node-content {
width: 100%;
position: relative;
display: flex;
align-items: center;
padding-left: 22px;
}
.vue-tree .child-node .node-content .icon {
position: absolute;
display: inline-block;
left: 0px;
font-size: 12px;
}
.vue-tree .child-node .node-content .icon-expand {
color: #1F2E4D;
}
.vue-tree .child-node .node-content .icon-unexpand {
color: #b7beca;
}
.vue-tree .child-node .node-content .inner-wrap {
padding-left: 2px;
display: flex;
align-items: center;
border-radius: 3px;
border: 1px solid transparent;
}
.vue-tree .child-node .node-content .drop-wrap {
border-color: #409eff;
}
.vue-tree .child-node .node-content .drop-inner {
border-bottom: 1px solid #409eff;
}
.vue-tree .child-node .active-li .inner-wrap {
background: #F1F3F5;
}
.vue-tree .child-node .inset {
cursor: move;
}
.vue-tree .child-node .disabled {
cursor: no-drop;
}
.vue-tree .add-node {
cursor: pointer;
}
.vue-tree .is-drop-inner > .node-content > .inner-wrap > .node-name {
background-color: #409eff;
color: #fff;
}
.vue-checkbox {
position: relative;
width: 13px;
height: 13px;
}
.vue-checkbox-input {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: 3;
margin: 0;
background: transparent;
}
.vue-checkbox-indeterminate {
box-sizing: border-box;
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: #0075ff;
z-index: 4;
border-radius: 3px;
}
.vue-checkbox-indeterminate:after {
position: absolute;
content: '';
width: 100%;
height: 2px;
background: #fff;
top: 50%;
left: 0;
}