如何将div并排放置


241

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


2
接下来的时间也将您的示例代码请这样的问题逐渐明朗的开发商在这里..
罗布

1
位置:绝对是一种选择吗?您可以将位置设置在容器的侧面,然后div将采用新的尺寸。
AlexanderMP

Answers:


363

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

  1. 使用CSS float属性

    <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属性 -可用于使divs的行为类似于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>

有更多的方法,但是这两种是最流行的。


17
@filoxo的HTML 5解决方案,请改用该解决方案
TheMcMurder 2015年

1
以前的评论者说的是:考虑将每个filoxo的HTML5解决方案添加为#3。
艾哈迈德·法西

2
@TheMcMurder:对于需要支持旧浏览器(例如IE <11)的我们来说,这不是一个选择。
Oyvind

@Oyvind,您完全正确。这取决于您的用例。如果您支持IE 8、9或10,则必须提供polyfill支持,我建议您使用诸如polyfill.io cdn.polyfill.io/v2/docsgithub.com/10up/flexibility之类的服务,但您可能会非常严格防止使用填充胶的要求。
TheMcMurder

1
溢出:隐藏做什么?这不是指定高度的元素吗?
迈克尔”

176

CSS3引入了弹性盒(也称为弹性盒),它也可以实现此行为。

只需定义第一个div的宽度,然后给第二个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演示

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


5
花了整整一天的时间找到解决方案,这个答案解决了!我有3个和4个面板并排放置的4个面板,有时其中没有任何东西。它们都生活在一个包含div且周围带有边框的div中。在第一个div情况下,整个float:left离开了一个div,使我越过了底部的边框,因为生成的标签是动态的。标签是spans cuz,这是ASP呈现它们的方式。没有float:left在同一行中仅产生了3个div。使用表是不可能的。谢谢!
发光的

是否有向后兼容的方法可以使用类似的方法,例如,对于我们仍然必须支持IE 8-10的贫困用户
Ben A. Hilleli,2015年

@ BenA.Hilleli可能取决于您的要求(例如,渐进式增强或正常降级),但是通过快速搜索可以找到(有点过时)“如何在现实世界中使用flexbox”指南以及Flexie.js,支持IE6-9。或者,尝试其他任何答案,因为它们可以实现相同的目的。
filoxo 2015年

20

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


5
可能display:flex是最好的解决方案,但我认为inline-block也是出色的,因为它可以在更多浏览器上使用。顺便说一句,您可能需要将两个div都用换行,<div style="white-space:nowrap">以防止调整大小。
约翰·亨克尔

这是模板的好解决方案。唯一的问题是它将内容较少的div推到底部。如何将其推到顶部?
几乎是初学者,

1
nvm,只需要搜索它,解决方案是:vertical-align:top;
几乎是初学者,

@JohnHenckel这意味着它不适用于所有浏览器,难道它不能以相同的方式适用于所有浏览器吗?inline-block码。
杜·盖安莎

@guillermo它运行不正常。所有的div并没有并排放置。这是为什么。不清楚。
加文杜

14

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

2

给第一个div左浮动并固定,第二个div 100%宽度左移。这应该够了吧。如果要在其下面放置物品,则需要清除:在要放置在下面的物品上


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>

这将与跨浏览器兼容。如果没有左页边距,则内容比边栏要长时,内容将一直流到最左边。


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>

不要给固定宽度一个背景。如果您需要明显地将它们视为不同的“列”,请使用“ 仿列”技巧。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.