biofriction-wp-theme/node_modules/foundation-sites/scss/components/_dropdown-menu.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;
}
}
}