accounts-frontend/packages/app/components/ui/form/dropdown.scss
2021-03-26 04:19:04 +01:00

140 lines
2.8 KiB
SCSS

@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);