如何使div填充剩余宽度?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
我如何才能div2
填满其余部分?
如何使div填充剩余宽度?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
我如何才能div2
填满其余部分?
Answers:
试试这样的事情:
<style>
#divMain { width: 500px; }
#left-div { width: 100px; float: left; background-color: #fcc; }
#middle-div { margin-left: 100px; margin-right: 100px; background-color: #cfc; }
#right-div { width: 100px; float: right; background-color: #ccf; }
</style>
<div id="divMain">
<div id="left-div">
left div
</div>
<div id="right-div">
right div
</div>
<div id="middle-div">
middle div<br />bit taller
</div>
</div>
div自然会占用其容器的100%宽度,因此无需显式设置此宽度。通过添加与两侧div相同的左/右页边距,它自己的内容被强制置于它们之间。
请注意,“中间格”云后的HTML“正确的div”
此解决方案甚至比提供的解决方案更简单Leigh
。它实际上是基于它的。
在这里,您会注意到中间元素(在我们的示例中为"content__middle"
class)根本没有指定任何尺寸属性-完全没有宽度,填充或边距相关的属性-而是overflow: auto;
(见注1)。
最大的好处是,现在您可以在左右元素中指定amax-width
和amin-width
。这对于流体布局来说是很棒的..因此响应迅速布局:-)
注意1:在需要将margin-left
&margin-right
属性添加到"content__middle"
类的情况下,使用Leigh的答案。
在此,左右元素(带有"content__left"
和"content__right"
)具有固定的宽度(以像素为单位):因此称为非流体布局。
http://jsbin.com/qukocefudusu/1/edit?html,css,output上的实时演示
<style>
/*
* [1] & [3] "floats" makes the 2 divs align themselves respectively right & left
* [2] "overflow: auto;" makes this div take the remaining width
*/
.content {
width: 100%;
}
.content__left {
width: 100px;
float: left; /* [1] */
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto; /* [2] */
}
.content__right {
width: 100px;
float: right; /* [3] */
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
这里的left和right元素(带有类"content__left"
和"content__right"
)具有可变的宽度(以百分比表示),但也具有最小和最大宽度:因此称为流体布局。
带有max-width
属性http://jsbin.com/runahoremuwu/1/edit?html,css,output的流畅演示中的实时演示
<style>
/*
* [1] & [3] "floats" makes the 2 divs align themselves respectively right & left
* [2] "overflow: auto;" makes this div take the remaining width
*/
.content {
width: 100%;
}
.content__left {
width: 20%;
max-width: 170px;
min-width: 40px;
float: left; /* [1] */
background-color: #fcc;
}
.content__middle {
background-color: #cfc;
overflow: auto; /* [2] */
}
.content__right {
width: 20%;
max-width: 250px;
min-width: 80px;
float: right; /* [3] */
background-color: #ccf;
}
</style>
<div class="content">
<div class="content__left">
max-width of 170px & min-width of 40px<br />left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>
</div>
<div class="content__right">
max-width of 250px & min-width of 80px<br />right div<br/>right div<br/>right div<br/>right div<br/>
</div>
<div class="content__middle">
middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller
</div>
</div>
在以下网络浏览器上的BrowserStack.com上进行了测试:
overflow
创建了块格式化上下文?将display: flex
有同样的效果?
overflow-y: hidden
了它,因为a)设置了允许的宽度,b)具有最好的浏览器支持,c)不是桌子
Flex-boxs是解决方案-很棒。十年来,我一直想从CSS中得到这样的东西。您所需要做的就是display: flex
为您的“ Main”样式添加样式flex-grow: 100
(并且100是任意的-确切地说是100并不重要)。尝试添加此样式(添加颜色以使效果可见):
<style>
#Main {
background-color: lightgray;
display: flex;
}
#div1 {
border: 1px solid green;
height: 50px;
display: inline-flex;
}
#div2 {
border: 1px solid blue;
height: 50px;
display: inline-flex;
flex-grow: 100;
}
#div3 {
border: 1px solid orange;
height: 50px;
display: inline-flex;
}
</style>
有关弹性盒的更多信息,请访问:https://css-tricks.com/snippets/css/a-guide-to-flexbox/
使用CSS Flexbox flex-grow
属性可实现此目的。
.main {
display: flex;
}
.col-1, .col-3 {
width: 100px;
}
.col-2 {
flex-grow: 1;
}
<div class="main">
<div class="col-1" style="background: #fc9;">Left column</div>
<div class="col-2" style="background: #eee;">Middle column</div>
<div class="col-3" style="background: #fc9;">Right column</div>
</div>
尽管bit
发布答案的时间较晚,但这是不使用边距的替代方法。
<style>
#divMain { width: 500px; }
#div1 { width: 100px; float: left; background-color: #fcc; }
#div2 { overflow:hidden; background-color: #cfc; }
#div3 { width: 100px; float: right; background-color: #ccf; }
</style>
<div id="divMain">
<div id="div1">
div 1
</div>
<div id="div3">
div 3
</div>
<div id="div2">
div 2<br />bit taller
</div>
</div>
这种方法就像魔术一样起作用,但是这里是一个解释:)\
必须占用剩余空间的Div必须是一个类。其他div可以是id,但它们必须具有宽度。
CSS:
#main_center {
width:1000px;
height:100px;
padding:0px 0px;
margin:0px auto;
display:block;
}
#left {
width:200px;
height:100px;
padding:0px 0px;
margin:0px auto;
background:#c6f5c6;
float:left;
}
.right {
height:100px;
padding:0px 0px;
margin:0px auto;
overflow:hidden;
background:#000fff;
}
.clear {
clear:both;
}
HTML:
<body>
<div id="main_center">
<div id="left"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
</body>
以下链接具有有效的代码,该代码应该可以解决其余的区域覆盖问题。
我一直在寻找解决该问题的方法,我需要在中心固定一个div宽度,而在任一侧都需要一个流体宽度div,所以我提出了以下建议,并认为如果有人需要,可以将其张贴在这里。
#wrapper {
clear: both;
width: 100%;
}
#wrapper div {
display: inline-block;
height: 500px;
}
#center {
background-color: green;
margin: 0 auto;
overflow: auto;
width: 500px;
}
#left {
float: left;
}
#right {
float: right;
}
.fluid {
background-color: yellow;
width: calc(50% - 250px);
}
<div id="wrapper">
<div id="center">
This is fixed width in the centre
</div>
<div id="left" class="fluid">
This is fluid width on the left
</div>
<div id="right" class="fluid">
This is fluid width on the right
</div>
</div>
如果更改#center
元素的宽度,则需要将的width属性更新.fluid
为:
width: calc(50% - [half of center width]px);