#html #css #flexbox
#HTML #css #flexbox
Вопрос:
Следующий CSS / HTML дает мне желаемый результат — три поля в строке, среднее имеет фиксированную ширину, а внешние занимают (в равном количестве) пространство с обеих сторон:
#container {
display: flex;
}
#container > * {
background: #efefef;
}
#container .fixed-width-40px {
width: 40px;
background: #ccc;
}
.fill-available-horizontal-space {
flex-grow: 1;
}
<div id="container">
<div class="fill-available-horizontal-space">aaa</div>
<div class="fixed-width-40px">bbb</div>
<div class="fill-available-horizontal-space">ccc</div>
</div>
Однако, если я добавлю форму (и поле ввода текста внутри нее) в третье поле, третье поле станет шире, а первое поле станет короче.
Я хочу, чтобы первое и третье поля сохраняли одинаковую ширину, но введение поля ввода текста разрушает это.
Пожалуйста, вы знаете, как я могу это преодолеть?
<div id="container">
<div class="fill-available-horizontal-space">aaa</div>
<div class="fixed-width-40px">bbb</div>
<div class="fill-available-horizontal-space">
<form>
<input type="text" name="test"/>
</form>
</div>
</div>
Ответ №1:
Ключ — «flex-grow: 1;» в дочерних элементах, которые вы хотите заполнить, доступное пространство.
* {
box-sizing: border-box;
}
#container {
display: flex;
}
#container > * {
background: #efefef;
}
#container .fixed-width-40px {
width: 40px;
background: #ccc;
}
.fill-available-horizontal-space {
flex-grow: 1;
width: 50%;
}
input {
width: 100%;
padding: .5rem;
}
<div id="container">
<div class="fill-available-horizontal-space"></div>
<div class="fixed-width-40px">bbb</div>
<div class="fill-available-horizontal-space"><input></div>
</div>
Комментарии:
1. Я не понимаю, почему мой пост был связан с тем, который не решает проблему, с которой я столкнулся, я уже связался с дубликатом, потому что я искал версию исправления Flexbox. В любом случае, спасибо alotropico за исправление, я уже пробовал это, но это не сработало, потому что у меня есть форма и один ввод текста в третьем поле, и это делает третье поле шире первого. Я написал этот вопрос, не осознавая, что формы внутри divs сделают flexboxes шире.
2. TBH на проблему был дан ответ с использованием flexbox в этом вопросе, во втором и третьем наиболее проголосовавших ответах, которые новее принятого. Особенность flex в том, что он обычно не дает вам точных чисел, а скорее полезных гибких приближений, в этом случае, если вы хотите, чтобы рост конкретного дочернего элемента имел приоритет, вы можете увеличить его значение flex-grow. Приветствия
3. Я играл, но этого не произошло, поэтому моим последним средством было дублировать содержимое третьего поля в первое, а затем сделать содержимое первого поля видимым: скрытым. Грязный, да. Если у меня будет время, я поиграю еще.
4. Я отредактировал свой ответ, если вы дадите 50% ширины расширяющимся разделам, они должны иметь одинаковый размер, независимо от содержимого
5. Если бы я мог принять ваш ответ во второй раз, я бы это сделал, но вместо этого мог только проголосовать за него. спасибо, приятель 🙂