Ниже приведен мой код, который отлично работает с точки зрения пользовательского интерфейса. Хотя проблема в моем кнопки динамические (должно быть 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
.. но эта вещь также изменит порядок.
Вы ищете 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, чтобы начинать элементы только справа... но это обратный порядок, который ожидается
Вы можете использовать атрибут 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>
Динамический код, который генерирует кнопки, может генерировать их в обратном порядке, тогда порядок будет таким, как ожидалось, и последняя кнопка будет «прилипать» вправо.