Равные строки высоты в гибком контейнере
Как вы можете видеть, list-items
в первом row
имеют одинаковый height
. Но элементы во втором row
имеют разные heights
. Я хочу, чтобы все элементы имели форму height
.
![введите описание изображения здесь]()
Есть ли способ достичь этого без предоставления фиксированной высоты и только с помощью flexbox?
Вот мой code
.list {
display: flex;
flex-wrap: wrap;
max-width: 500px;
}
.list-item {
background-color: #ccc;
display: flex;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content {
width: 100%;
}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>
</ul>
Ответы
Ответ 1
Ответ НЕТ.
Причина указана в спецификации flexbox:
6. Линии Flex
В многострочном гибком контейнере кросс-размер каждой строки является минимальным размером, необходимым для размещения элементов гибкости на линии.
Другими словами, когда в контейнере гибких строк имеется несколько строк, высота каждой строки ( "кросс-размер" ) является минимальной высотой, необходимой для размещения элементов гибкости на линии.
В таблице CSS Grid Layout возможны равные строки высоты:
В противном случае рассмотрим альтернативу JavaScript.
Ответ 2
Нет, вы не можете достичь этого, не устанавливая фиксированную высоту (или используя script).
Ответ 3
Если вы знаете элементы, которые вы просматриваете, , вы можете выполнить это, выполнив одну строку за раз. Я знаю, что это обходной путь, но он работает.
Для меня у меня было 4 элемента в строке, поэтому я разбил их на две строки по 4 с каждой строкой height: 50%
, избавился от flex-grow
, имеет <RowOne />
и <RowTwo />
в <div>
с flex-column
. Это сделает трюк
<div class='flexbox flex-column height-100-percent'>
<RowOne class='flex height-50-percent' />
<RowTwo class='flex height-50-percent' />
</div>
Ответ 4
В вашем случае высота будет вычисляться автоматически, поэтому вы должны указать высоту
используйте это
.list-content{
width: 100%;
height:150px;
}
Ответ 5
вы можете сделать это, установив высоту тега "P" или установив высоту "списка".
Я сделал, установив высоту "P"
и переполнение должно быть скрыто.
.list{
display: flex;
flex-wrap: wrap;
max-width: 500px;
}
.list-item{
background-color: #ccc;
display: flex;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content{
width: 100%;
}
p{height:100px;overflow:hidden;}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>
</ul>
Ответ 6
для той же высоты вы должны использовать свой "css" display "Properties. Более подробно см. Приведенный пример.
.list{
display: table;
flex-wrap: wrap;
max-width: 500px;
}
.list-item{
background-color: #ccc;
display: table-cell;
padding: 0.5em;
width: 25%;
margin-right: 1%;
margin-bottom: 20px;
}
.list-content{
width: 100%;
}
<ul class="list">
<li class="list-item">
<div class="list-content">
<h2>box 1</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. </p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h3>box 2</h3>
<p>Lorem ipsum dolor</p>
</div>
</li>
<li class="list-item">
<div class="list-content">
<h1>h1</h1>
</div>
</li>