2015-11-22 2 views
4

У меня есть контейнер с большим количеством div, отображаемым встроенным блоком. Но когда один из этих divs выше других, все divs в одной строке имеют пустое место сверху.CSS-дисплей встроенного блока: удалите пустое пространство

.all { 
     text-align: center; 
    } 
    .a { 
     width: 200px; 
     height: 200px; 
     background: red; 
     margin: 20px; 
     display: inline-block; 
    } 
    .b { 
     height: 100px; 
    } 

The problem.

This is what I'm trying to achieve.

Я не знаю, как сделать это.

+2

Не могли бы вы поставить проблему в jsfiddle? – frenchie

+0

Добавление демонстрации не повредит. – nicael

+1

Похоже, css flexbox может быть вашим другом здесь, но это зависит от настройки: не могли бы вы a) указать красные блоки, чтобы объяснить, в каком порядке вы хотите отображать их? б) объяснить некоторые из ограничений, которые вы пытаетесь достичь? (Все столбцы всегда должны быть одинаковой высоты? Исправлена ​​высота столбца? Divs растягивались вертикально, чтобы гарантировать, что столбцы равны высоте? Исправлено количество столбцов?) C) предоставить демо (код вместо изображения)? – wintvelt

ответ

1

Невозможно выполнить именно то, что вы изобразили в HTML/CSS, при этом предоставляя любую гибкость или простоту воспроизведения, хотя есть аккуратная библиотека Javascript под названием Packery, которая делает именно то, что вы хотите.

http://packery.metafizzy.co/

EDIT:

Вот рабочий пример того, что вы после использования Packery, с более новыми версиями вы на самом деле не нужно писать Javascript, что делает панель для ввода гораздо ниже ,

http://jsfiddle.net/s9crmo9d/8/

<div id="container" class="js-packery" 
    data-packery-options='{ "itemSelector": ".item", "gutter": 10 }'> 

    <div class="item red small"></div> 
    <div class="item green large"></div> 
    <div class="item orange small"></div> 
    <div class="item red large"></div> 
    <div class="item green large"></div> 
    <div class="item orange large"></div> 
    <div class="item red large"></div> 
    <div class="item green large"></div> 
    <div class="item orange small"></div> 

</div> 

Это можно было бы считать дубликатом, а также, хотя он не был специально просить макет кладки CSS основе.

Is it possible to use flexbox/CSS to create a masonry layout?

+0

Это не ответ. 1) это всего лишь ссылка 2) OP запрашивает CSS. 3) обман? флаг как таковой. – nicael

+0

@nicael Невозможно только в CSS разрешить упаковывать контейнеры разных размеров так, чтобы это было ответом. Я не уверен, что это точный дубликат, поскольку он специально не просит воссоздать кладку, это просто похоже на то, что он поставил на его фотографию. –

+0

@Dontfeedthecode спасибо человеку, вот что я ищу. – ler

0

Если бы я тебя, я хотел бы попробовать сделать это в другом way.Try взглянуть на вашу идею как 4 колонки (дивы) с «дисплеем-инлайн: блок» свойство each.Then внутри Ваши divs размещают другие divs со свойствами, которые вы хотите. Я вижу только это решение с чистым CSS и без дополнительных плагинов или фреймворков. Не забудьте добавить свойство «margin-bottom» для каждого из вашего «блока» внутри столбца.

0

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

.all { 
     text-align: center; 
    } 
    .a { 
     width: 200px; 
     min-height: 100px; 
     background: red; 
     margin: 20px; 
     display: inline-block; 
    } 
    .b { 
     height: 100px; 
    } 
Смежные вопросы