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;
}