Хорошо, прежде всего вы перепутали "float" и "flex".
Когда вы создаете макет Flex, бесполезно что-либо плавать.
так что затем, чтобы понять это:
display:flex;
работает для точно следующих детей, а не для более глубоких. Вот почему ваша внешняя граница имеет одинаковую высоту (например, вы использовали ее на «col-xs-12». То, что вы на самом деле хотите иметь одинаковую высоту, это ваша «коробка» -> здесь я добавил высоту: 100%, что в данном случае работает с flexbox.
В части html я добавил класс «column» для всех этих столбцов, здесь вы должны продолжить и определить стили, которые всегда учитываются (отступы, границы и т. Д.)
С этими стилями у вас уже есть желаемые высоты и прочее.
Теперь вы хотите, чтобы он стал отзывчивым, поэтому вы сделали стили на 50% / 50% / 100%, что уже нормально. Как вы уже заметили, результат: 25% / 25% / 50%.
Это просто то, как flex работает по умолчанию: он помещает всех дочерних элементов в одну строку и вычисляет их ширину до 100% (в верхнем примере делится на 2)
Чтобы сделать макет, который вы хотите использовать:
flex-wrap: wrap;
это заставляет ваш макет выглядеть желаемым образом реагировать.
вот обновленная скрипка: https://jsfiddle.net/smynzw8t/