Как правильно сверстать табы на флексах?

Сверстать табы с использованием свойств flexbox в CSS довольно просто и удобно.

Для начала, необходимо создать обертку для табов, в которой будут содержаться сами табы и содержимое для каждого таба. Для этого можно использовать контейнер со свойствами display: flex и flex-direction: column.

<div class="tabs">
  <div class="tab">Tab 1</div>
  <div class="tab">Tab 2</div>
  <div class="tab">Tab 3</div>
</div>
<div class="content">
  <div class="content-item">Content 1</div>
  <div class="content-item">Content 2</div>
  <div class="content-item">Content 3</div>
</div>

Затем, необходимо применить свойства flexbox для расположения табов внутри контейнера с помощью свойства justify-content: flex-start, чтобы табы выравнивались в начале контейнера. Также можно использовать свойство align-items: flex-start для выравнивания табов по вертикали.

.tabs {
  display: flex;
  flex-direction: column;
  justify-content: flex-start;
  align-items: flex-start;
}

.tab {
  /* стилизация табов */
}

Далее, при нажатии на каждый таб, необходимо показывать соответствующее содержимое. Для этого можно использовать JavaScript, чтобы добавить класс active на выбранный таб и соответствующему содержимому. Затем, с помощью CSS можно применить свойство order для изменения порядка отображения содержимого в зависимости от выбранного таба.

.content {
  display: flex;
  flex-direction: column;
}

.content-item {
  /* стилизация содержимого */
  order: 1; /* по умолчанию */
}

.tab.active {
  /* стилизация активного таба */
}

.tab.active ~ .content .content-item {
  order: 2; /* изменение порядка содержимого */
}

Таким образом, при клике на таб, будет применяться класс active, который изменит стиль активного таба, а также изменит порядок отображения содержимого для соответствующего таба.