Ширина жидкости с равномерно расположенными DIV

У меня есть контейнер DIV ширины жидкости.

Внутри у меня есть 4 DIV размером 300 x 250 пикселей ...

<div id="container">
   <div class="box1"> </div>
   <div class="box2"> </div>
   <div class="box3"> </div>
   <div class="box4"> </div>
</div>

Я хочу, чтобы поле 1 было перемещено влево, поле 4 - вправо, а поля 2 и 3 - равномерно распределены между ними. Я хочу, чтобы интервал был плавным, чтобы по мере уменьшения размера браузера пространство также становилось меньше.

введите описание изображения здесь


person Lee Price    schedule 28.07.2011    source источник
comment
Почему бы не сделать display:inline-block; вместо float?   -  person ayyp    schedule 29.07.2011
comment
потому что IE6 / IE7 поддерживает только inline-block на inline элементах   -  person Lee Price    schedule 29.07.2011
comment
Хорошо, я не был уверен, какие браузеры вы собираетесь использовать.   -  person ayyp    schedule 29.07.2011
comment
Меня не слишком беспокоит IE6, это IE7 мешает мне использовать эту опцию в этом случае ... grrrr в IE! :)   -  person Lee Price    schedule 29.07.2011
comment
Как у вас может быть 4 DIVs all 300px x 250px, и при этом вам нужна плавная ширина? Вы имеете в виду, что .box1 и .box4 имеют 300px ширину, а два средних div должны иметь плавную и одинаковую ширину?   -  person thirtydot    schedule 29.07.2011
comment
@thirtydot нет, на сайте есть другой жидкий контент, эти 4 поля будут содержать партнерские ссылки размером 300x250, поэтому я хочу, чтобы они были равномерно распределены   -  person Lee Price    schedule 29.07.2011
comment
Для меня это не имеет смысла. Я не понимаю, как вы хотите, чтобы ширина и плавность работали. Может быть, поможет быстрая картинка.   -  person thirtydot    schedule 29.07.2011
comment
@thirtydot img30.imageshack.us/img30/8350/fluid.png - надеюсь, это имеет смысл   -  person Lee Price    schedule 29.07.2011
comment
@ Ли Прайс: В этом есть смысл.   -  person thirtydot    schedule 29.07.2011
comment
Ближайшее решение, которое я мог придумать, заключалось в том, чтобы обернуть каждый дочерний div .box в другой div с шириной 25%. Затем отцентрируйте дочерний div .box на оболочке. Разделы .box будут расположены равномерно, но левый и правый div не будут располагаться прямо по краю.   -  person Paul Sham    schedule 29.07.2011
comment
Проблема здесь в том, что вы не можете равномерно распределить проценты или пиксели, поскольку они будут меняться в зависимости от ширины окна. Не могу использовать таблицы (я бы не стал) по той же причине. Я думаю, что JavaScript будет единственным способом сделать это ... в противном случае решение @Paul Sham будет работать, но у вас будет немного места снаружи слева и справа.   -  person Sparky    schedule 29.07.2011
comment
Я воплотил идею @Paul Sham в JSFiddle.   -  person Sparky    schedule 29.07.2011
comment
@Lee Если точный дизайн не является абсолютно важным, я бы попробовал идею, которую я предложил и которую Sparky672 создал в JSFiddle. Если да, хотите ли вы вариант Javascript?   -  person Paul Sham    schedule 30.07.2011
comment
@ Sparky672: Возможно, вам будет интересен мой ответ :)   -  person thirtydot    schedule 30.07.2011
comment
@thirtydot: Я очень рад, что был достаточно осторожен, чтобы сказать: Я думаю, что JavaScript будет единственным способом ...   -  person Sparky    schedule 30.07.2011
comment
Разве здесь не примут чей-то ответ?   -  person Sparky    schedule 14.08.2011


Ответы (7)


См. http://jsfiddle.net/thirtydot/EDp8R/.

  • Это работает в IE6 + и во всех современных браузерах!
  • Я уменьшил запрошенные вами размеры вдвое, чтобы упростить работу.
  • text-align: justify в сочетании с .stretch - вот что обрабатывает позиционирование.
  • display:inline-block; *display:inline; zoom:1 исправляет inline-block для IE6 / 7, см. Здесь.
  • font-size: 0; line-height: 0 исправляет незначительную проблему в IE6.

