Как разместить элементы в flexbox равной ширины?

#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;
  }
}
  

введите описание изображения здесь

jsFiddle