#html #css #flexbox
#HTML #css #flexbox
Вопрос:
Я хочу разместить элементы в flexbox одинаковой ширины.
Внутри flexbox у меня есть searchsvg, поле ввода и div с некоторым текстом. Я хочу, чтобы каждый из них сам принимал равную ширину в зависимости от ширины flexbox. Я не хочу указывать ширину каждого элемента вручную. Я пытался использовать justify-content: space-evenly
. При этом поле ввода занимает больше ширины, чем остальные.
Как я могу этого избежать? Ниже приведен код:
.wrapper {
display: flex;
flex-grow: 1;
}
.items_container {
position: relative;
width: 40px;
height: 40px;
top: 16px;
margin-left: 16px;
padding-left: 5px;
display: flex;
align-items: center;
justify-content: space-evenly;
}
@media (min-width: 300px) {
.items_container.expanded {
width: 50%;
}
}
.items_container.expanded .search_input_field {
display: flex;
align-items: center;
}
<div class="wrapper">
<div class="items_container expanded">
<div class="search_input_field">
<div>
<Svgsearch/>
</div>
<input type="text" placeholder="input" />
</div>
<div>dropdown to be added</div>
</div>
Комментарии:
1. Первое, что я вижу, это то, что вы неправильно применяете flex-grow: 1 к оболочке … которое является свойством для дочерних элементов flexbox.
2. Вы сделали это правильно, но вам нужно просто удалить свою оболочку. Затем, если вы хотите изменить размер элементов, используйте
items_container > div { flex: 1 0 0 }
.
Ответ №1:
.child
элементы должны grow
быть одинаковыми, а не shrink
.parent {
display: flex;
}
.child {
flex: 1 0 0;
}
/* ignore */
.child {
padding: 5px;
height: 50px;
background: lightcoral;
margin: 2px;
text-align: center;
}
<div class="parent">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
</div>
Ответ №2:
Я переместился flex-grow: 1
с того места, где вы его разместили, потому что он ничего не делал. Это правило, которое влияет на дочерние элементы flex. Поэтому я переместил его, чтобы повлиять на всех прямых дочерних элементов родительского элемента flex, .wrapper
.
.wrapper {
display: flex;
/* flex-grow: 1; <-- moved below */
amp; > * {
flex-grow: 1;
}
}