我想把两个<div>
放在一起。右<div>
约为200px;并且左<div>
必须填满屏幕宽度的其余部分?我怎么能这样做?
答案 0 :(得分:394)
您可以使用 flexbox 来布置您的商品:
#parent {
display: flex;
}
#narrow {
width: 200px;
background: lightblue;
/* Just so it's visible */
}
#wide {
flex: 1;
/* Grow to rest of container */
background: lightgreen;
/* Just so it's visible */
}
<div id="parent">
<div id="wide">Wide (rest of width)</div>
<div id="narrow">Narrow (200px)</div>
</div>
这基本上只是刮擦flexbox的表面。 Flexbox可以做很多惊人的事情。
对于较早的浏览器支持,您可以使用CSS float 和宽度属性来解决它。
#narrow {
float: right;
width: 200px;
background: lightblue;
}
#wide {
float: left;
width: calc(100% - 200px);
background: lightgreen;
}
<div id="parent">
<div id="wide">Wide (rest of width)</div>
<div id="narrow">Narrow (200px)</div>
</div>
答案 1 :(得分:133)
我不知道这是否仍是当前问题,但我遇到了同样的问题并使用了CSS display: inline-block;
标记。
将它们包装在一个div中,以便它们可以正确定位。
<div>
<div style="display: inline-block;">Content1</div>
<div style="display: inline-block;">Content2</div>
</div>
请注意,内联样式属性的使用仅用于此示例的简洁性,当然这些用于移动到外部CSS文件。
答案 2 :(得分:27)
不幸的是,对于一般情况来说,这不是一件容易的事情。最简单的方法是添加一个css样式的属性“float:right;”然而,对于你的200px div,这也会导致你的“主”-div实际上是全宽度,并且那里的任何文本都会漂浮在200px-div的边缘,这通常看起来很奇怪,具体取决于内容(几乎在所有情况下,除非它是浮动图像)。
修改: 正如Dom所建议的那样,包装问题当然可以通过保证金来解决。傻我。
答案 3 :(得分:18)
@roe和@MohitNanda建议的方法有效,但如果正确的div设置为float:right;
,那么它必须首先出现在HTML源代码中。这会打破从左到右的读取顺序,如果在关闭样式的情况下显示页面,则可能会造成混淆。如果是这种情况,最好使用包装器div和绝对定位:
<div id="wrap" style="position:relative;">
<div id="left" style="margin-right:201px;border:1px solid red;">left</div>
<div id="right" style="position:absolute;width:200px;right:0;top:0;border:1px solid blue;">right</div>
</div>
证明:
剩下 对编辑:嗯,有趣。预览窗口显示正确格式化的div,但渲染的帖子项不显示。对不起,你必须亲自试试。
答案 4 :(得分:14)
我今天遇到了这个问题。基于上述解决方案,这对我有用:
<div style="width:100%;">
<div style="float:left;">Content left div</div>
<div style="float:right;">Content right div</div>
</div>
只需使父div跨越整个宽度并浮动包含在其中的div。
答案 5 :(得分:7)
<强>更新强>
如果您需要将元素放在一行中,则可以使用Flex Layout。在这里你有另一个Flex tutorial。这是一个很棒的CSS工具,即使它不是100%兼容,每天support都会越来越好。这很简单:
HTML
<div class="container">
<div class="contentA"></div>
<div class="contentB"></div>
</div>
CSS
.container {
display: flex;
width: 100%;
height: 200px;
}
.contentA {
flex: 1;
}
.contentB {
flex: 3;
}
你得到的是一个总容量为4个单位的容器,它与子女共享空间的关系为1/4和3/4。
我在CodePen中做了一个解决问题的例子。我希望它有所帮助。
http://codepen.io/timbergus/pen/aOoQLR?editors=110
非常
也许这只是一个废话,但你试过一张桌子吗?它不直接使用CSS来定位div,但它工作正常。
您可以创建一个1x2表并将divs
放入其中,然后使用CSS格式化表格以根据需要放置它们:
<table>
<tr>
<td>
<div></div>
</td>
<td>
<div></div>
</td>
</tr>
</table>
注意强>
如果您想避免使用该表格,如前所述,您可以使用float: left;
和float: right;
,并在以下元素中,不要忘记添加clear: left;
,{ {1}}或clear: right;
以便清理职位。
答案 6 :(得分:6)
div1 {
float: right;
}
div2 {
float: left;
}
只要为分隔这两个列块的元素设置clear: both
,这就可以正常工作。
答案 7 :(得分:4)
我遇到了同样的问题并且Mohits版本有效。如果你想在html中保留你的左右顺序,试试这个。在我的例子中,左边的div调整大小,右边的div保持宽度260px。
<强> HTML 强>
<div class="box">
<div class="left">Hello</div>
<div class="right">World</div>
</div>
<强> CSS 强>
.box {
height: 200px;
padding-right: 260px;
}
.box .left {
float: left;
height: 200px;
width: 100%;
}
.box .right {
height: 200px;
width: 260px;
margin-right: -260px;
}
诀窍是在主盒子上使用右边的填充物,但是再次使用右边的边框再次使用该边距。
答案 8 :(得分:2)
正如大家所指出的那样,你可以通过在RHS内容上设置float:right;
并在LHS上设置负余量来实现这一目标。
但是..如果你没有在LHS上使用float: left;
(就像Mohit那样),那么你将获得踩踏效果,因为LHS div仍将消耗布局中的边距空间
但是...... LHS float会收缩包装内容,因此如果不可接受,你需要插入一个定义的宽度子节点,此时你也可以在父节点上定义宽度。
但是......正如David指出的那样,您可以更改标记的读取顺序以避免LHS浮动要求,但这具有可读性和可能的可访问性问题。
然而..这个问题可以是solved浮点数给出一些额外的标记
(警告:我不同意该示例中的.clearing div,有关详细信息,请参阅here)
考虑到所有事情,我想我们大多数人都希望有一个非贪婪的宽度:留在CSS3 ......
答案 9 :(得分:2)
这不是每个人的答案,因为它在IE7中不受支持,但您可以使用它然后使用IE7的备用答案。它是display:table,display:table-row和display:table-cell。请注意,这不是使用表格进行布局,而是使用样式div,这样就可以很好地排列上面的所有麻烦。我是一个html5应用程序,所以效果很好。
本文展示了一个示例:http://www.sitepoint.com/table-based-layout-is-the-next-big-thing/
以下是样式表的样子:
.container {
display: table;
width:100%;
}
.left-column {
display: table-cell;
}
.right-column {
display: table-cell;
width: 200px;
}
答案 10 :(得分:2)
我使用float和overflow-x:hidden的混合。最小的代码,始终有效。
https://jsfiddle.net/9934sc4d/4/ - 加上你不需要清理你的漂浮物!
.left-half{
width:200px;
float:left;
}
.right-half{
overflow-x:hidden;
}
答案 11 :(得分:-1)
用我的一个类似的网站来解释:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<style TYPE="text/css"><!--
.section {
_float: right;
margin-right: 210px;
_margin-right: 10px;
_width: expression( (document.body.clientWidth - 250) + "px");
}
.navbar {
margin: 10px 0;
float: right;
width: 200px;
padding: 9pt 0;
}
--></style>
</head>
<body>
<div class="navbar">
This will take up the right hand side
</div>
<div class="section">
This will fill go to the left of the "navbar" div
</div>
</body>
</html>
答案 12 :(得分:-7)
只需使用z-index就可以了。确保标记为固定或绝对的位置。然后没有什么会像浮动标签一样四处移动。