演示:http ://dabblet.com/gist/3768929
我使用非常有用的“box-sizing:border-box”属性来获得这个结果,请在此处阅读:paulirish.com/2012/box-sizing-border-box-ftw/
它与 IE8+ 兼容,您只需为 IE7 及以下版本稍微调整布局即可。你可以给侧边栏“位置:绝对”......这是最好的一个(没有太多麻烦)。
好吧,我之前已经做了无数次类似的布局,并且非常感谢 box-sizing 属性。以下是对更改的快速回顾:
#sidebar 现在有一个 'padding-top' 值等于 #newpostcreator 的高度。然后,#newpostcreator 再次使用负顶部定位将其拉回原位,其值等于其高度,在我们的示例中为:-206px。
请注意,我还使用“*”通用选择器为每个元素“位置:相对”。当您在页面上有多个绝对定位元素时,这非常有用,因此您不必为每个相应的容器指定相对定位。这主要是一个 DRY(不要重复自己)的事情,并使代码更清晰。这也通过'top''left''right'和'bottom'为每个元素提供了额外的位置控制。
此外,由于#sidebar 是“位置:固定”,它会从布局中移除并相对于视口定位。所以我们需要一些空白空间让它在不中断/重叠页面内容的情况下休息。我通过给 #container 一个等于侧边栏宽度的 padding-left 值来做到这一点。但我看到你已经在你的小提琴中做到了。我只是稍微改进了一下。
现在回到侧边栏,我提到给它一个 206 像素的 padding-top。要了解这背后的逻辑,您应该了解 box-sizing 在布局中的作用。基本上,带有“border-box”的元素的填充和边框都位于容器内。因此,无论您指定元素的宽度如何,添加填充/边框都不会添加其最终宽度/高度,它将包含在其中。请记住,这不适用于边距。
因此,侧边栏中剩余的空间减去 206px 的填充是 100%,我们现在将其分配给 #notiarea。
差不多就是这样。如果您研究代码,您将获得比我能够提供的更好的理解。请务必查看链接,并记得为旧版本的 Firefox、Opera 和 Chrome 添加供应商前缀到 box-sizing。