Как изменить порядок CSS Flexbox

У меня есть гибкий контейнер с элементами flex-direction: row и n, у них нет фиксированной высоты или ширины. На рабочем столе я показываю 2 столбца с точным порядком. На мобильном телефоне это один столбец, но порядок не тот, который мне нужен. В основном я хочу показать элементы из второго столбца после элементов из первого столбца. Как переупорядочить их, чтобы добиться желаемого результата? Вот пример.

На рабочем столе две колонки

item1   item2
item3   item4
item5   item6

Желаемый результат с одним столбцом

item1
item3
item5
item2
item4
item6

Вот html и css

.container {
  display: flex;
  flex-wrap: wrap;
}

.item {
  flex: 1 0 50%;
}

@media only screen and (max-width: 520px) {
  .item {
    flex: 100%;
  }
}
<div class = "container">
  <div class = "item">item1</div>
  <div class = "item">item2</div>
  <div class = "item">item3</div>
  <div class = "item">item4</div>
  <div class = "item">item5</div>
  <div class = "item">item6</div>
</div>

Можете ли вы поделиться соответствующим CSS, пожалуйста?

Maik Lowrey 16.03.2022 08:30

@MaikLowrey, в этом нет ничего необычного, я добавил HTML и CSS к вопросу.

Vladimir Gatev 16.03.2022 08:40

Почему бы вам не поместить два столбца в родительский flex-контейнер и просто передать flex-обертку родителю? Потому что в вашем первом столбце уже элементы расположены по порядку 1,3,5. Итак, как только второй столбец завершится, вы получите желаемый результат. Или вы хотите иметь класс с каждым элементом и т. д., а затем обрабатывать свойство заказа?

Wahab Shah 16.03.2022 08:51

@WahabShah Ваша идея хороша. вы можете показать это как другой ответ :)

Arman Ebrahimi 16.03.2022 09:01

@WahabShah с точки зрения построения HTMl в цикле, это нецелесообразно

Vladimir Gatev 16.03.2022 09:03
Улучшение производительности загрузки с помощью 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
5
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать свойство order с flexbox. Вот ресурс => https://developer.mozilla.org/en-US/docs/Web/CSS/заказ

@media (max-width: 520px) {
  .item:nth-child(1) {
     order: 1;
  }
  
  .item:nth-child(2) {
     order: 4;
  }

  .item:nth-child(3) {
     order: 2;
  }

  .item:nth-child(4) {
     order: 5;
  }

  .item:nth-child(5) {
     order: 3;
  }

  .item:nth-child(6) {
     order: 6;
  }
}

Вы можете использовать flex и order для этого:

.container {
  display: flex;
  flex-wrap: wrap;
  width: 100%;
}

.item {
  width: 50%;
  padding-bottom: 20px;
}

@media screen and (max-width: 800px) {
  .container {
    flex-direction: column;
  }
  .item {
    width: 100%;
  }
  .item3 {
    order: 2;
  }
  .item5 {
    order: 3;
  }
  .item2 {
    order: 4;
  }
  .item4 {
    order: 5;
  }
  .item6 {
    order: 6;
  }
}
<div class = "container">
  <div class = "item item1">item1</div>
  <div class = "item item2">item2</div>
  <div class = "item item3">item3</div>
  <div class = "item item4">item4</div>
  <div class = "item item5">item5</div>
  <div class = "item item6">item6</div>
</div>

Очень хороший! 1up!

Maik Lowrey 16.03.2022 08:49

элементы не закреплены за 6 элементами, поэтому это не сработает

Vladimir Gatev 16.03.2022 09:04

@VladimirGatev посмотри мой ответ. он гибкий.

doğukan 16.03.2022 09:08

@doğukan это то, что я искал, спасибо

Vladimir Gatev 16.03.2022 09:15
Ответ принят как подходящий

Просто добавьте это

  .item:nth-child(2n - 1) {
    order: -1;
  }

.container {
  display: flex;
  flex-wrap: wrap;
}

.item {
  flex: 1 0 50%;
}

@media only screen and (max-width: 520px) {
  .item {
    flex: 100%;
  }

  .item:nth-child(2n - 1) {
    order: -1;
  }
}
<div class = "container">
  <div class = "item">item1</div>
  <div class = "item">item2</div>
  <div class = "item">item3</div>
  <div class = "item">item4</div>
  <div class = "item">item5</div>
  <div class = "item">item6</div>
</div>

Привет. n как рассчитывается? Можно подробнее? потому что это стало nth-child(-1) - nth-child(1) - nth-child(3) - nth-child(5) - nth-child(7) и .... !

Arman Ebrahimi 16.03.2022 11:31
2n - 1 представляет все нечетные числа.
doğukan 16.03.2022 11:50

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