roadui
Version:
Sleek, intuitive, and powerful front-end framework for faster and easier web development.
275 lines (229 loc) • 5.83 kB
text/less
// 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. 分隔线上下间距调整