#container {
  border: 2px dashed #444;
  height: 125px;
  text-align: justify;
  -ms-text-justify: distribute-all-lines;
  text-justify: distribute-all-lines;
  /* just for demo */
  min-width: 612px;
}

.box1,
.box2,
.box3,
.box4 {
  width: 150px;
  height: 125px;
  vertical-align: top;
  display: inline-block;
  *display: inline;
  zoom: 1
}

.stretch {
  width: 100%;
  display: inline-block;
  font-size: 0;
  line-height: 0
}

.box1,
.box3 {
  background: #ccc
}

.box2,
.box4 {
  background: #0ff
}
<div id="container">
  <div class="box1"></div>
  <div class="box2"></div>
  <div class="box3"></div>
  <div class="box4"></div>
  <span class="stretch"></span>
</div>

Дополнительный span (.stretch) можно заменить на :after.

Это по-прежнему работает во всех тех же браузерах, что и вышеупомянутое решение. :after не работает в IE6 / 7, но они все равно используют distribute-all-lines, так что это не имеет значения.

См. http://jsfiddle.net/thirtydot/EDp8R/3/ < / а>

У :after есть небольшой недостаток: чтобы последняя строка работала безупречно в Safari, нужно быть осторожным с пробелами в HTML.

В частности, это не работает:

<div id="container">
    ..
    <div class="box3"></div>
    <div class="box4"></div>
</div>

И это делает:

<div id="container">
    ..
    <div class="box3"></div>
    <div class="box4"></div></div>

Вы можете использовать это для любого произвольного количества дочерних div без добавления класса boxN к каждому, изменив

