Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

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

Короткий ответ

Сделайте флекс-колонку по умолчанию и разверните её в строку на широком экране:

<style>
  .row { display: flex; flex-direction: column; gap: 12px; }
  .row div { flex: 1; padding: 12px; background: lavender; }
  @media (min-width: 500px) { .row { flex-direction: row; } }
</style>
 
<div class="row"><div>Photo</div><div>Description</div><div>Price</div></div>

Без медиазапросов

С flex-wrap колонки сами переносятся, когда каждой не хватает минимальной ширины, заданной в flex-basis:

<style>
  .wrap { display: flex; flex-wrap: wrap; gap: 12px; }
  .wrap div { flex: 1 1 180px; padding: 12px; background: honeydew; }
</style>
 
<div class="wrap"><div>Photo</div><div>Description</div></div>

flex: 1 1 180px значит «начни со 180px, расти и сжимайся». Когда два блока по 180px не помещаются, второй уходит на новую строку и растягивается на всю ширину.

Поменять порядок

Если на телефоне картинка должна идти после текста, используйте flex-direction: column-reverse или order. Помните, что клавиатура и экранные дикторы идут по порядку в HTML, поэтому сильно перемешивать нельзя.

Частая ошибка

width: 33% у колонок мешает им встать в столбик: даже в колонке они остаются шириной в треть. Ширину колонок во flexbox задают через flex, а не width.

Функции из этого ответа

  • flex-wrap — Могут ли flex-элементы переноситься на новые строки.
  • flex-direction — Направление главной оси flex-контейнера: элементы в ряд или в столбик.
  • @media — Применяет правила только при заданных условиях — ширине окна, теме системы и других.
  • flex-basis — Начальный размер flex-элемента вдоль главной оси до раздачи свободного места.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.