如何使用CSS并排浮动3个div?


270

我知道如何使2个div并排漂浮,只需将一个div漂浮在左侧,另一个就漂浮在右侧。

但是如何使用3个div来做到这一点呢?或者我应该只为此使用表格?


3
信息不足。层有多宽?
Josh Stodola,2010年

8
我会display: inline-block那些家伙,而不是浮动他们。如果它们的宽度总和小于容器的宽度,则它们将彼此相邻。
亚当·怀特

我建议使用“显示:表”。这是最可维护和最可靠的解决方案。参见stackoverflow.com/questions/14070787/…–
约翰·亨克尔

Answers:


300

只是给他们一个宽度和float: left;,这是一个例子:

<div style="width: 500px;">
 <div style="float: left; width: 200px;">Left Stuff</div>
 <div style="float: left; width: 100px;">Middle Stuff</div>
 <div style="float: left; width: 200px;">Right Stuff</div>
 <br style="clear: left;" />
</div>

6
如果您希望它们随着页面扩展而全部扩展怎么办?
CodyBugstein 2014年

31
@imray只使用%而不是px
TehTris

9
您能否详细说明为什么特别要使用<br style="clear: left;" />该样式。
Mike de Klerk 2015年

2
@MikedeKlerk是一个明确的解决方案,以避免父项崩溃。
Angel Politis

正如@Nick Craver解释的那样,您应该为所有元素赋予float:left属性。发生这种情况是因为float属性指定了如何沿其父容器的左侧或右侧放置元素。
Nesha Zoric '18

130

现代的方法是使用CSS flexbox,请参阅支持表

.container {
  display: flex;
}
.container > div {
  flex: 1; /*grow*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>

您也可以使用CSS网格,请参阅支持表

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr; /* fraction*/
}
<div class="container">
  <div>Left div</div>
  <div>Middle div</div>  
  <div>Right div</div>
</div>


52

与您对两个div进行处理的方式相同,也只需将第三个div左右浮动。

<style>
  .left{float:left; width:33%;}
</style>

<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>

3
但是DIV是块级元素,对吗?然后如何将它们并排放置,而不是放在下一行中(因为块级元素以换行符开始和结束)。浮动也会对其产生其他影响吗?
Ashwin

26

将它们全部漂浮

确保指定了一个宽度,使其可以全部放入其容器(另一个div或窗口)中,否则它们将自动换行


23
<br style="clear: left;" />

有人在那里张贴的那个代码,它成功了!!!当我在关闭容器DIV之前粘贴它时,它有助于清除所有后续DIV,使其与我在顶部并排创建的DIV重叠!

<div>
<div class="left"></div>
<div class="left"></div>
...
...
<div class="left"></div>
<!--  then magic trick comes here  -->
<br style="clear: left;" />
</div>

多田!! :)


16

将所有三个div浮动到左侧。像这儿:

.first-div {
  width:370px;
  height:150px;
  float:left;
  background-color:pink;
}

.second-div {
  width:370px;
  height:150px;
  float:left;
  background-color:blue;
}

.third-div {
  width:370px;
  height:150px;
  float:left;
  background-color:purple;
}

6
关键是我的答案是最正确的,当一个新人在互联网上搜索此问题时,他们会发现我的答案对他们最有帮助。
2014年

2
那可能。但是它没有任何解释。在该站点上可以复制其他答案,将多个部分答案合并为一个更好的合并答案。您可以编辑并完成您的。但是,新用户有一些限制(更新,少量链接),因此我仍然建议不要集中精力于已回答的老问题。
cfi

@cfi谢谢,我将其保留以备将来参考。
阿文2014年

10

我通常只将第一个浮动到左边,第二个浮动到右边。然后第三个自动在它们之间对齐。

<div style="float: left;">Column 1</div>
<div style="float: right;">Column 3</div>
<div>Column 2</div>

5
调整浏览器大小时,这不会引起混乱吗?
CodyBugstein 2014年

10
<style>
.left-column
{
float:left;
width:30%;
background-color:red;
}
.right-column
{
float:right;
width:30%;
background-color:green;
}
.center-column
{
margin:auto;
width:30%;
background-color:blue;
}
</style>

