Fill remaining vertical space - only CSS

前端 未结 9 1379
日久生厌
日久生厌 2020-11-28 09:15

I need to fill the remaining vertical space of #wrapper under #first with #second div.

I need an only CSS sol

相关标签:
9条回答
  • 2020-11-28 09:38

    you need javascript and some client side calculations: http://jsfiddle.net/omegaiori/NERE8/2/

    you will need jquery to effectively achieve what you want. this function is very simple but very effective:

    (function () {
    
    
        var heights = $("#wrapper").outerHeight(true);
        var outerHeights = $("#first").outerHeight(true);
        jQuery('#second').css('height', (heights - outerHeights) + "px");
    
    })();
    

    first it detects the wrapper height, as it is set to 100% it's different everytime (it depends on what screen you are landing). in the second step it gives the #second div the appropriate height subtracting from the wrapper height the #first div height. the result is the available height left in the wrapper div

    0 讨论(0)
  • 2020-11-28 09:44

    If you don't want to have fix heights for your main-container (top, bottom, ....), you can simply use this css-file to get a flex-container which uses the remaining space incl. working!!! scrollbars

    Fiddler

    <!DOCTYPE html>
    <html >
    <head>
        <title>Flex Container</title>
        <link rel="stylesheet" href="http://demo.qooxdoo.org/5.0/framework/indigo-5.0.css">
    
      <style>
        .cont{
            background-color: blue;
            position: absolute;
            height: 100%;
            width: 100%;
        }
    
        .headerContainer {
            background-color: green;
            height: 100px;
            width: 100%;
        }
    
        .mainContainer {
            background-color: white;
            width: 100%;
            overflow: scroll
        }
    
        .footerContainer {
            background-color: gray;
            height: 100px;
            width: 100%;
        }
      </style>
    
    
      </head>
    
    <body class="qx-flex-ready" style="height: 100%">
      <div class="qx-vbox cont">
        <div class="headerContainer">Cell 1: flex1</div>
        <div class="mainContainer qx-flex3">
        x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
        x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
        x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
        x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
        x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>x<br>
    
        </div>
        <div class="footerContainer" >Cell 3: flex1</div>
      </div>
    </body>
    </html>
    
    0 讨论(0)
  • 2020-11-28 09:49

    You can do this with position:absolute; on the #second div like this :

    FIDDLE

    CSS :

    #wrapper{
        position:relative;
    }
    
    #second {
        position:absolute;
        top:200px;
        bottom:0;
        left:0;
        width:300px;
        background-color:#9ACD32;
    }
    

    EDIT : Alternative solution

    Depending on your layout and the content you have in those divs, you could make it much more simple and with less markup like this :

    FIDDLE

    HTML :

    <div id="wrapper">
        <div id="first"></div>
    </div>
    

    CSS :

    #wrapper {
        height:100%;
        width:300px;
        background-color:#9ACD32;
    }
    #first {
        background-color:#F5DEB3;
        height: 200px;
    }
    
    0 讨论(0)
提交回复
热议问题