Подтвердить что ты не робот

Как вы устанавливаете плавающую ширину div, чтобы заняться оставшимся пространством, не нажав другие divs?

Для части макета, которую я хочу сделать, я хочу использовать три div, все плавающие рядом друг с другом. Левая и правая имеют набор максимальной ширины, который отлично работает, но я хочу, чтобы средний div расширял свою ширину, чтобы заполнить оставшееся пространство. Чтобы уточнить, левая и правая div могут иметь ширину от 0px до максимальной ширины, в зависимости от того, что есть в каждом, и я хочу, чтобы средний div расширял свою ширину так, чтобы он занимал остальную часть пространства, а не используемые divs с обеих сторон.

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

Здесь css я до сих пор:

#left-column {
 width: auto;
 max-width: 200px;
 height: auto;
 float: left;
}

#middle-column {
 float: left;
 width: auto;
}

#right-column {
 width: auto;
 max-width: 200px;
 height: auto;
 float: right;
}

... и HTML:
  <div id="left-column">...</div>
<div id="middle-column">...</div>
<div id="right-column">...</div>

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

Спасибо!

4b9b3361

Ответ 1

Классические поплавки

Если вы заказываете:

<div id="left-column"></div>
<div id="right-column"></div>
<div id="middle-column"></div>

и вы поместите левый столбец влево, а правый столбец вправо, средний столбец должен заполнить оставшееся пространство. У вас будут проблемы с полями, границами и прокладками.


Flexbox

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

Вам нужно будет выбрать родительский элемент, поэтому в целях этой демонстрации код будет обернут <div class="wrapper">.

.wrapper {
  display: flex;
  flex-direction: row;
  height: 200px;
}

.left {
  background-color: red;
  width: 100px;
}
.middle {
  background-color: green;
  flex: 1;
}
.right {
  background-color: blue;
  width: 100px;
}
<div class="wrapper">
  <div class="left"></div>
  <div class="middle"></div>
  <div class="right"></div>
</div>

Ответ 2

Я не хочу выковывать старый поток здесь, но я искал решение своей проблемы и наткнулся на это, и я подумал, что лучше поделиться с Франциско...

Таблицы - ужасная идея для размещения макета, главная проблема заключается в том, что перед тем, как таблица покажет/отобразит в браузере, она должна отобразить тег </table>.

Не могли бы вы представить, что если бы содержимое столбца Facebook использовало таблицу для его компоновки, для его отображения на экране понадобилось бы много времени, чтобы отображать что-либо на экране, например, при проверке временной шкалы! Другая проблема заключается в том, что таблицы ведут себя по-разному в каждом браузере.

В принципе: <table> для layout = NO!, <table> для перечисления строк данных или информации = YES!