使用CSS将Div拆分为2列

时间:2009-12-26 20:34:42

标签: css html css-float

我一直在尝试使用CSS将div拆分为两列,但我还没有设法让它工作。我的基本结构如下:

<div id="content">
  <div id="left">
     <div id="object1"></div>
     <div id="object2"></div>
  </div>

  <div id="right">
     <div id="object3"></div>
     <div id="object4"></div>
  </div>
</div>

如果我尝试将右边和左边的div放到各自的位置(右边和左边),它似乎忽略了内容div的背景颜色。我从各种网站尝试的其他代码似乎无法转换为我的结构。

感谢您的帮助!

14 个答案:

答案 0 :(得分:73)

这对我有用。我将屏幕划分为两半:20%和80%:

<div style="width: 20%; float:left">
   #left content in here
</div>

<div style="width: 80%; float:right">
   #right content in there
</div>

答案 1 :(得分:57)

当你浮动这两个div时,内容div会折叠到零高度。只需添加

<br style="clear:both;"/>
<#>在#right div之后但在内容div中。这将强制内容div包围两个内部浮动div。

答案 2 :(得分:47)

另一种方法是将overflow:hidden;添加到浮动元素的父元素。

溢出:隐藏会使元素变得适合浮动元素。

这样,它可以在css中完成,而不是添加另一个html元素。

答案 3 :(得分:16)

最灵活的方法:

#content::after {
  display:block;
  content:"";
  clear:both;
}

这与将元素附加到#content:

完全相同
<br style="clear:both;"/>

但没有实际添加元素。 :: after被称为伪元素。这比将overflow:hidden;添加到#content更好的唯一原因是,您可以使绝对定位的子元素溢出并仍然可见。此外,它还允许盒子阴影仍然可见。

答案 4 :(得分:9)

无论出于何种原因我都不喜欢清理方法,我依靠浮动和百分比宽度来做这样的事情。

这是一些在简单情况下有用的东西:

#content { 
  overflow:auto; 
  width: 600px; 
  background: gray; 
} 

#left, #right { 
  width: 40%; 
  margin:5px; 
  padding: 1em; 
  background: white; 
} 

#left  { float:left;  }
#right { float:right; } 

如果你在里面放了一些内容,你会发现它有效:

<div id="content">
  <div id="left">
     <div id="object1">some stuff</div>
     <div id="object2">some more stuff</div>
  </div>

  <div id="right">
     <div id="object3">unas cosas</div>
     <div id="object4">mas cosas para ti</div>
  </div>
</div>

您可以在此处查看:http://cssdesk.com/d64uy

答案 5 :(得分:8)

让孩子们成为inline-block,他们会并排排列:

#content {
   width: 500px;
   height: 500px;
}

#left, #right {
    display: inline-block;
    width: 45%;
    height: 100%;
}

请参阅Demo

答案 6 :(得分:3)

垂直划分div的最佳方法 -

#parent {
    margin: 0;
    width: 100%;
}
.left {
    float: left;
    width: 60%;
}
.right {
    overflow: hidden;
    width: 40%;
}

答案 7 :(得分:2)

我知道这篇文章很旧,但是如果你们中有人还在寻找更简单的解决方案。

#container .left,
#container .right {
    display: inline-block;
}

#container .left {
    width: 20%;
    float: left;
}
#container .right {
    width: 80%;
    float: right;
}

答案 8 :(得分:1)

浮动不会影响流量。我倾向于做的是添加一个

<p class="extro" style="clear: both">possibly some content</p>

在'包装div'的末尾(在本例中为内容)。我可以通过说可能需要这样一个段落来在语义基础上证明这一点。另一种方法是使用clearfix CSS:

#content:after {
  content: ".";
  display: block;
  height: 0;
  clear: both;
  visibility: hidden;
}

#content {
  display: inline-block;
}
/*  \*/
* html #content {
  height: 1%;
}

#content {
  display: block;
}
/*  */

评论的诡计是跨浏览器兼容性。

答案 9 :(得分:0)

这里最好的答案是Question 211383

现在,任何自尊的人都应该使用所述的&#34; micro-clearfix&#34;清除花车的方法。

答案 10 :(得分:0)

  1. 在父DIV中使字体大小等于零。
  2. 为每个子DIV设置宽度%。

    #content {
        font-size: 0;
    }
    
    #content > div {
        font-size: 16px;
        width: 50%;
    }
    
  3. *在Safari中,您可能需要设置49%才能使其正常工作。

答案 11 :(得分:0)

将两个分区分成两列非常简单,只需更好地指定列的宽度(如宽度:50%)并将float:left设置为左列,将float:右设置为右列。< / p>

答案 12 :(得分:0)

没有给出的答案回答原始问题。

问题是如何使用css将div分成2列。

以上所有答案实际上将2个div嵌入到一个div中以模拟2列。这是一个坏主意,因为您无法以任何动态方式将内容流入2列。

因此,除了上述内容之外,使用CSS定义为包含2列的单个div,如下所示...

.two-column-div {
 column-count: 2;
}

将上面的类作为一个类分配给div,它实际上将其内容流入2列。您可以进一步确定边距之间的差距。根据div的内容,您可能需要弄乱单词分隔值,这样您的内容就不会在列之间被切断。

答案 13 :(得分:0)

您可以使用flexbox来控制div元素的布局:

* { box-sizing: border-box; }

#content {
  background-color: rgba(210, 210, 210, 0.5);
  border: 1px solid #000;
  padding: 0.5rem;
  display: flex;
}

#left,
#right {
  background-color: rgba(10, 10, 10, 0.5);
  border: 1px solid #fff;
  padding: 0.5rem;
  flex-grow: 1;
  color: #fff;
}
<div id="content">
  <div id="left">
     <div id="object1">lorem ipsum</div>
     <div id="object2">dolor site amet</div>
  </div>

  <div id="right">
     <div id="object3">lorem ipsum</div>
     <div id="object4">dolor site amet</div>
  </div>
</div>