JSFiddle - React, Tailwind, and code Playground
HTML
<button class="button button--flat taskbar__link">Я иконка</button>
<div class="menu">
<div class="menu__caption">Я Заголовок Меню</div>
<label>
<input class="switch__radio"
type="radio"
name="location"
value="journals/materials/income"
>
<span class="switch__button--menu menu__item">Поступление</span>
</label>
<label>
<input class="switch__radio"
type="radio"
name="location"
value="journals/materials/expenses"
>
<span class="switch__button--menu menu__item">Расходование</span>
</label>
<div>
CSS
* {
cursor: default;
-user-select: none;
}
.taskbar__link:focus + .menu {
visibility: visible;
}
.menu {
background: #FFFFFF;
box-shadow: 0 0 3px rgba(0, 0, 0, 0.3);
display: flex;
flex-direction: column;
max-height: 100%;
overflow-y: auto;
xpadding: .5rem;
xposition: absolute;
xtop: 0;
visibility: hidden;
z-index: 2;
}
.menu:hover {
visibility: visible;
}
.menu__item {
background: #FFFFFF;
display: block;
padding: .5rem 1.8rem;
}
.menu__item:hover,
.switch__radio:checked + .switch__button--menu:hover {
background: #1E98D3;
color: #FFFFFF;
cursor: pointer;
}
.menu__item:active {
background: #0E88C3;
color: #EFEFEF;
}
.switch__radio:checked + .switch__button--menu {
background: #EFEFEF;
}
.menu__item--active::before,
.switch__radio:checked + .switch__button--menu::before {
content: "•";
font-size: .8rem;
margin-left: -1.5rem;
padding: .5rem .5rem .5rem .2rem;
}
.switch__radio[type=radio] {
display: none;
}
.menu__caption {
background: #672F89;
display: block;
padding-left: 0;
padding-right: 0;
padding: .5rem;
position: relative;
text-align: center;
z-index: 1;
border-bottom: 1px solid #672F89;
border-top: 1px solid #672F89;
color: #FFFFFF;
}