我需要一些定位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的宽度填充div的其余部分。bottom
的段落应位于右侧div的底部。这是一个代表我目标的简单图像:
指向JSFiddle demo的链接。
答案 0 :(得分:10)
获得.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
)。
答案 1 :(得分:9)
同样高度的同级元素可以通过将其显示为table-cell
,将父级显示为display: table
来实现。
工作小提琴:http://jsfiddle.net/SgubR/2/(它还显示 overflow: hidden
沿浮动元素技术创建列。后者需要一个clearfix)
CSS中的表格单元格使用您想要的任何HTML元素(section,div,span,li等),其语义与用于表格布局的table,tr和td元素无关(除了可视结果相同) ,这就是我们想要的。)
display: table
设置在父display: table-row
可用于中间的元素,但如果没有它,则可以使用display: table-cell
table-layout: fixed
会告诉浏览器切换到其他表格布局算法,他们不关心内容的数量,只关心CSS设置的宽度vertical-align: top
(但您可以设置其他值,非常适合复杂的布局)border-collapse: separate
和/或border-spacing: 4px 6px
兼容性:IE8 +
如果需要,IE6 / 7的后退与内联块
以前答案中的较长解释: here 和 there 以及 faux-columns 的旧方法>(你的设计必须考虑到这种技术)
答案 2 :(得分:2)
只需将oveflow
添加到右栏,不要将其浮动。
.right {
position: relative;
overflow: hidden;
}
这将使right
填充宽度的其余部分。
答案 3 :(得分:1)
这样的事可能有用:
您正在寻找的主要关键字:
.right {
overflow: hidden;
background-color: #C82927;
}
这是由于称为“块格式化上下文”。关于为什么在这里有很好的推理和教程:http://colinaarts.com/articles/the-magic-of-overflow-hidden/#making-room-for-floats
然而,他们的高度并没有完全联系在一起;在这个例子中,您的左侧区块的高度仍然需要手动设置(因为它是一个浮动的容器)