【问题标题】:css make layout cols left and right of main content div take up whole height of browser windowcss使主要内容div的左右布局cols占据浏览器窗口的整个高度
【发布时间】:2015-06-07 17:44:09
【问题描述】:

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

起初我尝试过类似https://jsfiddle.net/jr6av8n5/2/

但由于列的 100% 高度占用了父 div 的高度,因此它们不会占用整个屏幕空间。

<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/

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

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

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

谢谢

【问题讨论】:

    标签: html css layout height


    【解决方案1】:

    下面的演示显示了一个可能的解决方案,固定位置为headerfootermain 占据窗口的 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 上找到,因此您可以看到它在不同窗口大小下的运行情况。

    【讨论】:

    • body 和 html 高度为 100% 的问题(在小提琴中没有清楚地看到)是我在标题下有一个标题和一个水平菜单(假设标题的总高度+ menu is 150px) 在这个#main div之前;给出 100% 的高度使页面有 100% 的窗口高度加上 150px,创建一个大滚动条
    • @g0dl3ss 这会很困难,CSS3 有 calc(),但如果它需要在旧浏览器上运行,你可能需要一些 JavaScript。顺便说一句,除了 150xpx 的页眉之外,还有页脚吗?
    • 可能会有一个页脚,但不幸的是,当我回答另一个答案时,页眉需要流畅,因为其中包含文本,并且需要扩展以使文本以较低的分辨率保持在内部。我可以用 js 做到这一点,但我想避免它,我想没有 css 解决方案。感谢您的回复
    • @g0dl3ss 好吧,还有另一种选择 - 使用 table 或 css table,这是没有 js 和 css3 的唯一方法。或者,如果页眉/页脚可以是固定高度,您也可以将它们设为绝对高度,这样它们就不会超出 100% 的高度。但整体 css3+js 后备听起来是最好的选择。
    • 谢谢,我会研究一个 js 解决方案。
    【解决方案2】:

    我不知道我是否理解你的问题。

    在我看来,如果您在第一个 Fiddle 中为 html 和 body 添加 100% 的高度,它就可以正常工作。

    也许你已经看到滚动条了,因为默认情况下 body 有边距,除非设置为 0。

    然而这些天来,我总是在我的项目中加入,特别是在高度 100% 的情况下,这个:

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

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

    FIDDLE

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

    【讨论】:

    • body 和 html 高度为 100% 的问题(在小提琴中没有清楚地看到)是我在标题下有一个标题和一个水平菜单(假设标题的总高度+ menu is 150px) 在这个#main div之前;给出 100% 的高度使页面有 100% 的窗口高度加上 150px,创建一个大滚动条
    • 没问题。给你的横向条高度: calc (100% - 150px);假设 150px 是页眉和页脚组合的设置高度
    • 问题是标题没有设置高度(它有一些文本,为了使文本以较低的分辨率显示在里面,它需要扩展)。我可以用 js 做到这一点,但我宁愿避免它。
    • 危险的恕我直言。如果我需要更多空间来降低分辨率,我总是在我的标题中使用设置高度并使用媒体查询更改它。我喜欢控制带有文本的元素,特别是考虑到令人头疼的字体让跨浏览器感到头疼。但它是你的网络。不能再难过地帮你了。 GL
    • 我会尝试给定一个固定的高度并根据用户的分辨率进行更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多