.box1, .box2, .box3, .box4 { ...

to

#container > div { ...

Это выбирает любой div, который является первым дочерним элементом #container div, и никаких других ниже него. Чтобы обобщить цвета фона, вы можете использовать CSS3 nth-order селектор, хотя он поддерживается только в IE9 + и других современных браузерах:

.box1, .box3 { ...

становится:

#container > div:nth-child(odd) { ...

См. здесь для примера jsfiddle.

person thirtydot    schedule 30.07.2011
comment
Разве это не умно. Никогда за миллион лет я не подумал бы использовать justify таким образом. Молодец и +1, но он все еще не устраивает меня по какой-то причине ... Не знаю почему, наверное, это моя проблема. (Это, безусловно, отличный пример того, когда на самом деле есть причина использовать <span> вместо <div>.) - person Sparky; 30.07.2011
comment
Вы только что отредактировали вопрос, и мой комментарий по поводу <span> устарел. Так даже лучше, ИМХО. Но просто интересно, не могли бы вы подробнее рассказать о причинах ваших правок. - person Sparky; 12.08.2011
comment
Я отредактировал свой ответ, потому что с тех пор, как я его написал, я видел эту distribute-all-lines штуку (не помню где), которая делает то же самое, но только для IE6 / 7. distribute-all-lines действительно работает с divs, тогда как старое решение требовало естественного встроенного элемента для IE6 / 7, такого как span. Эта новая версия действительно лучше. - person thirtydot; 12.08.2011
comment
Что касается ваших заметок о пробелах в Safari, я не вижу никакой разницы ... поля переносятся / разворачиваются до следующей строки независимо от пробелов. Mac версии 5.06. Почему бы просто не получить две строки? - person Sparky; 14.08.2011
comment
@ Sparky672: у меня проблема с Safari / пробелами происходит в Windows 7 с Safari 5.1. Да уж, два контейнера на два ряда здесь подойдут. Я отредактировал свой ответ (.. снова), чтобы удалить несколько строк и использовать одинаковые квадраты. Я пытался синхронизировать этот ответ с this, видимо, попутно немного запутался. Спасибо. - person thirtydot; 15.08.2011
comment
Мне потребовалось 3 часа, чтобы обнаружить, что у вас должны быть пробелы между полями в HTML. Justify увеличивает пробелы между элементами, и если ваш контент <div/><div/><div/>, это не сработает. Вам необходимо иметь <div/> <div/> <div/>. - person venimus; 10.05.2012
comment
@venimus: Это определенно может быть неудобно, чтобы исправить это. Я уверен, что вам не нужно, чтобы я вам это говорил :) - person thirtydot; 10.05.2012
comment
просто хотел отметить это :) потому что трудно заметить, если вы работаете с сгенерированным контентом (что является обычным случаем). Я думал использовать justify в таком случае, но спасибо, что предоставили рабочее решение. избавил меня от множества экспериментов (несмотря на 3х отладку: D). Кроме того, я мог бы добавить примечание, что если вы хотите, чтобы ваша последняя строка была выровнена по левому краю, вы должны добавить несколько дополнительных невидимых полей (чтобы завершить строку) - person venimus; 11.05.2012
comment
@venimus: Я написал еще один ответ, используя эту технику: stackoverflow.com/questions/10548417/. Что вы сделали, чтобы избавиться от лишней высоты, вызванной добавлением невидимых ящиков? - person thirtydot; 12.05.2012
comment
Не могли бы вы взглянуть на мой вопрос :) Таблица stackoverflow.com/questions/10701122/ - person Misiu; 22.05.2012
comment
Я был на полпути в том, что знал, что justify может выполнить то, что я хотел (равномерно распределенные блоки div в плавном ряду), но, хоть убей, не мог придумать правильную реализацию. Это отличная демонстрация тега span! Действительно, очень умно. - person Corbin87; 30.08.2012
comment
Вскоре все современные браузеры будут обрабатывать это изначально с помощью flexbox. В настоящее время это только Chrome и Opera, но приготовьтесь. - person iono; 25.01.2013
comment
Может кто-нибудь объяснить, почему необходим .stretch? - person atp; 23.04.2013
comment
Всегда ли нужно пустое пространство после каждого Div? Я заметил, что это не будет работать с шириной контейнера, установленной на 611 пикселей, это приводит к тому, что последний Div разбивается на следующую строку. Я думал, что он очистит границы, если установить значение 600 пикселей, но нет - person rudy; 25.04.2013
comment
@ash Это как-то связано с толканием концов контейнера. На самом деле не уверен. Может ли кто-нибудь дать подробное объяснение? - person James P.; 29.04.2013
comment
Это только у меня, или растяжка добавляет несколько пикселей к размеру родительских контейнеров? Как лучше всего удалить, и всегда ли это будет фиксированная сумма? - person iceydee; 02.07.2013
comment
Аналогично: stackoverflow.com/questions / 11589590 / - person thirtydot; 25.07.2013
comment
Это лучшее кроссбраузерное решение, которое я когда-либо видел для такого рода макетов. Спасибо. Я с пеплом, хотя в этом отношении я до сих пор не совсем понимаю, почему диапазон растяжения заставляет макет отображаться так, как он это делает. Насколько я могу судить, он по существу заставляет новую строку, в результате чего четыре div перед ней занимают одну целую строку. Еще одна вещь, которая мне все еще любопытна, - это то, можно ли сделать последнюю строку необоснованной, когда указанное выше используется в div, охватывающих несколько строк, с неравномерным количеством div в последней строке. Может без JS / back-end и невозможно, но просто любопытно. - person HartleySan; 12.11.2013
comment
@HartleySan: _1 _ / _ 2_ необходим, потому что (обычно) с выровненным текстом, последняя строка не оправдано. Здесь мы действительно хотим, чтобы последняя строка была оправдана, отсюда и необходимость в :after. Что касается вашего второго вопроса, я изучал его некоторое время назад в предыдущем ответе. В этом ответе требовался JavaScript. Если вам нужно поддерживать старые браузеры (IE8), я считаю, что вам нужен JavaScript. - person thirtydot; 12.11.2013
comment
@thirtydot, большое спасибо за быстрый ответ. Прочитав свой ответ и еще немного поиграв со скрипкой, он начинает обретать смысл. Кроме того, теперь я понимаю, почему люди хотели добавить невидимые блоки в конце. Кажется, что при этом последняя строка выровняется с другими строками, даже если в последней строке нет полной строки div. Естественно, как вы прокомментировали, для этого определенно требуется JS или некоторые серверные сценарии. Еще раз спасибо и отличный ответ. - person HartleySan; 12.11.2013
comment
Заметил, что в FF 25 пробелы между div имеют значение. Без этого их распространение прерывается. - person Gill Bates; 04.12.2013
comment
Я отредактировал скрипт, чтобы он работал без необходимости указывать класс для каждого дочернего div, и поэтому работал для любого произвольного количества подходящих div. jsfiddle.net/EDp8R/3903 - person nhinkle; 17.12.2013
comment
Я обнаружил, что этот метод также работает для div-ов, которые не являются однородными по размеру, что очень удобно для навигационных систем и т. Д. - просто удалите правило ширины на полях. - person kellen; 04.04.2014
comment
@iceydee Насколько я могу судить, растяжение добавляет несколько пикселей в нижнюю часть родительского контейнера. Добавление line-height:0 в родительский контейнер немного уменьшает пространство, но не уменьшает его до нуля. - person Nat; 26.08.2014
comment
@iceydee Добавление высоты строки: 0; к родительскому контейнеру и vertical-align: top; к псевдоэлементу контейнера должен полностью удалить лишнее пространство. - person Dima; 14.05.2015
comment
Кто-нибудь нашел способ заставить эту работу работать с Джейд? Я не знаю, как найти место для оправдания. - person bananabanana; 18.08.2016
comment
Вот как получить место для элемента angular ng-repeat, написанного на Jade: stackoverflow.com/a/39026722/4760334 HTML: stackoverflow.com/a/19507046/4760334 - person bananabanana; 18.08.2016

