// Menus https://www.google.com/design/spec/components/menus.html#menus-specs // Dropdown buttons (mobile and desktop) https://www.google.com/design/spec/components/buttons.html#buttons-dropdown-buttons @mixin menu-bottom-left { top: 100%; left: 0; transform-origin: 0 0; } @mixin menu-bottom-right { right: 0; left: auto; transform-origin: 100% 0; } .dropdown-menu { display: block; // utilize transition transform instead of flipping display padding: .25rem 0; border: 0; opacity: 0; transition: transform $bmd-menu-expand-duration $bmd-animation-curve-default, opacity $bmd-menu-fade-duration $bmd-animation-curve-default; transform: scale(0); transform-origin: 0 0; will-change: transform; @include media-breakpoint-up(md) { padding: .5rem 0; } .open > & { //z-index: 999; opacity: 1; transform: scale(1); } // Default the alignment of the dropdown to originate on the bottom right of the button @include menu-bottom-right(); // FIXME: bootstrap alignment issue - https://github.com/twbs/bootstrap/issues/18852 &.dropdown-menu-left { @include menu-bottom-left(); } &.dropdown-menu-right { @include menu-bottom-right(); } //&.dropdown-menu-top-left { // top: auto; // bottom: 0; // needs to be overridden with the toggle-button height, see bmd-btn-icon above // transform-origin: 0 100%; //} // //&.dropdown-menu-top-right { // top: auto; // right: 0; // bottom: 0; // needs to be overridden with the toggle-button height, see bmd-btn-icon above // left: auto; // transform-origin: 100% 100%; //} // https://www.google.com/design/spec/components/menus.html#menus-specs .dropdown-item { // used to properly size the ripple container position: relative; display: flex; flex-flow: row wrap; align-items: center; min-width: $bmd-menu-item-min-width; max-width: $bmd-menu-item-max-width; min-height: $bmd-menu-item-min-height; padding: $bmd-menu-item-padding-top $bmd-menu-item-padding-right $bmd-menu-item-padding-bottom $bmd-menu-item-padding-left; // FIXME: multi-line menu word wrapping doesn't work - see the maximum width example in menus.md overflow: hidden; line-height: $bmd-menu-line-height; text-overflow: ellipsis; word-wrap: break-word; // Simple menus always maintain a 16dp margin (phone) or 24dp margin (tablet) to the left and right edges of the screen. @include media-breakpoint-up(md) { padding-right: $bmd-menu-item-padding-right-md; padding-left: $bmd-menu-item-padding-left-md; } } } // this could be in a .btn-group or .dropdown .dropdown-toggle { &.bmd-btn-icon, &.bmd-btn-fab { // remove the dropdown icon &::after { display: none; } ~ .dropdown-menu { &.dropdown-menu-top-left, &.dropdown-menu-top-right { bottom: $bmd-btn-icon-size; // push up the bottom of the menu the height of the button } } } &.bmd-btn-fab-sm { ~ .dropdown-menu { &.dropdown-menu-top-left, &.dropdown-menu-top-right { bottom: $bmd-btn-fab-size-sm; // push up the bottom of the menu the height of the button } } } &.bmd-btn-icon { ~ .dropdown-menu { // collapse some spacing margin: 0; } } }