没有针对此问题没有完整的CSS的解决方案。这个CSS“问题”已为人所知多年。由于多年来CSS的功能不断增强,我认为现在可能会有一个完整的CSS解决方案。但是,唉,没有。我已经尝试了很多东西,并且已经搜索到了高和低,并且问题依然存在。
据我所知,只有3种解决方案不需要第三方库:绝对定位,人造柱(双色重复背景)和JS。
唯一吸引我的两个解决方案是:人造色彩列和JS。我更喜欢JS解决方案,因为它更多地使用CSS。使用JS,如果您想稍后更改列宽或颜色,则不必重新处理背景图像。这是一个更具适应性和可重复使用的解决方案。我可以看到创建虚拟列的唯一优点是,如果客户端禁用JS,则您的布局不会中断。
JS解决方案(无需包装):https://jsfiddle.net/Kain52/uec9cLe4/
var side1 = document.getElementsByTagName('main')[0];
var side2 = document.getElementById('mainMenu');
var side1Height = side1.clientHeight;
var side2Height = side2.clientHeight;
if(side2Height < side1Height) { side2.style.height = side1Height + "px"; }
else { side1.style.height = side2Height + "px"; }
JS解决方案(需要包装):https://jsfiddle.net/Kain52/7udh55zq/
var wrapperHeight = document.getElementById('innerWrapper').clientHeight;
document.getElementsByTagName('main')[0].style.height = wrapperHeight + "px";
document.getElementById('mainMenu').style.height = wrapperHeight + "px";
说明:如果你使用一个div包装,那么你可以把它分配给包装的高度。如果你不使用包装,那么你可以将最短边的高度设置为最长边的高度。如果你知道你身边的菜单栏将永远是比你的内容更短,那么你只需要两行代码:
var contentHeight = document.getElementsByTagName('main')[0].clientHeight;
document.getElementById('mainMenu').style.height = contentHeight + "px";
你的问题确实含糊不清。你的意思是#wrapper是浏览器的大小吗? – SMacFadyen 2012-03-16 09:43:25
[CSS 100%height with padding/margin]可能的重复(http://stackoverflow.com/questions/485827/css-100-height-with-padding-margin) – 2012-03-16 09:48:12