Самый простой способ сделать это сейчас - использовать flexbox:

http://css-tricks.com/snippets/css/a-guide-to-flexbox/

Тогда CSS просто:

#container {
    display: flex;
    justify-content: space-between;
}

демонстрация: http://jsfiddle.net/QPrk3/

Однако в настоящее время это поддерживается только относительно недавними браузерами (http://caniuse.com/flexbox < / а>). Кроме того, несколько раз менялась спецификация макета flexbox, поэтому можно охватить больше браузеров, дополнительно включив старый синтаксис:

http://css-tricks.com/old-flexbox-and-new-flexbox/

http://css-tricks.com/using-flexbox/

person Ben Jackson    schedule 15.03.2014
comment
Спасибо за это, так легко, я применил его к четырем равномерным спискам в нижнем колонтитуле, закрепленном внизу страницы. Работал в FF28.0, Chrome 34.0.1847.116 m и IE11. - person user1063287; 17.04.2014
comment
Flexbox - не самый популярный инструмент в Интернете, и он не превосходит классический подход с использованием полей и отступов. - person TheBlackBenzKid; 28.08.2016
comment
Для всех, кто ищет оправдание нескольких div с неопределенной шириной: используйте flex-wrap с опцией display: flex. Он будет обертывать div с динамической шириной. - person Kamil Budziewski; 26.10.2016
comment
Это было очень легко и сработало для меня. Спасибо, Бен Джексон. - person maverick; 13.10.2020
comment
Отличный гид по ссылке. Очень полезно. - person Amit Pathak; 22.03.2021

Если вариант css3, это можно сделать с помощью функции css calc().

Случай 1. Выравнивание полей в одной строке (FIDDLE)

Разметка проста - куча div с каким-то контейнерным элементом.

CSS выглядит так:

div
{
    height: 100px;
    float: left;
    background:pink;
    width: 50px;
    margin-right: calc((100% - 300px) / 5 - 1px); 
}
div:last-child
{
    margin-right:0;
}

где -1px, чтобы исправить ошибку IE9 + calc / округления - см. здесь

Случай 2. Выравнивание полей в нескольких строках (FIDDLE)

Здесь помимо функции calc() необходимы media queries.

Основная идея состоит в том, чтобы настроить медиа-запрос для каждого состояния #columns, где я затем использую calc () для определения margin-right для каждого из элементов (кроме тех, что в последнем столбце).

Это звучит как большая работа, но если вы используете LESS или SASS, это можно сделать довольно легко.

(Это все еще можно сделать с помощью обычного css, но тогда вам придется делать все вычисления вручную, а затем, если вы измените ширину своего поля - вам придется все снова проработать)

Ниже приведен пример использования LESS: (Вы можете скопировать / вставить этот код сюда, чтобы играть с ним [это также код, который я использовал для создания вышеупомянутой скрипки])

@min-margin: 15px;
@div-width: 150px;

@3divs: (@div-width * 3);
@4divs: (@div-width * 4);
@5divs: (@div-width * 5);
@6divs: (@div-width * 6);
@7divs: (@div-width * 7);

@3divs-width: (@3divs + @min-margin * 2);
@4divs-width: (@4divs + @min-margin * 3);
@5divs-width: (@5divs + @min-margin * 4);
@6divs-width: (@6divs + @min-margin * 5);
@7divs-width: (@7divs + @min-margin * 6);


*{margin:0;padding:0;}

.container
{
    overflow: auto;
    display: block;
    min-width: @3divs-width;
}
.container > div
{
    margin-bottom: 20px;
    width: @div-width;
    height: 100px;
    background: blue;
    float:left;
    color: #fff;
    text-align: center;
}

@media (max-width: @3divs-width) {
    .container > div {  
        margin-right: @min-margin;
    }
    .container > div:nth-child(3n) {  
        margin-right: 0;
    }
}

@media (min-width: @3divs-width) and (max-width: @4divs-width) {
    .container > div {  
        margin-right: ~"calc((100% - @{3divs})/2 - 1px)";
    }
    .container > div:nth-child(3n) {  
        margin-right: 0;
    }
}

@media (min-width: @4divs-width) and (max-width: @5divs-width) {
    .container > div {  
        margin-right: ~"calc((100% - @{4divs})/3 - 1px)";
    }
    .container > div:nth-child(4n) {  
        margin-right: 0;
    }
}

@media (min-width: @5divs-width) and (max-width: @6divs-width) {
    .container > div {  
        margin-right: ~"calc((100% - @{5divs})/4 - 1px)";
    }
    .container > div:nth-child(5n) {  
        margin-right: 0;
    }
}

@media (min-width: @6divs-width){
    .container > div {  
        margin-right: ~"calc((100% - @{6divs})/5 - 1px)";
    }
    .container > div:nth-child(6n) {  
        margin-right: 0;
    }
}

Итак, в первую очередь вам нужно определить ширину поля и минимальное расстояние между полями.

С его помощью вы можете определить, сколько места вам нужно для каждого состояния.

Затем используйте calc (), чтобы вычислить правое поле, и nth-child, чтобы удалить правое поле из полей в последнем столбце.

Преимущество этого ответа перед принятым ответом, в котором используется text-align:justify, заключается в том, что, когда у вас есть более одной строки ящиков - ячейки в последней строке не получают «оправдание», например: Если есть 2 ящики, оставшиеся в последнем ряду - я не хочу, чтобы первая ячейка была слева, а следующая - справа, а чтобы ячейки следовали друг за другом по порядку.

Что касается поддержки браузера: это будет работать в IE9 +, Firefox, Chrome, Safari6.0 + - (см. здесь для более подробной информации) Однако я заметил, что в IE9 + есть небольшой сбой между состояниями медиа-запросов. [если кто-то знает, как это исправить, мне бы очень хотелось знать :)] ‹- ИСПРАВЛЕНО ЗДЕСЬ

