Comment faire un div remplir le remaning espace vertical à l'aide de css

Je cherche à faire un site web standard de mise en page avec un en-tête, un barre de navigation un corps (sur la droite de la barre de navigation) et un pied de page.

Maintenant, j'ai jusqu'à présent fait:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Test</title>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <style type="text/css" media="screen">

            .header {
                float: top;
                width: 100%;
                height: 75px;
            }

            .navbar {
                float: left;
                width: 20%;
                height: 100%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }

            .body {
                float: right;
                width: 80%;
                height: 100%;
                min-height:100%;
                overflow: scroll;
            }
            .footer {
                float: bottom;
                width: 100%;
            }
        </style>
    </head>
    <body>
        <div class="header"> Header </div>
        <div class="navbar"> Nav Bar </div>
        <div class="body"> Body </div>
        <div class="footer"> Footer</div>
    </body>
</html>

qui produit ce:

Comment faire un div remplir le remaning espace vertical à l'aide de css

Maintenant, si nous vérifions le CSS:

.navbar {

    float: left;
    width: 20%;
    height: 100%;
    min-height: 100%;
    overflow: scroll;
}

.body {
    float: right;
    width: 80%;
    height: 100%;
    min-height: 100%;
    overflow: scroll;
}

Comme vous pouvez le voir j'ai essayé de définir le hauteur et min-height à la fois le corps et de la barre de navigation à remplir tout l'espace vertical-je.e:

Comment faire un div remplir le remaning espace vertical à l'aide de css

Pourtant, elle n'affecte pas. Cependant, si je ne height: 500px il redimensionne comme prévu (bien sûr, maintenant ce ne sera pas très bonne pratique de différentes tailles d'écran etc serait montrer une autre partie ou d'affichage de la page):

Comment faire un div remplir le remaning espace vertical à l'aide de css

Donc, fondamentalement, je me demande comment pourrais-je être en mesure de faire la divs remplir l'espace vertical qui reste sans recours à la valeur codée en dur je.e 100px plutôt je voudrais le faire dans les pourcentages ainsi, la page s'affichera de la même manière sur tous les navigateurs

vous pouvez utiliser display:table-cell, mais il ne sera pas en charge de merde IE 7 ou moins. Sinon, le redoutable <table> est un remplacement possible pour les divs. C'est la compatibilité vs sémantique.
Im genre de mauvaise humeur en HTML pour être honnête, et j'ai cherché mais je ne trouve pas exactement quoi faire. une autre question, dit-JQuery mais je ne veux pas ajouter plus de dépendance (comme je le fais en XHTML et PHP)...
Je vois bien Im visant la compatibilité d'où le divs... mais je ne peux pas trouver de solution pour un problème qui à mon avis pourrait être résolu par height:100%?!?
eh bien, la vraie réponse est "vous ne pouvez pas remplir tout l'espace vertical en CSS". C'est pourquoi vous ne trouverez probablement pas une bonne solution. Vous trouverez javascript hacks et bizarre css combinaisons qui essaie de résoudre une partie du problème.

OriginalL'auteur David Kroukamp | 2013-04-10