2015-04-22 1 views
2

Как многие дизайнеры могут столкнуться с проблемой с автоматической настройкой высоты всей оберткой div до высоты максимальной высоты div.Автоматическая настройка высоты элементов обертки div на основе самого большого div

Допустим, я следующая структура, чтобы показать свои вещи в блоге

<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
    <div class="blog-item"> 
     <div class="img">IMAGE</div> 
     <div class="title">SOME TITLE</div> 
    </div> 
</div> 
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
    <div class="blog-item"> 
     <div class="img"></div> 
     <div class="title"></div> 
    </div> 
</div> 
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
    <div class="blog-item"> 
     <div class="img"></div> 
     <div class="title"></div> 
    </div> 
</div> 
<div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
    <div class="blog-item"> 
     <div class="img"></div> 
     <div class="title"></div> 
    </div> 
</div> 

и каждый из элементов блога имеет изображение и название и дату, связанную с ним. Заголовок может быть одним заголовком строки или двумя строками или тремя строками. что затрудняет настройку высоты blog-item, мы можем дать max-height, который обычно работает, но добавляет лишнее пространство, если этот элемент блога и одно название строки. есть ли способ, которым мы можем автокорректировать высоту blog-item обертка на основе самой большой высоты на любом blog-item div.

В случае, если мы работаем с max-height, то мы должны принять максимальную высоту blog-item в противном случае дизайн может сломаться, если название больше, чем 3 линии

+0

Стоит отметить, что, если пиксель совершенной совместимости с более старыми версиями IE не является жизненно важным, эта задача [тривиальным с Flexbox] (https://css-tricks.com/snippets/ CSS/а-руководство к Flexbox /). –

+0

'flexbox' может решить вашу проблему. – chatoo

+0

'Flexbox'' 'CSS3'..Since OP не добавил тэг' CSS3', я воздержался от его предложения. –

ответ

1

flexbox может решить вашу проблему.

#container { 
 
    display: flex; 
 
    align-items: stretch; 
 
} 
 

 
#container > div { 
 
    border: 1px solid black; 
 
}
<div id="container"> 
 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
      <div class="blog-item"> 
 
       <div class="img">IMAGE</div> 
 
       <div class="title">SOME TITLE</div> 
 
      </div> 
 
     </div> 
 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
      <div class="blog-item"> 
 
       <div class="img">image2</div> 
 
       <div class="title">title2</div> 
 
      </div> 
 
     </div> 
 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
      <div class="blog-item"> 
 
       <div class="img">image3</div> 
 
       <div class="title">title3</div> 
 
       <div class="desc">long descriptions</div> 
 
      </div> 
 
     </div> 
 
     <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
      <div class="blog-item"> 
 
       <div class="img">image4</div> 
 
       <div class="title">title4</div> 
 
      </div> 
 
     </div> 
 
    </div>

+0

Проблема с решением заключается в том, что он разбивает столбец начальной загрузки и показывает все из них в одной строке. – Learning

+0

@KnowledgeSeeker вы попробовали свойство «flex-wrap»? 'flex-wrap: wrap;' – chatoo

+0

Да, он также разбивает структуру столбцов бутстрапа. – Learning

1

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

Мое стандартное (безгибкое) решение является настольным css. Очень просто: вся строка получает display: table и каждый столбец получает display: table-cell

В вашем случае,

.row { 
 
    display: table; 
 
} 
 
.row > div { 
 
    display: table-cell; 
 
    border: 1px solid blue; 
 
}
<div class="row"> 
 
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
    <div class="blog-item"> 
 
     <div class="img">IMAGE</div> 
 
     <div class="title">SOME TITLE</div> 
 
    </div> 
 
    </div> 
 
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3"> 
 
    <div class="blog-item"> 
 
     <div class="img">image</div> 
 
     <div class="title">longer 
 
     <br/>title</div> 
 
    </div> 
 
    </div> 
 
</div>

Для более полного обсуждения некоторых из вариантов, см https://css-tricks.com/fluid-width-equal-height-columns/

+0

Я понял, что предполагаю, что они идут по одной линии вместе с именами классов, которые выглядят как «столбец». Если вы говорите о том же высоту, но не в одном ряду, это совершенно другая проблема. – henry

+0

также ломается в бутстрапе. – Learning

+0

Вы отметили его, но вы также отметили его jquery. Ничего не нужно для достижения того, что вы описываете. Для всех, кого мы знаем, вы закончили загрузку, чтобы попытаться решить эту проблему. Кроме того, он не ломается в bootstrap;) есть и другая тонкая настройка, но проблема с высотой решена. Http://codepen.io/henry/pen/VLwrGJ (использует bootstrap) – henry

2

Этот раствор составляет от Ed Eliot's blog

Сделайте divs/columns очень высоким, добавив нижнюю часть: 100%, а затем «обманите браузер», думая, что они не так высоки, используя margin-bottom: -100% (или) 100%. Это лучше объясняется Эд Элиотом в его блоге, который также включает в себя множество примеров.

Пример кода

.column { 
    padding-bottom: 1000px; 
    margin-bottom: -1000px; 
} 

Demo here

Вы также можете использовать Flex/Flexbox, если вы хотите, чтобы адаптировать CSS3

Просто установите дисплей свойство внешнего DIV изгибаться

display: flex; 
align-items: stretch; 

Редактировать: Использование flexbox с бутстрапом Demo here

+0

Flex разбивает столбцы в шаблоне начальной загрузки и показывает все то в одной строке. – Learning

+0

@KnowledgeSeeker Попробовал ли вы другой метод, упомянутый в блоге Эд? –

+0

@KnowledgeSeeker См. Изменение для примера использования flexbox с бутстрапом –

Смежные вопросы