person Danield    schedule 30.04.2013

В других сообщениях упоминается flexbox, но если более одной строки items необходимо, свойство space-between flexbox терпит неудачу (см. конец сообщения)

На сегодняшний день единственным чистым решением для этого является использование

CSS Grid Layout Module (Демо Codepen)

В основном соответствующий необходимый код сводится к следующему:

ul {
  display: grid; /* (1) */
  grid-template-columns: repeat(auto-fit, 120px); /* (2) */
  grid-gap: 1rem; /* (3) */
  justify-content: space-between; /* (4) */
  align-content: flex-start; /* (5) */
}

1) Сделайте элемент контейнера контейнером сетки

2) Установите сетку с «автоматическим» количеством столбцов - по мере необходимости. Это сделано для адаптивных макетов. Ширина каждого столбца будет 120 пикселей. (Обратите внимание на использование auto-fit (в отличие от auto-fill), который (для макета с 1 строкой) сворачивает пустые дорожки до 0, позволяя элементам расширяться, чтобы занять оставшееся пространство. (См. эту демонстрацию, чтобы узнать, о чем я говорю)).

3) Установите промежутки / промежутки для строк и столбцов сетки - здесь, поскольку требуется макет «промежуток между», промежуток фактически будет минимальным промежутком, потому что он будет увеличиваться по мере необходимости.

4) и 5) - аналогично flexbox.

body {
  margin: 0;
}
ul {
  display: grid;
  grid-template-columns: repeat(auto-fit, 120px);
  grid-gap: 1rem;
  justify-content: space-between;
  align-content: flex-start;
  
  /* boring properties: */
  list-style: none;
  width: 90vw;
  height: 90vh;
  margin: 2vh auto;
  border: 5px solid green;
  padding: 0;
  overflow: auto;
}
li {
  background: tomato;
  height: 120px;
}
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

