kui-vue
Version:
A high quality UI Toolkit built on Vue.js 2.0
711 lines (593 loc) • 14.3 kB
text/less
@import '../../styles/var.less';
.k-menu,
.k-dropdown-menu {
display: block;
margin: 0;
padding: 0;
outline: 0;
font-size: 14px;
position: relative;
zoom: 1;
background: var(--kui-color-back);
list-style: none;
color: var(--kui-color-font);
// transition: background-color .3s cubic-bezier(.645, .045, .355, 1), width .3s cubic-bezier(.645, .045, .355, 1);
transition: width .3s cubic-bezier(.645, .045, .355, 1);
user-select: none;
box-sizing: border-box;
// &:after, &:before {
// content: "";
// display: table;
// }
&-item-divider {
height: 1px;
margin: 4px 0;
overflow: hidden;
line-height: 0;
background-color: var(--kui-color-border);
}
// .k-menu-icon-temp {
// display: inline-block;
// width: 20px;
// height: 20px;
// margin-right: 8px;
// flex-shrink: 0;
// }
.k-menu-title-content {
overflow: hidden;
text-overflow: ellipsis;
opacity: 1;
white-space: nowrap;
transition: all .3s ease-in-out;
line-height: 1.571;
}
.k-menu-item-icon {
margin-right: 8px;
font-size: 14px;
transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
&-submenu-arrow {
transition: all .3s;
// position: absolute;
// right: 16px;
margin-left: 6px;
width: 14px;
height: 14px;
text-indent: 0;
}
.k-menu-submenu {
margin: 0;
}
&-item,
.k-menu-submenu-title,
.k-dropdown-menu-item,
.k-dropdown-menu-submenu-title {
padding: 10px 12px;
box-sizing: border-box;
cursor: pointer;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
position: relative;
// transition: font-size .3s cubic-bezier(.215, .61, .355, 1), padding .3s cubic-bezier(.215, .61, .355, 1);
// transition: all .3s cubic-bezier(.215, .61, .355, 1);
transition: border .3s ease-in-out;
list-style: none;
height: 40px;
display: flex;
align-items: center;
}
.k-dropdown-menu-item {
height: 32px;
}
.k-dropdown-menu-submenu-title,
.k-menu-submenu-title {
.k-menu-title-content {
width: calc(100% - 20px);
}
}
//light
.k-menu-item-group-title {
font-size: 12px;
color: var(--kui-color-icon);
}
a {
color: var(--kui-color-font);
text-decoration: none;
&:hover {
text-decoration: none;
}
}
.k-menu-item-active {
// color: var(--kui-color-main);
background-color: var(--kui-color-hover);
}
.k-menu-item-selected {
color: var(--kui-color-main);
background-color: var(--kui-color-selected);
a {
color: var(--kui-color-main);
}
}
>.k-menu-submenu-selected {
// >.k-menu-submenu-active {
>.k-menu-submenu-title {
color: var(--kui-color-main);
}
}
.k-menu-item-disabled,
.k-menu-submenu-disabled {
* {
color: var(--kui-color-disable-color);
cursor: not-allowed;
}
}
}
.k-dropdown-menu {
box-shadow: 0 1px 6px rgba(0, 0, 0, .2);
border-radius: var(--kui-border-radius);
display: inline-block;
.k-dropdown-menu-item,
.k-dropdown-menu-submenu-title {
margin: 4px;
padding: 10px 12px;
box-sizing: border-box;
border-radius: var(--kui-border-radius);
height: 32px;
&:hover {
background-color: var(--kui-color-hover);
}
&:active {
background-color: var(--kui-color-actived);
}
}
.k-dropdown-menu-item-disabled,
.k-dropdown-menu-submenu-disabled {
* {
color: var(--kui-color-disable-color);
cursor: not-allowed;
}
}
}
.k-menu {
//light-end
&-inline {
border-right: 1px solid var(--kui-color-border);
width: 100%;
display: inline-block;
.k-menu-item,
.k-menu-submenu {
line-height: 1;
font-size: 14px;
list-style: none;
}
.k-menu-item-group-title {
padding: 0 16px 0 32px;
box-sizing: border-box;
}
.k-menu {
border: 0;
list-style: none;
margin: 0;
padding: 0;
}
.k-menu-item {
padding: 10px 12px;
// width: calc(100% + 1px);
// width:100%;
box-sizing: border-box;
position: relative;
margin: 4px;
border-radius: var(--kui-border-radius);
display: flex;
align-items: center;
height: 40px;
&::after {
content: '';
position: absolute;
width: 0;
height: 0;
border-right: 3px solid var(--kui-color-main);
top: 50%;
right: 0;
transition: all .3s cubic-bezier(.215, .61, .355, 1);
}
&:active {
background: var(--kui-color-actived);
}
}
.k-menu-submenu-active .k-menu-submenu-title:active {
background: var(--kui-color-actived);
}
.k-menu-submenu {
.k-menu-item {
// padding: 10px 24px 10px 12px;
&:first-child {
margin-top: 0;
}
}
}
.k-menu-submenu-title {
padding: 10px 36px 10px 12px;
box-sizing: border-box;
position: relative;
margin: 0 4px 4px 4px;
border-radius: var(--kui-border-radius);
.k-menu-submenu-arrow {
position: absolute;
right: 16px;
top: 50%;
transform: translateY(-50%);
}
&:hover {
background-color: var(--kui-color-hover);
}
&:active {
background-color: var(--kui-color-actived);
}
}
.k-menu-submenu-sub {
transition: all 0.3s cubic-bezier(.215, .61, .355, 1);
overflow: hidden;
position: static;
}
>.k-menu-submenu-opened>.k-menu-submenu-title>.k-menu-submenu-arrow {
transform: rotate(-180deg) translateY(50%);
}
//light
.k-menu-item-selected {
background-color: var(--kui-color-selected);
&::after {
display: none;
}
}
}
&-vertical {
width: 100%;
border-right: 1px solid var(--kui-color-border);
display: inline-block;
.k-menu-item-selected {
background-color: var(--kui-color-selected);
}
.k-menu-submenu-active,
.k-menu-submenu-selected {
.k-menu-submenu-title {
color: var(--kui-color-main);
}
}
>.k-menu-item,
>.k-menu-submenu {
line-height: 1;
position: relative;
cursor: pointer;
font-size: 14px;
z-index: 3;
list-style: none;
}
.k-menu-item,
.k-menu-submenu-title {
padding: 10px 12px;
margin: 4px;
// height: 40px;
box-sizing: border-box;
line-height: 1;
border-radius: var(--kui-border-radius);
// display: flex;
// align-items: center;
&:hover {
background-color: var(--kui-color-hover);
}
&:active {
background-color: var(--kui-color-actived);
}
}
.k-menu-submenu-sub {
position: absolute;
top: 0;
box-sizing: content-box;
position: absolute;
z-index: 1001;
min-width: 160px;
>.k-menu {
border-radius: var(--kui-border-radius);
border: none;
margin: 0;
list-style: none;
.k-menu-item-group-title {
line-height: 1;
padding: 0 12px;
box-sizing: border-box;
}
.k-menu-item-group-list .k-menu-item {
position: relative;
}
.k-menu-item {
line-height: 1;
&:first-child {
border-top-left-radius: var(--kui-border-radius);
border-top-right-radius: var(--kui-border-radius);
}
&:last-child {
border-bottom-left-radius: var(--kui-border-radius);
border-bottom-right-radius: var(--kui-border-radius);
}
}
}
.k-menu-submenu {
position: relative;
}
}
>.k-menu-submenu>.k-menu-submenu-title>.k-menu-submenu-arrow {
position: absolute;
right: 16px;
margin: 0;
top: 50%;
transform: translateY(-50%);
}
}
&-horizontal {
border-bottom: 1px solid var(--kui-color-border);
white-space: nowrap;
font-size: 0;
line-height: 1;
.k-menu-icon-temp {
display: none;
}
>.k-menu-item,
>.k-menu-submenu {
line-height: 1;
margin: 0 16px;
position: relative;
cursor: pointer;
font-size: 14px;
z-index: 3;
display: inline-block;
list-style: none;
top: 1px;
vertical-align: bottom;
border-bottom: 2px solid transparent;
display: inline-flex;
align-items: center;
min-height: 20px;
}
>.k-menu-item,
>.k-menu-submenu-title {
// margin: 0 16px;
padding: 10px 0;
box-sizing: border-box;
}
.k-menu-submenu-title {
padding: 10px 0;
box-sizing: border-box;
// display: flex;
// align-items: center;
}
.k-menu-submenu {
.k-menu-item,
.k-menu-submenu {
display: block;
}
.k-menu-submenu {
position: relative;
// .k-menu-submenu-arrow {
// transform: rotate(-90deg) translateX(50%);
// top: 50%;
// position: absolute;
// right: 16px;
// }
.k-menu-submenu-sub {
top: 0;
// transform: translateX(100%);
margin-left: 5px;
}
}
}
>.k-menu-submenu-active>.k-menu-submenu-title>.k-menu-submenu-arrow {
transform: rotate(-180deg);
}
.k-menu-item-group-title {
font-size: 12px;
line-height: 1;
padding: 0 12px;
box-sizing: border-box;
}
//light
>.k-menu-item-selected,
>.k-menu-submenu-selected,
>.k-menu-item-active,
>.k-menu-submenu-active {
border-bottom-color: var(--kui-color-main);
background-color: transparent;
}
.k-menu-submenu {
.k-menu-item-selected {
background-color: var(--kui-color-selected);
}
}
}
.k-menu-item-group-list {
margin: 0;
}
}
.k-menu-submenu-popup,
.k-dropdown-menu-submenu-popup {
position: absolute;
z-index: 1001;
>.k-menu-submenu-sub {
box-sizing: content-box;
min-width: 160px;
// margin-left: 5px;
.k-menu-item-group-title {
padding: 0 16px 0 12px;
box-sizing: border-box;
}
.k-menu-item-group-list {
margin: 0;
}
.k-menu {
margin: 0;
box-shadow: 0 1px 6px rgba(0, 0, 0, .2);
border-radius: var(--kui-border-radius);
background-color: var(--kui-color-control-10);
>.k-menu-item {
line-height: 1;
display: flex;
align-items: center;
&:first-child {
border-top-left-radius: var(--kui-border-radius);
border-top-right-radius: var(--kui-border-radius);
}
&:last-child {
border-bottom-left-radius: var(--kui-border-radius);
border-bottom-right-radius: var(--kui-border-radius);
}
}
.k-menu-item-group {
line-height: 1;
&:last-child {
.k-menu-item {
&:last-child {
border-bottom-left-radius: var(--kui-border-radius);
border-bottom-right-radius: var(--kui-border-radius);
}
}
}
}
}
}
.k-menu-submenu {
position: relative;
.k-menu-submenu-sub {
// padding-left: 5px;
left: calc(100% + 5px);
}
}
.k-menu-vertical {
border-right: none;
.k-menu-icon-temp {
display: none;
}
}
}
.k-menu-inline-collapased {
width: 60px;
.k-menu-item,
.k-menu-submenu-title {
// overflow: visible;
// display: block;
padding-left: calc(50% - 12px);
transition: padding 200ms 200ms ease-in-out;
// padding-right: calc(50% - 12px);
}
.k-menu-submenu-selected {
.k-menu-submenu-title {
background-color: var(--kui-color-selected);
}
}
>.k-menu-submenu {
padding: 0;
}
.k-menu-item-icon {
font-size: 16px;
transition: all .3s ease-in-out;
margin-right: 0;
}
.k-menu-submenu-arrow {
opacity: 0;
}
.k-menu-title-content {
opacity: 0;
flex: auto;
min-width: 0;
}
}
@keyframes k-menu-zoom {
0% {
transform: scale(.8);
opacity: 0;
}
100% {
transform: scale(1);
opacity: 1;
}
}
.k-menu-submenu-fade-enter-active,
.k-dropdown-menu-submenu-fade-enter-active {
animation-fill-mode: both;
transform-origin: 0% 0%;
animation: k-menu-zoom 0.2s cubic-bezier(.215, .61, .355, 1);
}
.k-menu-submenu-fade-leave-active,
.k-dropdown-menu-submenu-fade-leave-active {
animation-fill-mode: both;
transform-origin: 0% 0%;
animation: k-menu-zoom 0.2s cubic-bezier(.215, .61, .355, 1) reverse;
}
@keyframes drop-down {
0% {
opacity: 0;
transform: scaleY(0)
}
to {
opacity: 1;
transform: scaleY(1)
}
}
.k-dropdown-enter-active {
animation: drop-down .3s;
}
.k-dropdown-leave-active {
animation: drop-down .3s reverse;
}
.k-dropdown-menu-submenu-popup-enter-active,
.k-menu-submenu-popup-enter-active {
&[k-placement="bottom-left"],
&[k-placement="bottom-right"],
&[k-placement="top-left"],
&[k-placement="top-right"] {
animation: drop-down .3s;
}
&[k-placement="left-bottom"],
&[k-placement="right-top"],
&[k-placement="left-top"],
&[k-placement="right-bottom"] {
animation-fill-mode: both;
animation: k-menu-zoom 0.2s cubic-bezier(.215, .61, .355, 1);
}
}
.k-dropdown-menu-submenu-popup-leave-active,
.k-menu-submenu-popup-leave-active {
&[k-placement="left-bottom"],
&[k-placement="right-top"],
&[k-placement="left-top"],
&[k-placement="right-bottom"] {
animation-fill-mode: both;
animation: k-menu-zoom 0.2s cubic-bezier(.215, .61, .355, 1) reverse;
}
&[k-placement="top-left"],
&[k-placement="top-right"],
&[k-placement="bottom-left"],
&[k-placement="bottom-right"] {
animation: drop-down .3s reverse;
}
}
.k-collaplse-slide-enter-active {
animation: slide 0.15s ease-in-out;
animation-fill-mode: both;
}
.k-collaplse-slide-leave-active {
animation: slide 0.3s ease-in-out reverse;
animation-fill-mode: both;
}
@keyframes slide {
0% {
transform: scaleY(0);
transform-origin: 0% 0%;
opacity: 0;
}
100% {
transform: scaleY(1);
transform-origin: 0% 0%;
opacity: 1;
}
}