222 lines
4.5 KiB
SCSS
222 lines
4.5 KiB
SCSS
|
// Foundation for Sites by ZURB
|
||
|
// foundation.zurb.com
|
||
|
// Licensed under MIT Open Source
|
||
|
|
||
|
////
|
||
|
/// @group dropdown-menu
|
||
|
////
|
||
|
|
||
|
/// Enables arrows for items with dropdown menus.
|
||
|
/// @type Boolean
|
||
|
$dropdownmenu-arrows: true !default;
|
||
|
|
||
|
/// Sets dropdown menu arrow color if arrow is used.
|
||
|
/// @type Color
|
||
|
$dropdownmenu-arrow-color: $anchor-color !default;
|
||
|
|
||
|
/// Minimum width of dropdown sub-menus.
|
||
|
/// @type Length
|
||
|
$dropdownmenu-min-width: 200px !default;
|
||
|
|
||
|
/// Background color for dropdowns.
|
||
|
/// @type Color
|
||
|
$dropdownmenu-background: $white !default;
|
||
|
|
||
|
/// Border for dropdown sub-menus.
|
||
|
/// @type List
|
||
|
$dropdownmenu-border: 1px solid $medium-gray !default;
|
||
|
|
||
|
// Border width for dropdown sub-menus.
|
||
|
// Used to adjust top margin of a sub-menu if a border is used.
|
||
|
// @type Length
|
||
|
$dropdownmenu-border-width: nth($dropdownmenu-border, 1);
|
||
|
|
||
|
@mixin left-right-arrows {
|
||
|
> a::after {
|
||
|
#{$global-right}: 14px;
|
||
|
margin-top: -3px;
|
||
|
}
|
||
|
|
||
|
&.opens-left > a::after {
|
||
|
@include css-triangle(5px, $dropdownmenu-arrow-color, left);
|
||
|
}
|
||
|
|
||
|
&.opens-right > a::after {
|
||
|
@include css-triangle(5px, $dropdownmenu-arrow-color, right);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@mixin dropdown-menu-direction($dir: horizontal) {
|
||
|
@if $dir == horizontal {
|
||
|
> li.opens-left {
|
||
|
> .is-dropdown-submenu {
|
||
|
left: auto;
|
||
|
right: 0;
|
||
|
top: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
> li.opens-right {
|
||
|
> .is-dropdown-submenu {
|
||
|
right: auto;
|
||
|
left: 0;
|
||
|
top: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@if $dropdownmenu-arrows {
|
||
|
> li.is-dropdown-submenu-parent > a {
|
||
|
padding-#{$global-right}: 1.5rem;
|
||
|
position: relative;
|
||
|
}
|
||
|
|
||
|
> li.is-dropdown-submenu-parent > a::after {
|
||
|
@include css-triangle(5px, $dropdownmenu-arrow-color, down);
|
||
|
#{$global-right}: 5px;
|
||
|
margin-top: -2px;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
@else if $dir == vertical {
|
||
|
> li {
|
||
|
.is-dropdown-submenu {
|
||
|
top: 0;
|
||
|
}
|
||
|
|
||
|
&.opens-left {
|
||
|
> .is-dropdown-submenu {
|
||
|
left: auto;
|
||
|
right: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.opens-right {
|
||
|
> .is-dropdown-submenu {
|
||
|
right: auto;
|
||
|
left: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@if $dropdownmenu-arrows {
|
||
|
@include left-right-arrows;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
@else {
|
||
|
@warn 'The direction used for dropdown-menu-direction() must be horizontal or vertical.';
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@mixin foundation-dropdown-menu {
|
||
|
.dropdown.menu {
|
||
|
@include dropdown-menu-direction(horizontal);
|
||
|
|
||
|
a {
|
||
|
@include disable-mouse-outline;
|
||
|
}
|
||
|
|
||
|
.no-js & ul {
|
||
|
display: none;
|
||
|
}
|
||
|
|
||
|
&.vertical {
|
||
|
@include dropdown-menu-direction(vertical);
|
||
|
}
|
||
|
|
||
|
@each $size in $breakpoint-classes {
|
||
|
@if $size != $-zf-zero-breakpoint {
|
||
|
@include breakpoint($size) {
|
||
|
&.#{$size}-horizontal {
|
||
|
@include dropdown-menu-direction(horizontal);
|
||
|
}
|
||
|
|
||
|
&.#{$size}-vertical {
|
||
|
@include dropdown-menu-direction(vertical);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.align-right {
|
||
|
.is-dropdown-submenu.first-sub {
|
||
|
top: 100%;
|
||
|
left: auto;
|
||
|
right: 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.is-dropdown-menu.vertical {
|
||
|
width: 100px;
|
||
|
|
||
|
&.align-right {
|
||
|
float: right;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.is-dropdown-submenu-parent {
|
||
|
position: relative;
|
||
|
|
||
|
a::after {
|
||
|
position: absolute;
|
||
|
top: 50%;
|
||
|
#{$global-right}: 5px;
|
||
|
margin-top: -2px;
|
||
|
}
|
||
|
|
||
|
&.opens-inner > .is-dropdown-submenu {
|
||
|
|
||
|
top: 100%;
|
||
|
@if $global-text-direction == 'rtl' {
|
||
|
right: auto;
|
||
|
} @else {
|
||
|
left: auto;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
&.opens-left > .is-dropdown-submenu {
|
||
|
left: auto;
|
||
|
right: 100%;
|
||
|
}
|
||
|
|
||
|
&.opens-right > .is-dropdown-submenu {
|
||
|
right: auto;
|
||
|
left: 100%;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
.is-dropdown-submenu {
|
||
|
display: none;
|
||
|
position: absolute;
|
||
|
top: 0;
|
||
|
#{$global-left}: 100%;
|
||
|
min-width: $dropdownmenu-min-width;
|
||
|
z-index: 1;
|
||
|
background: $dropdownmenu-background;
|
||
|
border: $dropdownmenu-border;
|
||
|
|
||
|
.is-dropdown-submenu-parent {
|
||
|
@if $dropdownmenu-arrows {
|
||
|
@include left-right-arrows;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
@if (type-of($dropdownmenu-border-width) == 'number') {
|
||
|
.is-dropdown-submenu {
|
||
|
margin-top: (-$dropdownmenu-border-width);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
> li {
|
||
|
width: 100%;
|
||
|
}
|
||
|
|
||
|
// [TODO] Cut back specificity
|
||
|
// scss-lint:disable SelectorDepth
|
||
|
//&:not(.js-dropdown-nohover) > .is-dropdown-submenu-parent:hover > &, // why is this line needed? Opening is handled by JS and this causes some ugly flickering when the sub is re-positioned automatically...
|
||
|
&.js-dropdown-active {
|
||
|
display: block;
|
||
|
}
|
||
|
}
|
||
|
}
|