Демо Codepen (измените размер, чтобы увидеть эффект)


Поддержка браузера - Caniuse

В настоящее время поддерживается Chrome (Blink), Firefox, Safari и Edge! ... с частичной поддержкой IE (см. этот пост Рэйчел Эндрю)


NB:

Свойство Flexbox space-between отлично работает для одной строки элементов, но при применении к гибкому контейнеру, который обертывает его элементы - (с flex-wrap: wrap) - дает сбой, потому что у вас нет контроля над выравниванием последней строки элементов; последняя строка будет всегда по ширине (обычно это не то, что вы хотите)

Демонстрировать:

body {
  margin: 0;
}
ul {
  
  display: flex;
  justify-content: space-between;
  flex-wrap: wrap;
  align-content: flex-start;
  
  list-style: none;
  width: 90vw;
  height: 90vh;
  margin: 2vh auto;
  border: 5px solid green;
  padding: 0;
  overflow: auto;
  
}
li {
  background: tomato;
  width: 110px;
  height: 80px;
  margin-bottom: 1rem;
}
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

Codepen (измените размер, чтобы понять, о чем я говорю)


Дополнительная литература по сеткам CSS:

person Danield    schedule 23.03.2017
comment
Очень недооцененный ответ. Это был самый простой и эффективный способ добиться того, чего я хотел. Спасибо. - person Barnaby Mercer; 02.06.2017
comment
Это было наименьшее количество CSS (и никакого JS!), Которое произвело именно то поведение, которое я искал, с некоторыми настройками размера и пространства. - person EKW; 02.06.2017
comment
Я искал это некоторое время и наконец нашел !. Спасибо @Danield - person nareeboy; 20.11.2017

У меня это сработало с 5 изображениями разных размеров.

  1. Создайте контейнер div
  2. Неупорядоченный список изображений
  3. В css неупорядоченный должен отображаться вертикально и без маркеров
  4. Обосновать содержимое контейнера div

Это работает из-за justify-content: space-between, и оно находится в списке, отображаемом по горизонтали.

На CSS

 #container {
            display: flex;
            justify-content: space-between;
 }
    #container ul li{ display:inline; list-style-type:none;
}

В HTML

<div id="container"> 
  <ul>  
        <li><img src="box1.png"><li>
        <li><img src="box2.png"><li>
        <li><img src="box3.png"><li>
        <li><img src="box4.png"><li>
        <li><img src="box5.png"><li>
    </ul>
</div>
person Sebastián Brun Valiente    schedule 24.12.2015
comment
Хотя этот код вполне может работать, хороший ответ будет включать объяснение того, как он работает и почему это хорошее решение. - person Blackwood; 24.12.2015
comment
Стоит отметить, что flexbox не поддерживается (или частично) IE caniuse.com/#feat=flexbox - person David Salamon; 26.07.2016
comment
это отзывчиво? - person stackdave; 22.08.2019

в jQuery вы можете настроить таргетинг на Родителя напрямую.

ЭТО ПОЛЕЗНО, ЕСЛИ ВЫ ТОЧНО НЕ ЗНАЕТЕ, СКОЛЬКО ДЕТЕЙ БУДЕТ ДОБАВЛЕНЫ ДИНАМИЧЕСКИ, или ЕСЛИ ВЫ ПРОСТО НЕ МОЖЕТЕ УЗНАТЬ ИХ НОМЕР.

var tWidth=0;

$('.children').each(function(i,e){
tWidth += $(e).width();

///Example: If the Children have a padding-left of 10px;..
//You could do instead:
tWidth += ($(e).width()+10);

})
$('#parent').css('width',tWidth);

Это позволит parent расти по горизонтали по мере добавления children.

ПРИМЕЧАНИЕ. Предполагается, что '.children' имеют значения width и Height.

Надеюсь, это поможет.

person ErickBest    schedule 04.06.2013

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

У меня были строки из трех div, которые я хотел оправдать, поэтому использовал:

.tile:nth-child(3n+2) { margin: 0 10px }

это позволяет центральному div в каждой строке иметь поле, которое заставляет 1-й и 3-й div выходить на внешние края контейнера.

Также отлично подходит для других вещей, таких как цвета фона границ и т. Д.

person Dave Robertson    schedule 20.10.2014