280 lines
6.4 KiB
SCSS
280 lines
6.4 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;
|
|
|
|
/// Sets dropdown menu arrow size if arrow is used.
|
|
/// @type Length
|
|
$dropdownmenu-arrow-size: 6px !default;
|
|
|
|
/// Sets dropdown menu arrow padding for aligning the arrow correctly.
|
|
/// @type Length
|
|
$dropdownmenu-arrow-padding: 1.5rem !default;
|
|
|
|
/// Minimum width of dropdown sub-menus.
|
|
/// @type Length
|
|
$dropdownmenu-min-width: 200px !default;
|
|
|
|
/// Background color for top level items.
|
|
/// @type Color
|
|
$dropdownmenu-background: null !default;
|
|
|
|
/// Background color for dropdowns.
|
|
/// @type Color
|
|
$dropdownmenu-submenu-background: $white !default;
|
|
|
|
/// Padding for top level items.
|
|
/// @type Number
|
|
$dropdownmenu-padding: $global-menu-padding !default;
|
|
|
|
/// Sets dropdown menu nested margin
|
|
/// @type Number
|
|
$dropdownmenu-nested-margin: 0 !default;
|
|
|
|
/// Padding for sub-menu items.
|
|
/// @type Number
|
|
$dropdownmenu-submenu-padding: $dropdownmenu-padding !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);
|
|
|
|
/// Text color of an active dropdown menu item. Explicit override for menu defaults
|
|
/// @type Color
|
|
$dropdown-menu-item-color-active: get-color(primary) !default;
|
|
|
|
/// Background color of an active dropdown menu item. Explicit override for menu defaults
|
|
/// @type Color
|
|
$dropdown-menu-item-background-active: transparent !default;
|
|
|
|
@mixin zf-dropdown-left-right-arrows {
|
|
> a::after {
|
|
#{$global-right}: 14px;
|
|
}
|
|
|
|
&.opens-left > a::after {
|
|
@include css-triangle($dropdownmenu-arrow-size, $dropdownmenu-arrow-color, left);
|
|
right: auto;
|
|
left: 5px;
|
|
}
|
|
|
|
&.opens-right > a::after {
|
|
@include css-triangle($dropdownmenu-arrow-size, $dropdownmenu-arrow-color, right);
|
|
}
|
|
}
|
|
|
|
@mixin dropdown-menu-direction($dir: horizontal) {
|
|
@if $dir == horizontal {
|
|
> li.opens-left { // sass-lint:disable-line no-qualifying-elements
|
|
> .is-dropdown-submenu {
|
|
top: 100%;
|
|
right: 0;
|
|
left: auto;
|
|
}
|
|
}
|
|
|
|
> li.opens-right { // sass-lint:disable-line no-qualifying-elements
|
|
> .is-dropdown-submenu {
|
|
top: 100%;
|
|
right: auto;
|
|
left: 0;
|
|
}
|
|
}
|
|
|
|
@if $dropdownmenu-arrows {
|
|
> li.is-dropdown-submenu-parent > a { // sass-lint:disable-line no-qualifying-elements
|
|
position: relative;
|
|
padding-#{$global-right}: $dropdownmenu-arrow-padding;
|
|
}
|
|
|
|
> li.is-dropdown-submenu-parent > a::after { // sass-lint:disable-line no-qualifying-elements
|
|
@include css-triangle($dropdownmenu-arrow-size, $dropdownmenu-arrow-color, down);
|
|
#{$global-right}: 5px;
|
|
#{$global-left}: auto;
|
|
margin-top: -1 * ($dropdownmenu-arrow-size / 2);
|
|
}
|
|
}
|
|
}
|
|
@else if $dir == vertical {
|
|
> li {
|
|
.is-dropdown-submenu {
|
|
top: 0;
|
|
}
|
|
|
|
&.opens-left {
|
|
> .is-dropdown-submenu {
|
|
top: 0;
|
|
right: 100%;
|
|
left: auto;
|
|
}
|
|
}
|
|
|
|
&.opens-right {
|
|
> .is-dropdown-submenu {
|
|
right: auto;
|
|
left: 100%;
|
|
}
|
|
}
|
|
|
|
@if $dropdownmenu-arrows {
|
|
@include zf-dropdown-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;
|
|
}
|
|
|
|
// Top-level item
|
|
> li > a {
|
|
background: $dropdownmenu-background;
|
|
padding: $dropdownmenu-padding;
|
|
}
|
|
|
|
// Top-level item active state
|
|
> li.is-active > a {
|
|
background: $dropdown-menu-item-background-active;
|
|
color: $dropdown-menu-item-color-active;
|
|
}
|
|
|
|
.no-js & ul {
|
|
display: none;
|
|
}
|
|
|
|
.nested.is-dropdown-submenu {
|
|
@include menu-nested($dropdownmenu-nested-margin);
|
|
}
|
|
|
|
&.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%;
|
|
right: 0;
|
|
left: auto;
|
|
}
|
|
}
|
|
}
|
|
|
|
.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;
|
|
#{$global-left}: auto;
|
|
margin-top: -1 * $dropdownmenu-arrow-size;
|
|
}
|
|
|
|
&.opens-inner > .is-dropdown-submenu {
|
|
|
|
top: 100%;
|
|
@if $global-text-direction == 'rtl' {
|
|
right: auto;
|
|
}
|
|
@else {
|
|
left: auto;
|
|
}
|
|
}
|
|
|
|
&.opens-left > .is-dropdown-submenu {
|
|
right: 100%;
|
|
left: auto;
|
|
}
|
|
|
|
&.opens-right > .is-dropdown-submenu {
|
|
right: auto;
|
|
left: 100%;
|
|
}
|
|
}
|
|
|
|
.is-dropdown-submenu {
|
|
position: absolute;
|
|
top: 0;
|
|
#{$global-left}: 100%;
|
|
z-index: 1;
|
|
|
|
display: none;
|
|
min-width: $dropdownmenu-min-width;
|
|
|
|
border: $dropdownmenu-border;
|
|
background: $dropdownmenu-submenu-background;
|
|
|
|
.dropdown & a {
|
|
padding: $dropdownmenu-submenu-padding;
|
|
}
|
|
|
|
.is-dropdown-submenu-parent {
|
|
@if $dropdownmenu-arrows {
|
|
@include zf-dropdown-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
|
|
//&: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;
|
|
}
|
|
}
|
|
}
|