Вы можете поместить текст внутри тега textarea.Это даст гибким элементам одинаковую ширину независимо от того, содержат ли они текст или нет.Это не идеальное решение, так как вы не можете форматировать текст так свободно, как вы можете за пределами тега textarea, т.е. как в теге div, например, мне бы хотелось, чтобы у меня было объяснение, почему гибкие макеты ведут себя так по-разному (с текстовыми областями или без них),но у меня нет.По крайней мере, такое поведение одинаково в Edge, Chrome и Firefox.
Преимущества использования макета flexbox, подобного этому, заключаются в том, что он очень хорошо адаптируется к различным форматам изображения, таким как портрет / пейзаж на планшете, например, и в то же время фиксируется в ответ на различное количество текстового содержимого.Идеально подходит для формы, управляемой базой данных, например, где некоторые поля / текстовые области могут быть пустыми, а некоторые нет.
Это пример, конечно, просто эскиз или подтверждение концепции, в типичной форме, управляемой базой данных, у вас, вероятно, есть несколько полей / тегов для ввода текста, а также элементы изображения разной высоты.
Вот код для тех, кто хочет сравнить его с исходным кодом.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Flextest</title>
<style>
body
{
}
.wrapper
{
background-color: #eee;
display: flex;
flex-wrap: wrap;
flex-direction: column;
border: 2px solid green;
}
.el
{
border: 2px solid black;
color: darkgray;
padding: 10px;
flex-grow: 1;
flex-shrink: 1;
margin: 1vh;
min-width: 100px;
max-width: 300px;
min-height: 200px;
max-height: 200px;
}
textarea
{
width: calc(100% - 6px);
/*height: calc(100% - 6px);*/
height: 194px; /*Calculated height doesn't work in chrome */
}
</style>
<script>
function init()
{
window.addEventListener("resize", function (evt) { onresize(evt); }, false);
onresize(null);
}
function onresize(evt)
{
var height = Number(document.body.parentNode.clientHeight);
document.getElementById("size").innerText = height;
document.getElementById("wrapper").style.height = (height - 20) + "px";
}
</script>
</head>
<body onload="init()">
<div class="wrapper" id="wrapper">
<div class="el"><textarea id="size">One</textarea></div>
<div class="el"><textarea>Two</textarea></div>
<div class="el"><textarea>Three</textarea></div>
<div class="el"><textarea>Four</textarea></div>
<div class="el"><textarea>Lots of text text text text text text text text text text<br />text text<br />text text text text text text text text text text text</textarea></div>
<div class="el"><textarea>Six</textarea></div>
<div class="el"><textarea>Seven</textarea></div>
<div class="el"><textarea>Eight</textarea></div>
</div>
</body>
</html>