[英]Make a div fill the remaining horizontal space of a parent div with a dynamic width
[英]Make div fill remaining space of parent
我需要一些帮助定位div。 HTML结构如下:
<div class="container">
<div class="item">
<div class="left">
lorem lorem
</div>
<div class="right">
<p>right</p>
<p class="bottom">bottom</p>
</div>
</div>
</div>
我有以下CSS:
.container {
float: left;
padding: 15px;
width: 600px;
}
.item {
float: left;
padding: 15px;
width: 570px;
}
.left {
float: left;
padding: 40px 20px;
margin-right: 10px;
}
.right {
position: relative;
float: left;
}
.bottom {
position: absolute;
bottom: 0;
}
左div的宽度和高度是动态的。
我想要实现的是:
item
填充div的其余部分。 bottom
的段落应位于右侧div的底部。 这是一个代表我目标的简单图像:
以及JSFiddle演示的链接。
获得正确的.bottom
位置和宽度似乎是跨浏览器CSS解决方案的最大障碍。
1.漂浮
正如@joeell所展示的那样,灵活的宽度可以通过仅浮动左列并将overflow:hidden
应用于右列来实现。
.bottom
的位置无法在任何浏览器中实现。 对于具有相同,可变高度的浮动柱,没有CSS解决方案。 绝对定位的.bottom
元素必须位于右列div内,因此100%宽度将使其具有正确的大小。 但是,由于右列不一定是左柱一样高,定位.bottom
与bottom:0
不一定会放置在容器的底部。
2. HTML表和CSS表
通过给左单元格宽度为1px而不指定右单元格的宽度,可以实现灵活的宽度。 两个细胞都会长大以适应内容。 任何额外的空间都将被添加到右侧单元格中。
如果.bottom
位于右表格单元格内,则无法在Firefox中实现该位置。 相对位置对Firefox中的表格单元格没有影响; 绝对位置和100%宽度不会相对于右表格单元格。
如果.bottom
被视为右列中的单独表格单元格,则除Firefox之外的任何浏览器都无法实现右表格单元格和底部表格单元格的正确高度。 表格单元格的高度不同于它们的宽度(Firefox除外)。
3. CSS3 flexbox和CSS3网格
Flexbox和网格是不久的将来有前途的布局工具。 但是IE9或更早版本不支持flexbox,IE10以外的任何浏览器都不支持网格。 尚未测试是否可以实现此布局,但浏览器支持可能会阻止它们成为目前的选项。
目前似乎没有足够的CSS解决方案,可以在足够的相关浏览器中工作,可能的例外是flexbox(如果不需要支持IE9及更早版本)。
这里有一些修改过的演示,使用jQuery强制列具有相同的高度。 两个演示的CSS和jQuery是相同的。 HTML仅根据左右列中的内容有所不同。 这两个演示在所有浏览器中都经过良好测 相同的基本方法可用于纯JavaScript。
为了简单起见,我将左右div的内部填充移动到子元素( .content
)。
通过将它们显示为table-cell
并将父级display: table
为display: table
可以实现相同高度并保持在同一行的同级元素。
工作小提琴: http : //jsfiddle.net/SgubR/2/ (它还显示overflow: hidden
沿浮动元素技术创建一个列。后者需要一个clearfix)
CSS中的表格单元格使用您想要的任何HTML元素(section,div,span,li等),其语义与用于表格布局的表格,tr和td元素无关(除了视觉结果相同,这就是什么我们想要)。
display: table
在父级上设置 display: table-row
可以用在中间的元素上,但是如果没有它就可以使用,很好 display: table-cell
在每个孩子上设置display: table-cell
table-layout: fixed
会告诉浏览器切换到其他表格布局算法,他们不关心内容的数量,只关注CSS设置的宽度 vertical-align: top
在大多数情况下都需要vertical-align: top
(但你可以设置其他值,非常适合复杂的布局) border-collapse: separate
和/或border-spacing: 4px 6px
兼容性:IE8 +
如果需要,IE6 / 7的后备与内联块完全相同
只需向右列添加一个oveflow
,不要浮动它。
.right {
position: relative;
overflow: hidden;
}
这将使right
填写宽度的其余部分。
像这样的东西可能会起作用:
您正在寻找的主要关键点:
.right {
overflow: hidden;
background-color: #C82927;
}
这是因为称为“块格式化上下文”。 关于为什么在这里的伟大推理和教程: http : //colinaarts.com/articles/the-magic-of-overflow-hidden/#making-room-for-floats
然而,他们的高度并没有完全联系在一起; 在这个例子中,您的左侧块的高度仍然需要手动设置(因为它是一个浮动的容器)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.