2016-03-15 3 views
19

Как вы можете видеть, list-items в первых row имеют одинаковые height. Но предметы во втором row имеют разные heights. Я хочу, чтобы все предметы имели форму height.Равномерные ряды в гибком контейнере

enter image description here

Есть ли способ, чтобы достичь этой цели без предоставления фиксированной высоты и только с помощью 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>

ответ

25

Ответ НЕТ.

Причина предусмотрена в спецификации Flexbox:

6. Flex Lines

В многострочном гибком контейнере, причем поперечный размер каждой строки минимального размера необходимо содержать гибкие элементы на линия.

Другими словами, при наличии нескольких линий в контейнере Flex на основе строк высота каждой строки («кросс-размер») является минимальной высотой, необходимой для размещения элементов гибкости на линии.

равные ряды по высоте, однако, возможны и в макете сетки CSS:

В противном случае, рассмотрим альтернативу JavaScript.

+1

Спасибо за объяснение. Тогда я буду писать сценарии. –

+0

@ StanislavE.Govorov, рассмотрите вопрос о публикации нового вопроса со всеми деталями, чтобы мы могли изучить его. Включите весь соответствующий код. –

+0

Извините, я отправил незавершенный комментарий через 'Enter' случайно) –

-3

для той же высоте, вы должны Ставить ваши CSS "дисплей" Свойства. Подробнее см. Приведенный пример.

.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>

+0

Спасибо, но я хочу отобразить списки в нескольких строках. –

-1

В вашем случае высота будет рассчитана автоматически, так что вы должны обеспечить на высоту
использовать этот

.list-content{ 
    width: 100%; 
    height:150px; 
} 
+0

Извините, высота может отличаться в зависимости от содержимого. Поэтому не может быть фиксированной высоты. –

+0

Высота вычисляется автоматически, поэтому с вашим разным контентом высоты будут разными, поэтому вы должны использовать фиксированную высоту, иначе вы не сможете получить равномерные высоты. – Tom

-2

вы можете сделать это путем фиксирования высоты " P "или фиксируя высоту" list-item ".

я делал, фиксируя высоту «Р»

и перелива должны быть скрыты.

.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>

+0

Кажется, не ответ, который я ищу, если контент станет больше, он будет скрыт. –

+0

@JinuKurian, где я добавляю переполнение: hidden, Если вы измените это на переполнение: auto, появится прокрутка. то вы можете увидеть полный контент также –

2

Нет, вы не можете добиться того, что не устанавливая фиксированную высоту (или с помощью скрипта).

0

Если вы знаете объекты, с которыми вы работаете, , вы можете выполнить это, выполнив одну строку за раз. Я знаю, что это обходной путь, но он работает.

Для меня было 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> 
0

Это, кажется, работает в случаях с фиксированной родительской высотой (протестирована в Chrome и Firefox):

.child { 
     height : 100%; 
     overflow : hidden; 
} 

.parent { 
     display: flex; 
     flex-direction: column; 
     height: 70vh; // ! won't work unless parent container height is set 
     position: relative; 
} 

Если это не представляется возможным использовать сетки по какой-то причине, может быть, это решение.