92 votes

100% de la hauteur moins l'en-tête ?

Je veux créer une mise en page pour un panneau d'administration, mais je ne sais pas comment faire pour que les conteneurs #nav et #content soient toujours à 100% de la fenêtre du navigateur. Je ne comprends pas les attributs inherit of 100% height, quelqu'un pourrait-il m'expliquer plus clairement ?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>index.htm</title>
    <link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>

        <div id="header">
            <img src="./img/header_logo.png" alt="bla"/>
        </div><!-- #header -->
        <div id="nav">
        </div><!-- #nav -->
        <div id="content">
        asfdg
        </div><!-- #content -->
        <div class="clear">
        </div>

</body>
</html>

main.css

    html, body{
    font-family: Helvetica, "Helvetica Neue", Arial, Geneva, sans-serif;
    margin: 0px;
    padding: 0px;
    height: 100%;
}
img{
    margin: 0px;
    padding: 0px;
    border-width: 0px;
}
#wrapper{

}
#header{
    background: url(img/header_bg.png) repeat-x;
    height: 65px;
    padding-top: 20px;
    padding-left: 25px;
}
#nav{
    width: 235px;
    float: left; 
    background-color: #f7f7f7;
    border-right: 1px solid #d9d9d9;
    height: 100%;

}
#content{
    float: left;
    width: auto;
    padding: 15px;

}
.clear{
    clear: both;
}

Des idées ?

163voto

Jim Clouse Points 1688

Si votre navigateur prend en charge CSS3, essayez d'utiliser l'élément CSS Calc()

height: calc(100% - 65px);

vous pouvez également ajouter des options de compatibilité de navigateur :

height: -o-calc(100% - 65px); /* opera */
height: -webkit-calc(100% - 65px); /* google, safari */
height: -moz-calc(100% - 65px); /* firefox */

Assurez-vous également que vous avez des espaces entre les valeurs, voir : https://stackoverflow.com/a/16291105/427622

16voto

Bojin Li Points 3680

Comme indiqué dans les commentaires, height:100% repose sur la définition explicite de la hauteur du conteneur parent. Une façon d'obtenir ce que vous voulez est d'utiliser le positionnement absolu/relatif, et de spécifier les propriétés gauche/droite/haut/bas pour "étirer" le contenu afin de remplir l'espace disponible. J'ai mis en œuvre ce que vous souhaitez, je crois, réaliser dans jsfiddle . Essayez de redimensionner la fenêtre de résultat et vous verrez que le contenu se redimensionne automatiquement.

La limite de cette approche dans votre cas est que vous devez spécifier une marge supérieure explicite sur le conteneur parent afin de décaler son contenu vers le bas pour faire de la place au contenu de l'en-tête. Vous pouvez cependant la rendre dynamique si vous intégrez du javascript.

4voto

Faust Points 7523

Pour "100 % de la fenêtre du navigateur", si vous l'entendez littéralement, vous devez utiliser un positionnement fixe. Les propriétés haut, bas, droite et gauche sont alors utilisées pour décaler les bords des divs par rapport aux bords respectifs de la fenêtre d'affichage :

#nav, #content{position:fixed;top:0px;bottom:0px;}
#nav{left:0px;right:235px;}
#content{left:235px;right:0px}

L'écran sera ainsi composé de 235 pixels à gauche, consacrés à la navigation, et le reste de l'écran à droite, au contenu.

Notez toutefois que vous ne pourrez pas faire défiler tout l'écran en même temps. Cependant, vous pouvez le configurer pour faire défiler chaque volet individuellement, en appliquant la commande overflow:auto à l'une ou l'autre des divisions.

Notez également que le positionnement fixe n'est pas pris en charge par IE6 ou les versions antérieures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X