Как разместить div рядом
У меня есть основной div обертки, который установлен на 100% ширины. Внутри этого я хотел бы иметь два div, один с фиксированной шириной, а другой, который заполняет остальное пространство. Как мне переместить второй div, чтобы заполнить оставшееся пространство. Спасибо за любую помощь.
7 ответов
Есть много способов сделать то, что вы просите:
Использование CSS
float
свойство:<div style="width: 100%; overflow: hidden;"> <div style="width: 600px; float: left;"> Left </div> <div style="margin-left: 620px;"> Right </div> </div>
Использование CSS
display
свойство - которое можно использовать дляdiv
действовать какtable
:<div style="width: 100%; display: table;"> <div style="display: table-row"> <div style="width: 600px; display: table-cell;"> Left </div> <div style="display: table-cell;"> Right </div> </div> </div>
Есть больше методов, но эти два являются самыми популярными.
CSS3 представил гибкие боксы (также как flex box), которые также могут достичь этого поведения.
Просто определите ширину первого div, а затем дайте второму flex-grow
ценность 1
что позволит ему заполнить оставшуюся ширину родителя.
.container{
display: flex;
}
.fixed{
width: 200px;
}
.flex-item{
flex-grow: 1;
}
<div class="container">
<div class="fixed"></div>
<div class="flex-item"></div>
</div>
Обратите внимание, что flex-боксы не имеют обратной совместимости со старыми браузерами, но являются отличным вариантом для таргетинга на современные браузеры (см. Также Caniuse и MDN). Отличное исчерпывающее руководство по использованию flex box доступно на CSS Tricks.
Я не очень разбираюсь в стратегиях дизайна HTML и CSS, но если вы ищете что-то простое, и оно будет соответствовать экрану автоматически (как и я), я считаю, что самое простое решение - заставить div вести себя как слова в параграф. Попробуйте указать display: inline-block
<div style="display: inline-block">
Content in column A
</div>
<div style="display: inline-block">
Content in column B
</div>
Вы можете или не должны указывать ширину DIV
Для этого вы можете использовать CSS-сетку, это длинная версия для иллюстрации:
div.container {
display: grid;
grid-template-columns: 220px 20px auto;
grid-template-rows: auto;
}
div.left {
grid-column-start: 1;
grid-column-end: 2;
grid-row-start: row1-start
grid-row-end: 3;
background-color: Aqua;
}
div.right {
grid-column-start: 3;
grid-column-end: 4;
grid-row-start: 1;
grid-row-end; 1;
background-color: Silver;
}
div.below {
grid-column-start: 1;
grid-column-end: 4;
grid-row-start: 2;
grid-row-end; 2;
}
<div class="container">
<div class="left">Left</div>
<div class="right">Right</div>
<div class="below">Below</div>
</div>
Или более традиционный метод с использованием float и margin.
В этом примере я включил цвет фона, чтобы показать, где что находится, а также что делать с контентом под плавающей областью.
Не вставляйте свои стили в реальную жизнь, извлеките их в таблицу стилей.
div.left {
width: 200px;
float: left;
background-color: Aqua;
}
div.right {
margin-left: 220px;
background-color: Silver;
}
div.clear {
clear: both;
}
<div class="left"> Left </div>
<div class="right"> Right </div>
<div class="clear">Below</div>
<div style="width: 200px; float: left; background-color: Aqua;"> Left </div>
<div style="margin-left: 220px; background-color: Silver;"> Right </div>
<div style="clear: both;">Below</div>
<div class="container" style="width: 100%;">
<div class="sidebar" style="width: 200px; float: left;">
Sidebar
</div>
<div class="content" style="margin-left: 202px;">
content
</div>
</div>
Это будет совместимо с различными браузерами. Без оставленного поля вы столкнетесь с проблемами с содержимым, работающим полностью слева, если ваш контент длиннее боковой панели.
Дайте первому элементу div поплавок влево и зафиксируйте его, второму div на 100% ширину влево. Это должно делать свое дело. Если вы хотите разместить предметы под ним, вам нужно ясно: оба на предмет, который вы хотите разместить ниже
Если вы не изменяете IE6, то всплыть второй <div>
и дать ему запас, равный (или, возможно, немного больше), чем первый <div>
фиксированная ширина.
HTML:
<div id="main-wrapper">
<div id="fixed-width"> lorem ipsum </div>
<div id="rest-of-space"> dolor sit amet </div>
</div>
CSS:
#main-wrapper {
100%;
background:red;
}
#fixed-width {
width:100px;
float:left
}
#rest-of-space {
margin-left:101px;
/* May have to increase depending on borders and margin of the fixd width div*/
background:blue;
}
Маржа учитывает возможность того, что "остальное пространство" <div>
может содержать больше контента, чем "фиксированная ширина" <div>
,
Не задавайте фиксированную ширину фона; если вам нужно визуально увидеть их как разные "столбцы", используйте трюк с искусственными столбцами.