如何并排放置div

时间:2010-04-14 13:28:46

标签: html css

我有一个设置为100%宽度的主包装div。在里面,我想有两个div,一个是固定宽度,另一个填充剩余的空间。如何浮动第二个div以填充剩余的空间。谢谢你的帮助。

7 个答案:

答案 0 :(得分:313)

有很多方法可以满足您的要求:

  1. 使用CSS float property

    <div style="width: 100%; overflow: hidden;">
        <div style="width: 600px; float: left;"> Left </div>
        <div style="margin-left: 620px;"> Right </div>
    </div>
    
  2. 使用CSS display property - 可用于使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>
    
  3. 还有更多方法,但这两种方法最受欢迎。

答案 1 :(得分:152)

CSS3引入了flexible boxes(又名.flex box),它也可以实现这种行为。

只需定义第一个div的宽度,然后给第二个flex-grow1,这将允许它填充父级的剩余宽度。

.container{
    display: flex;
}
.fixed{
    width: 200px;
}
.flex-item{
    flex-grow: 1;
}
<div class="container">
  <div class="fixed"></div>
  <div class="flex-item"></div>
</div>

jsFiddle demo

请注意,弹性框不向后兼容旧版浏览器,但对于定位现代浏览器是一个很好的选择(另请参阅CaniuseMDN)。有关如何使用弹性框的详尽综合指南,请参见CSS Tricks

答案 2 :(得分:12)

我对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的宽度

答案 3 :(得分:10)

您可以使用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>

答案 4 :(得分:2)

<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>

这将是跨浏览器兼容的。如果您的内容比侧边栏长,那么如果没有保证金,您将遇到内容一直向左运行的问题。

答案 5 :(得分:1)

给第一个div一个浮动左边并固定,第二个div 100%宽度一个浮动左边。这应该够了吧。如果你想在它下面放置物品,你需要一个明确的:你想放在下面的物品上

答案 6 :(得分:1)

如果你没有使用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>

不要给固定宽度一个背景;如果您需要将这些视为不同的“列”,请使用Faux Columns技巧。