zui
Version:
一个基于 Bootstrap 深度定制开源前端实践方案,帮助你快速构建现代跨屏应用。
280 lines (229 loc) • 5.21 kB
text/less
/// ========================================================================
/// ZUI: tree.less
/// http://openzui.com
/// ========================================================================
/// Copyright 2016 cnezsoft.com; Licensed MIT
/// ========================================================================
// Tree view
.tree {
padding-left: 0;
ul {
display: none;
padding-left: 0;
position: relative;
}
li {
list-style: none;
position: relative;
padding: 2px 0 2px 20px;
&:before {
display: block;
content: ' ';
width: 3px;
height: 3px;
background-color: #999;
position: absolute;
left: 8px;
top: 10px;
}
&.has-list:before { display: none; }
> .list-toggle {
position: absolute;
left: 0;
top: -1px;
width: 20px;
line-height: 24px;
text-align: center;
color: @color-gray;
cursor: pointer;
z-index: 10;
&:before { content: @icon-check-plus; }
&:hover,
&:active {
color: @link-hover-color;
}
}
&.open {
> ul { display: block; }
> .list-toggle:before { content: @icon-check-minus; }
}
}
}
.tree-actions {
display: inline-block;
margin-left: 5px;
opacity: 0;
transition: opacity 0.1s;
}
.tree-action {
display: inline-block;
margin-left: 5px;
color: @color-gray;
&:hover,
&:active {
text-decoration: none;
}
}
.tree li:hover > .tree-actions,
.tree-item-wrapper:hover > .tree-actions {
opacity: 1;
}
.tree-drag-holder {
opacity: 0.4;
background-color: @color-pale;
}
.tree .sort-handler { cursor: move; }
.tree-animate {
ul {
opacity: 0;
transform: scale(1, .5);
.transition-fast(opacity, transform);
}
li {
&.open.in {
> ul {
transform: scale(1, 1);
opacity: 1;
}
}
}
&.tree-lines li.has-list.open > ul:after {left: -11px; top: -5px; bottom: 12px;}
}
.tree-lines {
ul > li {
&:after {
display: block;
position: absolute;
content: ' ';
border-top: 1px dotted #999;
top: 11px;
left: -10px;
z-index: 1;
width: 22px;
}
&:before,
&.has-list:before {
background: none;
content: ' ';
display: block;
position: absolute;
width: auto;
height: auto;
border: none;
border-left: 1px dotted #999;
top: -12px;
bottom: 12px;
left: -11px;
}
&:last-child:before {
bottom: auto;
height: 23px;
}
&:first-child:before {
top: -5px;
}
&.tree-single-item:before {
height: 19px;
}
&.has-list:after {
width: 14px;
}
&.drag-shadow:after {display: none}
}
}
.tree-folders {
li > .list-toggle:before {content: '\e6ef'}
li.open > .list-toggle:before {content: '\e6f0'}
&.tree-lines ul > li:first-child:before {top: -6px;}
&.tree-lines li.has-list.open > ul:after {top: 16px}
ul > li.has-list:after {width: 13px}
ul > li.has-list.open:after {width: 15px}
}
.tree-chevrons {
li > .list-toggle:before {content: '\e710'}
li.open > .list-toggle:before {content: '\e712'}
li:before {background-color: @color-gray-light; width: 10px; height: 10px; border-radius: 5px; left: 4px; top: 6px;}
ul > li:after {width: 13px}
}
.tree-angles {
li > .list-toggle:before {content: '\e6e1'}
li.open > .list-toggle:before {content: '\e6e3'}
ul > li.has-list:after {width: 15px}
}
// Tree menu
.tree-menu {
border: 1px solid @nav-primary-border-color;
border-radius: @border-radius-base;
overflow: hidden;
li {
padding: 0;
&:before {display: none;}
> a {
margin-bottom: -1px;
color: @color-fore;
padding: 8px;
display: block;
> .icon {
color: inherit;
opacity: .6;
display: inline-block;
width: 20px;
text-align: left;
}
&:hover,
&:active,
&:focus {
> .icon {
opacity: .9;
}
text-decoration: none;
background-color: rgba(0,0,0,.04);
color: @link-hover-color;
}
}
.list-toggle {
left: auto;
right: 4px;
top: 6px;
width: 24px;
height: 24px;
transition: all 0.3s;
.opacity(0.45);
&:before {
content: @icon-chevron-right;
}
}
&.open > .list-toggle {
transform: rotate(90deg);
.opacity(0.75);
&:before {
content: @icon-chevron-right;
}
}
> ul {
background-color: rgba(0,0,0,.04);
}
li a {
padding-left: 28px;
border-top-color: transparent;
border-bottom-color: transparent;
}
li li a {padding-left: 48px;}
li li li a {padding-left: 68px;}
&.active > a {
background-color: @component-active-bg;
border-color: @component-active-bg;
color: @component-active-color;
}
&.active > .list-toggle {
color: @component-active-color;
}
}
> li > a {
border: 1px solid transparent;
border-bottom-color: @nav-primary-border-color;
}
> li.open + li > a {
border-top-color: @nav-primary-border-color;
}
}