1. Окружность большого диаметра - большой
div, большой
border-radius, тонкий
border.
2. Пункты меню расположены абсолютным позиционированием один поверх другого, затем с помощью
transform: rotate подвинуты в нужные положения (как в
этом примере, только углы меньше).
3. Затемнение сверху и снизу - это линейный градиент поверх всего этого, в центре он прозрачный, по краям - видимо синий.
4. Центральный (активный) элемент меню при попадании в центр изменяется - из точки увеличивается с помощью
transform: scale иконка, а вокруг нее делается что-то
такое.
5. Соответственно остается прикрутить js-логику: считать углы в зависимости от количества элементов, все это поворачивать (при переходе к новому пункту меню), добавить поддержку клавиатуры (и видимо мышки, чтобы меню проворачивать колесиком) и адаптивность (на маленьких экранах можно всю эту красоту спрятать и оставить пункты меню в столбик).