我一直在尝试使用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的背景颜色。我从各种网站尝试的其他代码似乎无法转换为我的结构。
感谢您的帮助!
答案 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)
为每个子DIV设置宽度%。
#content {
font-size: 0;
}
#content > div {
font-size: 16px;
width: 50%;
}
*在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>