UNPKG

kui-vue

Version:

A lightweight desktop UI component library suitable for Vue.js 2.

746 lines (633 loc) 15.2 kB
@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 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); user-select: none; box-sizing: border-box; &-item-divider { height: 1px; margin: 4px 16px; overflow: hidden; line-height: 0; background-color: var(--kui-color-border); } .k-menu-title-content, .k-menu-submenu-title-content { overflow: hidden; text-overflow: ellipsis; opacity: 1; white-space: nowrap; transition: font-size 0.3s ease-in-out; line-height: 1.571; } .k-menu-item-icon { margin-right: 8px; font-size: 14px; transition: font-size 0.3s cubic-bezier(0.645, 0.045, 0.355, 1); } &-submenu-arrow { transition: all 0.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 24px 10px 12px; box-sizing: border-box; cursor: pointer; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; position: relative; transition: border 0.3s ease-in-out; list-style: none; height: 40px; display: flex; align-items: center; } .k-dropdown-menu-item { height: 32px; margin: 4px; border-radius: var(--kui-border-radius); } .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; &::before { position: absolute; inset: 0; background-color: transparent; content: ""; } &:hover { text-decoration: none; } } .k-dropdown-menu-item-active { background-color: var(--kui-color-hover); } .k-dropdown-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 { &:hover { border-color: transparent; } * { color: var(--kui-color-disabled); cursor: not-allowed; } } } .k-dropdown-menu, .k-dropdown-menu-submenu-sub { box-shadow: 0 1px 6px rgba(0, 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 24px 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-active); } } .k-dropdown-menu-item-disabled, .k-dropdown-menu-submenu-disabled { * { color: var(--kui-color-disabled); 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 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); } &:active { background: var(--kui-color-active); } } .k-menu-submenu-active .k-menu-submenu-title:active { background: var(--kui-color-active); } .k-menu-submenu-title { padding: 10px 36px 10px 12px; box-sizing: border-box; position: relative; margin: 4px; border-radius: var(--kui-border-radius); .k-menu-submenu-arrow { // mode inline position: absolute; right: 8px; top: 50%; transform: translateY(-50%); &::after, &::before { content: ""; position: absolute; width: 6px; height: 1.5px; background-color: currentcolor; border-radius: 6px; transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); } &::before { transform: rotate(45deg) translateX(-2.5px); } &::after { transform: rotate(-45deg) translateX(2.5px); } } &:hover { background-color: var(--kui-color-hover); } &:active { background-color: var(--kui-color-active); } } .k-menu-submenu-sub { transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); overflow: hidden; position: static; } > .k-menu-submenu-opened > .k-menu-submenu-title > .k-menu-submenu-arrow { transform: translateY(-2px); &::before { transform: rotate(-45deg) translateX(-2.5px); } &::after { transform: rotate(45deg) translateX(2.5px); } } //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 24px 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-active); } } > .k-menu-submenu > .k-menu-submenu-title > .k-menu-submenu-arrow { position: absolute; right: 8px; margin: 0; top: 50%; // transform: translateY(-50%) rotate(-90deg); &::after, &::before { content: ""; position: absolute; width: 6px; height: 1.5px; background-color: currentcolor; border-radius: 6px; transition: all 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); } &::before { transform: rotate(45deg) translateY(-2.5px); } &::after { transform: rotate(-45deg) translateY(2.5px); } } } &-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 { padding: 10px 0; box-sizing: border-box; } .k-menu-submenu-title { padding: 10px 0; box-sizing: border-box; } .k-menu-submenu { .k-menu-item, .k-menu-submenu { display: block; } .k-menu-submenu { position: relative; .k-menu-submenu-sub { top: 0; 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-inline-collapsed { width: 80px; > .k-menu-item, > .k-menu-submenu > .k-menu-submenu-title { text-overflow: clip; transition: padding 0.2s 0.2s cubic-bezier(0.215, 0.61, 0.355, 1); padding: 0 calc(50% - 12px); > .k-menu-item-icon { transition: font-size 0.2s cubic-bezier(0.215, 0.61, 0.355, 1); font-size: 16px; } > .k-menu-title-content, > .k-menu-submenu-title-content { opacity: 0; } } > .k-menu-submenu { > .k-menu-submenu-title { .k-menu-title-content { opacity: 0; } .k-menu-submenu-arrow { opacity: 0; } } } } .k-menu-submenu-popup, .k-dropdown-menu-submenu-popup { position: absolute; z-index: 1001; > .k-menu-submenu-sub, > .k-dropdown-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, 0.2); border-radius: var(--kui-border-radius-outer); background-color: var(--kui-color-back-10); border: 1px solid var(--kui-color-border); > .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-collapsed { 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: font-size 0.3s ease-in-out; margin-right: 0; } .k-menu-submenu-arrow { opacity: 0; } .k-menu-title-content, > .k-menu-submenu-title-content { opacity: 0; flex: auto; min-width: 0; } } @keyframes k-menu-zoom { 0% { transform: scale(0.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(0.215, 0.61, 0.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(0.215, 0.61, 0.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 0.3s; } .k-dropdown-leave-active { animation: drop-down 0.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 0.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(0.215, 0.61, 0.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(0.215, 0.61, 0.355, 1) reverse; } &[k-placement="top-left"], &[k-placement="top-right"], &[k-placement="bottom-left"], &[k-placement="bottom-right"] { animation: drop-down 0.3s reverse; } } .k-dropdown-menu-submenu-title-content{ width: calc(100% - 20px); flex: 1; } .k-dropdown-menu-submenu-arrow { position: absolute; // top: 50%; right: 6px; margin: 0px; &::after, &::before { content: ""; background-color: currentcolor; width: 6px; height: 1.5px; position: absolute; border-radius: 6px; transition: 0.3s cubic-bezier(0.215, 0.61, 0.355, 1); } &::after { transform: rotate(-45deg) translateY(2.5px); } &::before { transform: rotate(45deg) translateY(-2.5px); } } .k-collapse-slide-enter-active { animation: slide 0.2s ease-in-out; animation-fill-mode: both; } .k-collapse-slide-leave-active { animation: slide 0.2s 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; } }