如何在不使用表或JavaScript的情况下实现以下结构?白色边界代表div的边缘,与问题无关。
中间区域的大小会有所变化,但它会有精确的像素值,整个结构应该根据这些值缩放。为了简化它,我需要一种方法来设置“100% - n像素”的宽度为上-中和下-中div。
我很欣赏一个干净的跨浏览器解决方案,但如果不可能,CSS黑客也可以。
这里有个奖励。另一种结构我一直在挣扎,最终使用表格或JavaScript。它略有不同,但引入了新的问题。我主要是在基于jquery的窗口系统中使用它,但我想保持脚本的布局,只控制一个元素的大小(中间的一个)。
也许我有点傻,但桌子不是最明显的解决办法吗?
<div class="parent">
<div class="fixed">
<div class="stretchToFit">
</div>
.parent{ display: table; width 100%; }
.fixed { display: table-cell; width: 150px; }
.stretchToFit{ display: table-cell; vertical-align: top}
另一种方法,我已经想出在chrome更简单,但人是一个hack!
.fixed{
float: left
}
.stretchToFit{
display: table-cell;
width: 1%;
}
就像表格单元格一样,这应该水平填充行其余部分。然而,你会遇到一些奇怪的问题,它超过了它的父元素的100%,将宽度设置为百分比值可以解决这个问题。
虽然Guffa的答案在很多情况下都适用,但在某些情况下,你可能不希望左边和/或右边的填充部分成为中心div的父部分。在这些情况下,你可以在中心使用块格式化上下文,并将填充div左右浮动。下面是代码
HTML:
<div class="container">
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</div>
CSS:
.container {
width: 100px;
height: 20px;
}
.left, .right {
width: 20px;
height: 100%;
float: left;
background: black;
}
.right {
float: right;
}
.center {
overflow: auto;
height: 100%;
background: blue;
}
我觉得与嵌套的div相比,这种元素层次结构更自然,并且更好地代表页面上的内容。正因为如此,边框、填充和边距可以正常地应用于所有元素(即:这种“自然”超越了风格,并具有分支)。
注意,这只适用于div和其他共享“默认填充100%宽度”属性的元素。输入、表和其他可能需要你将它们包装在容器div中,并添加更多的css来恢复这种质量。如果你不幸处于这种情况,联系我,我会挖出css。
jsfiddle在这里:jsfiddle.net/RgdeQ
享受吧!