Порядок элементов во flexbox

Ниже приведен мой код, который отлично работает с точки зрения пользовательского интерфейса. Хотя проблема в моем кнопки динамические (должно быть 2, 3, 4, 5, 6 и т. д. в цифрах), поэтому должно быть Button 1, Button 2, Button 3, Button 4, а не Button 4, Button 3, Button 2, Button 1. Дайте мне знать, как я могу управлять этим с помощью flexbox.

.container {
  border: 2px solid red;
  display: flex;
  width: 100%;
}
.title-container {
  border: 1px solid green;
  flex: 1;
}
.action-container {
  border: 1px solid blue;
  flex: 1;
  display: flex;
  flex-direction: row-reverse;
}
button {
  margin-right: 10px;
}
button:first-child {
  margin-right: 0;
}
<div class = "container">
  <div class = "title-container">
    <h3>
      Heading Title
    </h3>
  </div>
  <div class = "action-container">
    <button>Button 1</button>
    <button>Button 2</button>
    <button>Button 3</button>
    <button>Button 4</button>
  </div>
</div>

РЕДАКТИРОВАТЬ -

Я знаю, что flex-direction: row заставит элементы отображаться в правильном положении, но я хочу, чтобы последний элемент оставался последним, поэтому я выбираю flex-direction: row-reverse .. но эта вещь также изменит порядок.

Динамический код, который генерирует кнопки, может генерировать их в обратном порядке, тогда порядок будет таким, как ожидалось, и последняя кнопка будет «прилипать» вправо.

Fabio 24.06.2019 06:33
Улучшение производительности загрузки с помощью 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 страниц, которые помогут...
1
1
273
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы ищете flex-direction: row вместо flex-direction: row-reverse на .action-container:

.container {
  border: 2px solid red;
  display: flex;
  width: 100%;
}

.title-container {
  border: 1px solid green;
  flex: 1;
}

.action-container {
  border: 1px solid blue;
  flex: 1;
  display: flex;
  flex-direction: row;
}

button {
  margin-right: 10px;
}

button:first-child {
  margin-right: 0;
}
<div class = "container">
  <div class = "title-container">
    <h3>
      Heading Title
    </h3>
  </div>
  <div class = "action-container">
    <button>Button 1</button>
    <button>Button 2</button>
    <button>Button 3</button>
    <button>Button 4</button>
  </div>
</div>

Это заставит мою кнопку начинать слева от контейнера (синий контейнер), хотя я хочу, чтобы последний элемент оставался справа. Это я выбираю row-reverse, чтобы начинать элементы только справа... но это обратный порядок, который ожидается

Nesh 24.06.2019 06:29

Вы можете использовать атрибут CSS order, чтобы вручную установить порядок элементов flexbox. Кроме того, после установки порядка вам может потребоваться установить свойство кнопок margin-left вместо margin-right, если вы хотите, чтобы последняя кнопка оставалась до конца. Ниже приведен рабочий пример -

.container {
border: 2px solid red;
display: flex;
width: 100%;
}

.title-container {
border: 1px solid green;
flex: 1;
}

.action-container {
border: 1px solid blue;
flex: 1;
display: flex;
flex-direction: row-reverse;
}

button {
margin-left: 10px;
}

button:first-child {
margin-right: 0;
}
<div class = "container">
  <div class = "title-container">
    <h3>
      Heading Title
    </h3>
  </div>
  <div class = "action-container">
    <button style = "order: 4">Button 1</button>
    <button style = "order: 3">Button 2</button>
    <button style = "order: 2">Button 3</button>
    <button style = "order: 1">Button 4</button>
  </div>
</div>
Ответ принят как подходящий

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

.container {
  border: 2px solid red;
  display: flex;
  width: 100%;
}

.title-container {
  border: 1px solid green;
  flex: 1;
}

.action-container {
  border: 1px solid blue;
  flex: 1;
  display: flex;
  flex-direction: row; /* Changed */
  justify-content: flex-end; /* Added */
}
/*
  Add margin to each button except for the first one
*/
button:not(:first-child) {
  margin-left: 5px;
}
<div class = "container">
  <div class = "title-container">
    <h3>
      Heading Title
    </h3>
  </div>
  <div class = "action-container">
    <button>Button 1</button>
    <button>Button 2</button>
    <button>Button 3</button>
    <button>Button 4</button>
  </div>
</div>

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