css 使主要内容的左右布局列 div 占据浏览器的整个高度 window

css make layout cols left and right of main content div take up whole height of browser window

我正在尝试使 div 的左右图形占据浏览器的整个高度 window。

起初我试过这样的东西https://jsfiddle.net/jr6av8n5/2/

但是由于列的 100% 高度占据了父级 div 的高度,它们不会占据整个屏幕 space。

<div id="main">
    <div id="leftLayoutCol">
    </div>
    <div id="rightLayoutCol">
    </div>
        <h1>TEST</h1>
        <h1>TEST</h1>
        <h1>TEST</h1>
        <h1>TEST</h1>
        <h1>TEST</h1>
</div>

h1 {padding:0px;margin:0px;}

#main {
    position: fixed;
    width: 55%;
    height: 100%;
    max-width: 1200px;
    margin-left: 50%;
    left: -25%;
    background-color: grey;
}

#leftLayoutCol {
    display: inline-block;
    height: 100%;
    position: absolute;
    width: 40px;
    left: -40px;
    background-color: green;
}

#rightLayoutCol {
    display: inline-block;
    height: 100%;
    position: absolute;
    width: 40px;
    right: -40px;
    background-color: green;
}

然后我尝试了这样的事情https://jsfiddle.net/4d8d8tds/2/

这更接近我想要实现的目标,但它不是可靠的解决方案,因为如果调整浏览器 window 的大小,#main div 不再水平居中以及其他一些问题。

我已经试过给 body 设置 100% 的高度并且它起作用了,除了它考虑了所有其他页面元素的高度并将它加到 body 高度使得滚动条出现并且通常看起来很糟糕(一切都向下移动)。

有什么建议吗? (可能不适用于 css3,因为在旧版浏览器上需要 运行)

谢谢

不知道你的问题我理解的对不对

在我看来,如果您在第一个 Fiddle 中将 html 和 body 的高度都增加 100%,效果会很好。

也许你见过滚动条,因为默认情况下 body 有边距,除非设置为 0。

然而这些天我总是在我的项目中加入,特别是在使用 100% 高度时,这个:

* {
-moz-box-sizing: border-box;
     box-sizing: border-box;
}

因此填充和边框永远不会弄乱您的任何元素。我推荐你使用它。

FIDDLE

已编辑:如果元素在 100% 高度容器之外,您可以减去设置的高度 height: calc (100% - 150px);假设 150px 是这些元素组合的总高度

下面的演示显示了一个可能的解决方案,固定位置 headerfootermain 占据 window 的 100% 高度。由于 headerfooter 的高度无法预测,我添加了一点 javascript 来计算。

var callback = function () {

    var windowHeight = $(window).height();
    var headerHeight = $("#header").height();
    var footerHeight = $("#footer").height();
    var mainHeight = windowHeight - headerHeight - footerHeight;

    $("#main").css({
        "min-height": mainHeight + "px",
        "margin-top": headerHeight + "px",
        "margin-bottom": footerHeight + "px"
    });

};

$(document).ready(callback);
$(window).resize(callback);
body, h1 {
    margin: 0;
}
#header, #footer {
    background: green;
    position: fixed;
    z-index: 1;
    left: 0;
    width: 100%;
}
#header {
    top: 0;
}
#footer {
    bottom: 0;
}
#main {
    background: silver;
    position: relative;
    width: 50%;
    height: 100%;
    max-width: 1200px;
    margin: 0 auto;
}
#left, #right {
    background: navy;
    display: block;
    width: 40px;
    height: 100%;
    position: absolute;
    top: 0;
}
#left {
    left: -40px;
}
#right {
    right: -40px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="header">header</div>
<div id="main">
    <div id="left"></div>
    <div id="right"></div>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
    <h1>TEST</h1>
</div>
<div id="footer">footer</div>

也可在 JSFiddle 上使用,因此您可以看到不同 window 尺寸的效果。