Плавающие div не складываются должным образом (без пробелов)

У меня есть контейнер с множеством плавающих предметов. Проблема в том, что при изменении размера хотя бы одного из них возникает разрыв. Есть ли способ заставить их заполнить эти пробелы?

.wpr {
  padding: 20px;
}

.wpr span {
  width: 260px;
  min-height: 130px;
  background: green;
  float: left;
  margin: 10px;
}
<div class = "wpr">
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit vitae lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat lacus. Donec eget odio vel ligula ullamcorper hendrerit nec et arcu.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit vitae lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat lacus.
         </span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>

ДЕМО: http://jsfiddle.net/zcvybdx3/

Так как ты хочешь, чтобы это было?

Yaakov Ainspan 12.04.2018 23:14

"восполнить пробелы" каким образом у вас есть наценки?

JGallardo 12.04.2018 23:19

В приведенном выше примере я имею в виду разрыв между первым и третьим элементом.

DimChtz 12.04.2018 23:21
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
3
65
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете добавить что-то вроде этого в свой класс .wpr:

    display: flex;
    flex-flow: column wrap;
    max-height: 800px;

Это вроде как хакерство, и я думаю, что для этого требуется максимальная высота. Вы также можете изучить плагин jquery, например https://isotope.metafizzy.co/layout-modes/masonry.html

Вы можете использовать flexbox для заполнения пробелов, чтобы каждая строка имела одинаковую высоту без пробелов:

display: flex;
flex-flow: row wrap;

Рабочий пример:

.wpr {
  padding: 20px;
  display: flex;
  flex-flow: row wrap;
}

.wpr span {
  width: calc(50% - 20px);
  min-height: 130px;
  background: green;
  margin: 10px;
  display: block;
}
<div class = "wpr">
  <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit vitae lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat lacus. Donec eget odio vel ligula ullamcorper hendrerit nec et arcu.Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit vitae lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat lacus.</span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
  <span></span>
</div>
Ответ принят как подходящий

Чтобы добиться того, о чем вы просите, вам необходимо создать макет кладки. Вы можете использовать плагин JQuery, как упоминалось выше в @ git-e-up, поскольку это может быть довольно сложно добиться, используя только CSS. Однако, если вам нравится решение на чистом CSS, вы можете найти очень хороший учебник здесь. Согласно этому руководству, ваш HTML-код должен измениться следующим образом:

<div class = "masonry-layout">
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit 
vitae lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat 
lacus. Donec eget odio vel ligula ullamcorper hendrerit nec et arcu.Lorem 
ipsum dolor sit amet, consectetur adipiscing elit. Donec pulvinar elit vitae 
lobortis tempor. Ut vitae quam maximus, iaculis lacus ut, volutpat lacus.
        </div>
    </div>
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            2
        </div>
    </div>
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            3
        </div>
    </div>
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            4
        </div>
    </div>  
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            5
        </div>
    </div>  
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            6
        </div>
    </div>  
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            7
        </div>
    </div> 
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            8
        </div>
    </div> 
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            9
        </div>
    </div> 
    <div class = "masonry-layout__panel">
        <div class = "masonry-layout__panel-content">
            10
        </div>
    </div>
</div>

Обратите внимание, что первоначальная структура .wrp и .span была заменена трехуровневой структурой. Правила CSS должны измениться соответственно на:

.masonry-layout {
    column-width: 270px;
    column-gap: 0;
}
.masonry-layout__panel {
    break-inside: avoid;
    padding: 5px;
}
.masonry-layout__panel-content {
    padding: 20px;
    border-radius: 10px;
    background: green;
    min-height: 130px;
}

Это даст вам следующий макет кладки, который вы можете увидеть на изображении это, и я думаю, это то, что вы ищете! Вы можете проверить приведенный выше код в Codepen.

Другие вопросы по теме