UNPKG

roadui

Version:

Sleek, intuitive, and powerful front-end framework for faster and easier web development.

275 lines (229 loc) 5.83 kB
// Name: Dropdown // // Description: Define style for dropdown // // Component: `.am-dropdown` // // Sub-objects: `.am-dropdown-toggle` // `.am-dropdown-content` // `.am-dropdown-header` // // Modifiers: `.am-dropdown-flip` // `.am-dropdown-center` // `.am-dropdown-justify` // `.am-dropdown-up` // `.am-dropdown-stack` // `.am-dropdown-navbar` // // States: `.am-active` // `.am-disabled` // // Uses: Animation // // ============================================================================= // Variables // ============================================================================= @dropdown-bg: #fff; @dropdown-border-color: #ddd; @dropdown-divider-bg: #e5e5e5; @dropdown-link-color: @gray-dark; @dropdown-link-hover-color: darken(@gray-dark, 5%); @dropdown-link-hover-bg: #f5f5f5; @dropdown-link-active-color: @component-active-color; @dropdown-link-active-bg: @component-active-bg; @dropdown-link-disabled-color: @gray-light; @dropdown-header-color: @gray-light; @dropdown-caret-color: darken(@dropdown-border-color, 5%); @caret-width-base: 6px; @dropdown-animation: am-slide-top-fixed; // Dropdown mixin // ============================================================================= // Dividers (basically an hr) within dropdowns and nav lists .nav-divider(@color: #e5e5e5) { height: 1px; margin: ((@line-height-computed / 2) - 1) 0; overflow: hidden; background-color: @color; } .@{ns}dropdown { position: relative; display: inline-block; .hook-dropdown; } .@{ns}dropdown-toggle:focus { outline: 0; } .@{ns}dropdown-content { position: absolute; top: 100%; left: 0; z-index: @z-index-dropdown; display: none; float: left; min-width: 160px; padding: 15px; margin: 9px 0 0; text-align: left; line-height: @global-line-height; background-color: @dropdown-bg; border: 1px solid @dropdown-border-color; border-radius: @global-radius; background-clip: padding-box; animation-duration: .15s; .hook-dropdown-content; .angle-base; .angle-up-variant(@dropdown-border-color, @dropdown-bg, 8px); &:before, &:after { left: 10px; top: -8px; pointer-events: none; } &:after { top: -7px; } .@{ns}active > & { display: block; // .animation(@dropdown-animation 0.3s ease-in-out); } :first-child { margin-top: 0; } } // Dropdown Up // ============================================================================= .@{ns}dropdown-up .@{ns}dropdown-content { top: auto; bottom: 100%; margin: 0 0 9px; .hook-dropdown-up; &:before, &:after { border-bottom: none; border-top: 8px solid @dropdown-border-color; top: auto; bottom: -8px; } &:after { bottom: -7px; border-top-color: @dropdown-bg; } } .@{ns}dropdown-flip .@{ns}dropdown-content { left: auto; right: 0; &:before, &:after { left: auto; right: 10px; } } // dropdown menu (ul) // ============================================================================= ul.@{ns}dropdown-content { list-style: none; padding: 5px 0; .hook-dropdown-ul-content; // Aligns the dropdown menu to right &.@{ns}fr { right: 0; left: auto; } // Dividers (basically an hr) within the dropdown .@{ns}divider { .nav-divider(@dropdown-divider-bg); .hook-dropdown-ul-content-divdier; } // Links within the dropdown menu > li > a { display: block; padding: 6px 20px; clear: both; font-weight: normal; color: @dropdown-link-color; white-space: nowrap; &:hover, &:focus { text-decoration: none; color: @dropdown-link-hover-color; background-color: @dropdown-link-hover-bg; .hook-dropdown-ul-content-hover; } } // Active state > .@{ns}active > a { &, &:hover, &:focus { color: @dropdown-link-active-color; text-decoration: none; outline: 0; background-color: @dropdown-link-active-bg; .hook-dropdown-ul-content-active; } } // Disabled state > .@{ns}disabled > a { &, &:hover, &:focus { color: @dropdown-link-disabled-color; .hook-dropdown-ul-content-disabled; } } > .@{ns}disabled > a { &:hover, &:focus { text-decoration: none; background-color: transparent; background-image: none; // Remove CSS gradient .reset-filter(); cursor: not-allowed; .hook-dropdown-ul-content-disabled; } } } // Dropdown section headers .@{ns}dropdown-header { display: block; padding: 6px 20px; font-size: @font-size-xs; color: @dropdown-header-color; .hook-dropdown-header; } // Right aligned dropdown // ============================================================================= .@{ns}fr > .@{ns}dropdown-content { right: 0; left: auto; &:before { right: 10px; left: auto; } } // Dropdown out animation .@{ns}dropdown-animation { animation: am-dropdown-animation .15s ease-out; } @keyframes am-dropdown-animation { 0% { opacity: 1; transform: translateY(0); } 100% { opacity: 0; transform: translateY(-10px); } } // Hooks // ============================================================================= .hook-dropdown() {} .hook-dropdown-content() {} .hook-dropdown-ul-content() {} .hook-dropdown-ul-content-active() {} .hook-dropdown-ul-content-hover() {} .hook-dropdown-ul-content-disabled() {} .hook-dropdown-ul-content-divdier() {} .hook-dropdown-up() {} .hook-dropdown-header() {} // TODO: 1. 分隔线上下间距调整