<div id="container">
<section class="left-column">THIS IS COLUMN 1 LEFT</section>
<section class="right-column">THIS IS COLUMN 3 RIGHT</section>
<section class="center-column">THIS IS COLUMN 2 CENTER</section>
</div>

这种方法的优点是,只要您将每一列的宽度保持在100%以下,就可以设置为彼此独立,如果使用3 x 30%,则将其余的10%分成5%的分隔符,以分隔各列



7

尝试在样式中添加“显示:块”

<style>
   .left{
          display: block;
          float:left; 
          width:33%;
    }
</style>


<div class="left">...</div>
<div class="left">...</div>
<div class="left">...</div>

6

我没有看到引导程序的答案,所以这是值得的:

<div class="col-xs-4">Left Div</div>
<div class="col-xs-4">Middle Div</div>
<div class="col-xs-4">Right Div</div>
<br style="clear: both;" />

让Bootstrap找出百分比。我想清除两者,以防万一。


1
在引导程序4中,我认为您必须将整个内容包装在具有row类的div中。
John Grabauskas

5

我更喜欢这种方法,在较旧版本的IE中很少支持浮点数(真的吗?)

.column-left{ position:absolute; left: 0px; width: 33.3%; background: red; }
.column-right{position:absolute; left:66.6%; width: 33.3%; background: green; }
.column-center{ position:absolute; left:33.3%; width: 33.3%; background: yellow; }

更新:当然,要使用此技术,并且由于绝对定位,您需要将div封装在容器上,并进行后处理以定义if的高度,如下所示:

jQuery(document).ready(function(){ 
    jQuery('.main').height( Math.max (
        jQuery('.column-left').height(),
        jQuery('.column‌​-right').height(),
        jQuery('.column-center').height())
    ); 
});

这并不是世界上最令人惊讶的事情,但至少在老版本的IE上不会中断。


当然,要使用此技术,并且由于绝对定位,您需要将div封装在容器上,并进行后处理以定义if的高度,如下所示:
jpbourbon 2014年

jQuery(document).ready(function(){jQuery('。main')。height(Math.max(jQuery('。column-left')。height(),jQuery('。column-right')。height (),jQuery('。column-center')。height()));}); 这不是世界上最令人惊奇的事情,但至少在老版本的IE上不会中断。
jpbourbon 2014年

4

但这可以在Chrome浏览器中使用吗?

浮动每个div并为每个行设置clear;如果您不想的话,不需要设置宽度。适用于Chrome 41,Firefox 37,IE 11

点击查看JS小提琴

的HTML

<div class="stack">
    <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
    </div>
        <div class="row">
        <div class="col">
            One
        </div>
        <div class="col">
            Two
        </div>
                    <div class="col">
            Three
        </div>
    </div>
</div>

的CSS

.stack .row { 
clear:both;

}
.stack .row  .col    {
    float:left;
      border:1px solid;

}

3

这是我设法在<footer>元素内执行类似操作的方式:

<div class="content-wrapper">

    <div style="float:left">
        <p>&copy; 2012 - @DateTime.Now.Year @Localization.ClientName</p>
    </div>

    <div style="float:right">
        <p>@Localization.DevelopedBy <a href="http://leniel.net" target="_blank">Leniel Macaferi</a></p>
    </div>

    <div style="text-align:center;">
        <p>☎ (24) 3347-3110 | (24) 8119-1085&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;✉ @Html.ActionLink(Localization.Contact, MVC.Home.ActionNames.Contact, MVC.Home.Name)</p>
    </div>

</div>

CSS:

.content-wrapper
{
    margin: 0 auto;
    max-width: 1216px;
}

2

@Leniel这个方法很好,但是您需要为所有浮动div添加宽度。我会说使它们相等的宽度或分配固定的宽度。就像是

.content-wrapper > div { width:33.3%; }

您可以为每个div分配类名,而不是添加inline style,这不是一个好习惯。

确保使用clearfix div或clear div以避免以下内容保持在这些div之下。

您可以在此处找到有关如何使用clearfix 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.