Flexbox, как сохранить минимум 2 столбца на 400 пикселей?

https://codepen.io/leon-yum/pen/XYpgzj?editors=1100

Я пытаюсь убедиться, что на мобильном устройстве (400 пикселей и ниже) моя сетка flexbox придерживается 2 столбцов / ящиков. Однако что бы я ни делал, либо он привязывается к 1 столбцу, либо каждая строка остается в 3 или 4 столбцах соответственно.

Ожидается при ширине 400 пикселей:

Flexbox, как сохранить минимум 2 столбца на 400 пикселей?

Полученные результаты:

Flexbox, как сохранить минимум 2 столбца на 400 пикселей?

HTML

<div class = "flex-grid-thirds">
  <div class = "col">This little piggy went to market.</div>
  <div class = "col">This little piggy stayed home.</div>
  <div class = "col">This little piggy had roast beef.</div>
</div>

<div class = "flex-grid-four">
  <div class = "col">This little piggy went to market.</div>
  <div class = "col">This little piggy stayed home.</div>
  <div class = "col">This little piggy had roast beef.</div>
  <div class = "col">This little piggy had roast beef.</div>
</div>

CSS

.flex-grid-thirds,
.flex-grid-four {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
}

.flex-grid-thirds .col {
  width: 32%;
}

.flex-grid-four .col {
  width: 24%;
}

@media (max-width: 400px) {
  .flex-grid-thirds,
  .flex-grid-four {
    .col {
      width: 40%;
    }
  }
}

* {
  box-sizing: border-box;
}
body {
  padding: 20px;
}
.flex-grid { 
  margin: 0 0 20px 0;
}
.col {
  background: salmon;
  padding: 20px;
}

разметка должна быть такой?

Zohir Salak 09.06.2018 19:16
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
1
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот рабочее решение: https://codepen.io/anon/pen/vrgZVa?editors=1100. Все, что вам нужно, это просто поместить все элементы в один элемент оболочки (теперь у вас есть 2 элемента) и присвоить этой оболочке свойство flex-wrap: wrap. И еще одно, что нужно сделать: указать ширину вашим элементам (желательно проценты), и если вы дадите им width: 50%, будет 2 столбца, если width: 33% - 3 столбца и так далее. Я не касался полей и такой мелочи, просто продемонстрирую, о чем вы просили:

.flex-grid {
  display: flex;
  justify-content: space-between;
  margin-bottom: 20px;
  flex-wrap: wrap;
}

.flex-grid-thirds .col {
  width: 32%;
}

.flex-grid-four .col {
  width: 24%;
}

@media (max-width: 400px) {
  .flex-grid {
    .col {
      width: 50%;
    }
  }
}

* {
  box-sizing: border-box;
}

body {
  padding: 20px;
}
.flex-grid { 
  margin: 0 0 20px 0;
}
.col {
  background: salmon;
  padding: 20px;
}
<div class = "flex-grid">
  <div class = "col">This little piggy went to market.</div>
  <div class = "col">This little piggy stayed home.</div>
  <div class = "col">This little piggy had roast beef.</div>
  <div class = "col">This little piggy went to market.</div>
  <div class = "col">This little piggy stayed home.</div>
  <div class = "col">This little piggy had roast beef.</div>
  <div class = "col">This little piggy had roast beef.</div>
</div>

Другие вопросы по теме