Табы с индикатором
UI-классика Голографическая карточка →

Карточки и UI

Табы с индикатором

Белая пилюля доезжает до активной вкладки пружиной с лёгким перелётом.

Щёлкайте вкладки.

Контент вкладки «Дизайн» — заглушка. Индикатор доехал сюда пружиной.

Код
<div class="tabs">
  <span class="ind"></span>
  <button class="on">Один</button>
  <button>Два</button>
  <button>Три</button>
</div>

<style>
.tabs { position: relative; display: flex; gap: 4px;
  background: #181c24; border-radius: 999px; padding: 5px; }
.tabs button { position: relative; z-index: 2; background: none;
  border: none; border-radius: 999px; padding: 11px 22px;
  color: #8b94a1; transition: color .3s; }
.tabs button.on { color: #101318; }
.ind { position: absolute; top: 5px; bottom: 5px; z-index: 1;
  background: #eef1f6; border-radius: 999px;
  transition: left .45s cubic-bezier(.34,1.4,.44,1),
              width .45s cubic-bezier(.34,1.4,.44,1); }  /* пружина */
</style>

<script>
var wrap = document.querySelector(".tabs");
var ind = wrap.querySelector(".ind");
function move(btn) {
  ind.style.left = btn.offsetLeft + "px";
  ind.style.width = btn.offsetWidth + "px";
}
move(wrap.querySelector(".on"));
wrap.querySelectorAll("button").forEach(function (b) {
  b.addEventListener("click", function () {
    wrap.querySelector(".on").classList.remove("on");
    b.classList.add("on");
    move(b);
  });
});
</script>
Промпт для ИИ
Сделай табы с ездящим индикатором: контейнер-пилюля с кнопками, под ними absolute-индикатор (top/bottom 5px, скруглённый); по клику JS ставит индикатору left = offsetLeft и width = offsetWidth активной кнопки; transition 0.45s по пружинной кривой cubic-bezier(0.34,1.4,0.44,1) — индикатор доезжает с лёгким перелётом. Активная кнопка меняет цвет текста под индикатор. Пересчитывать позицию на resize.