@import '~app/components/ui/colors.scss'; @import '~app/components/ui/fonts.scss'; $dropdownPadding: 15px; @mixin dropdown-theme($themeName, $backgroundColor) { .#{$themeName} { composes: dropdown; background-color: $backgroundColor; .menuItem:hover, &:hover { background-color: lighter($backgroundColor); } &:active, &.opened { background-color: darker($backgroundColor); } } } .dropdown { display: inline-block; box-sizing: border-box; height: 50px; padding-inline-start: $dropdownPadding; // 28px - ширина иконки при заданном размере шрифта padding-inline-end: $dropdownPadding * 2 + 28px; position: relative; font-family: $font-family-title; color: $defaultButtonTextColor; font-size: 18px; line-height: 50px; text-decoration: none; cursor: pointer; transition: background-color 0.25s; &:focus { outline: none; } } .label { display: block; white-space: nowrap; text-overflow: ellipsis; overflow: hidden; text-align: start; } .opened { } .toggleIcon { composes: selecter from '~app/components/ui/icons.scss'; position: absolute; inset-inline-end: $dropdownPadding; top: 16px; font-size: 17px; transition: inset-inline-end 0.3s cubic-bezier(0.23, 1, 0.32, 1); // easeOutQuint // TODO: right now transition property doesn't support the bidirectional value. // See https://github.com/gasolin/postcss-bidirection/issues/25. // noinspection CssOverwrittenProperties Graceful degradation transition: right 0.3s cubic-bezier(0.23, 1, 0.32, 1); html[dir='rtl'] & { transition: left 0.3s cubic-bezier(0.23, 1, 0.32, 1); } .dropdown:hover & { inset-inline-end: $dropdownPadding - 5px; } .dropdown:active &, .dropdown.opened & { inset-inline-end: $dropdownPadding + 5px; } } .block { display: block; width: 100%; .menu { width: 100%; } } .menu { position: absolute; top: 60px; inset-inline-start: 0; z-index: 10; width: 120%; background: #fff; border: 1px solid #ddd; transition: 0.5s ease; transition-property: opacity, visibility; opacity: 0; visibility: hidden; .dropdown.opened & { opacity: 1; visibility: visible; } } .menuItem { composes: label; height: 50px; padding: 0 13px; overflow: hidden; text-overflow: ellipsis; color: #444; line-height: 50px; font-size: 18px; font-family: $font-family-title; border-bottom: 1px solid #ebe8df; cursor: pointer; transition: 0.25s; &:hover { color: #fff; } } @include dropdown-theme('green', $green);