2010-08-05 5 views
34

Je me demande si c'est possible avec un simple CSS ou si je dois utiliser javascript pour cela?CSS: hauteur- remplir le reste de div?

J'ai une barre latérale sur mon site Web. un simple div # sidbar il fait normalement environ 1024px de haut, mais la hauteur change dynamiquement en raison de son contenu.

donc nous allons imaginge le cas suivant:

<div id="sidebar"> 
    <div class="widget"></div> //has a height of 100px 
    <div class="widget"></div> //has a height of 100px 
    <div id="rest"></div> //this div should have the rest height till to the bottom of the sidebar 
</div> 

je veux le reste div # pour remplir le reste de la barre latérale jusqu'à ce qu'il atteigne le fond de la div # barre latérale. Est-ce possible avec des css purs?

Répondre

8

Qu'est-ce que vous voulez est quelque chose comme 100% - 200px mais CSS ne supporte pas des expressions telles que celles-ci. IE a une fonctionnalité "expressions" non standard, mais si vous voulez que votre page fonctionne sur tous les navigateurs, je ne vois pas de moyen de le faire sans JavaScript. Alternativement, vous pouvez faire en sorte que tous les div utilisent des hauteurs de pourcentage, de sorte que vous pourriez avoir quelque chose comme 10% -10% -80%.

Mise à jour: Voici une solution simple utilisant JavaScript. Chaque fois que le contenu change dans votre barre latérale, il suffit d'appeler cette fonction:

function resize() { 
    // 200 is the total height of the other 2 divs 
    var height = document.getElementById('sidebar').offsetHeight - 200; 
    document.getElementById('rest').style.height = height + 'px'; 
}; 
+0

connaissez-vous la manière javascript? – matt

+0

Mis à jour avec le code. – casablanca

+0

Attention au scintillement. Cela n'a pas bien fonctionné pour créer une ombre encastrée. – Ricky

-5

Essayez

height: 100%; 

ou

height: auto; 
+5

'100%' dépassera la hauteur de la barre latérale car il y a déjà 2 autres divs. – casablanca

+0

déjà essayé! ne fonctionne pas. si je règle "100%", le div # reste obtient 100% de la page entière. Cela signifie donc qu'il est beaucoup plus long que la barre latérale elle-même. avec "auto" n'arrive rien. – matt

+0

Je ne suis pas sûr à 100% mais quand vous définissez "auto" vous devrez peut-être changer l'attribut "position". Je ne suis en aucun cas un expert CSS mais j'ai vu se souvenir que "auto" se comportait différemment pour chaque type de poste. –

36

Si vous connaissez la hauteur de #widget (100px dans votre cas) exacte, vous pouvez éviter d'utiliser JavaScript en utilisant le positionnement absolu:

#sidebar 
{ 
height: 100%; 
width: ...; 
position: relative; 
} 

.widget 
{ 
height: 100px; 
} 

#rest 
{ 
position: absolute; 
left: 0; 
width: 100%; 
top: 200px; 
bottom: 0; 
} 
+6

Une bonne démonstration de ceci est disponible sur http://blog.stevensanderson.com/2011/10/05/full-height-app-layouts-a-css-trick-to-make-it-easier/. Cette technique fonctionne même dans IE7. – saluce

+0

Voici l'exemple http://jsfiddle.net/44M7j/1/ –

+0

@ChristianNilsson violon ne fonctionne pas comme prévu dans FF 49.0.2 – mlt

-3

vous pouvez le faire avec des balises div imbriquées. vous en avez un qui spécifie la largeur à gauche, puis un autre laissé vide. Pour remplir le reste de l'autre côté, vous imbriquez une div relative à 100% à l'intérieur du div côté droit. comme ceci:

<div style="width:100%"> 
    <div style="width:300px;background-color:#FFFF00;float:left"> 
    </div> 
    <div style="margin-left:300px"> 
    <div style="position:relative;left:0px;width:100%;background-color:#00FFFF"> 
    </div> 
    </div> 
</div> 
+3

Cela fonctionne pour la largeur, pas la hauteur. – deerchao

4

je suis tombé sur cette question en cherchant une réponse à une question similaire, et je pensais que je calc illustrerai. À partir de ce post, calc n'est pas encore pris en charge cross-browser; Toutefois, vous pouvez vérifier this link here pour voir si vos navigateurs cibles sont pris en charge. J'ai modifié le cas hypothétique de matt pour utiliser calc en an example on jsFiddle. Essentiellement c'est une solution CSS pure qui fait ce que casablanca propose dans sa réponse. Par exemple, si un navigateur prend en charge calc, alors height: calc(100% - 200px); serait valide ainsi que pour des propriétés similaires.

4

Je propose la table-élément comme une alternative:

  • +: propre CSS
  • +: javascript évitant
  • -: table sémantiquement mal utilisé
  • -: pas les div-éléments demandés
+0

Pouvez-vous montrer un exemple? – krzychu

+0

ne fonctionne pas dans Firefox – Oleg

Questions connexes