CSS barre latérale Hauteur 100%

Je me suis cogné la tête contre le mur pendant des heures à essayer de comprendre ce problème et je pense que ce doit être quelque chose de petit qui me manque. J'ai cherché en ligne, mais rien que j'ai trouvé ne semble fonctionner. Le code HTML est:

<body>
  <div id="header">
    <div id="bannerleft">
    </div>

    <div id="bannerright">
      <div id="WebLinks">
        <span>Web Links:</span>
        <ul>
          <li><a href="#"><img src="../../Content/images/MySpace_32x32.png" alt="MySpace"/></a></li>
          <li><a href="#"><img src="../../Content/images/FaceBook_32x32.png" alt="Facebook"/></a></li>
          <li><a href="#"><img src="../../Content/images/Youtube_32x32.png" alt="YouTube"/></a></li>
        </ul>
      </div>
    </div>
  </div>
  <div id="Sidebar">
    <div id="SidebarBottom">
    </div>
  </div>
  <div id="NavigationContainer">
    <ul id="Navigation">
      <li><a href="#">Nav</a></li>
      <li><a href="#">Nav</a></li>
      <li><a href="#">Nav</a></li>
      <li><a href="#">Nav</a></li>
      <li><a href="#">Nav</a></li>
      <li><a href="#">Nav</a></li>
    </ul>
  </div>
  <div id="Main">
    <!-- content -->
  </div>
</body>

Mon CSS complet est:

* {
  margin: 0px;
  padding: 0px;
}

body {
  font-family: Calibri, Sans-Serif;
  height: 100%;
}

#header {
  width: 100%;
  z-index: 1;
  height: 340px;
  background-image: url("../../Content/images/bannercenter.gif");
  background-repeat: repeat-x;
}

#header #bannerleft {
  float: left;
  background-image: url("../../Content/images/bannerleft.gif");
  background-repeat: no-repeat;
  height: 340px;
  width: 439px;
  z-index: 2;
}

#bannerright {
  float: right;
  background-image: url("../../Content/images/bannerright.gif");
  background-repeat: no-repeat;
  width: 382px;
  height: 340px;
  background-color: White;
  z-index: 2;
}

#Sidebar {
  width: 180px;
  background: url("../../Content/images/Sidebar.png") repeat-y;
  z-index: 2;
  height: 100%;
  position: absolute;
}

#SidebarBottom {
  margin-left: 33px;
  height: 100%;
  background: url("../../Content/images/SidebarImage.png") no-repeat bottom;
}

#NavigationContainer {
  position: absolute;
  top: 350px;
  width: 100%;
  background-color: #bbc4c3;
  height: 29px;
  z-index: 1;
  left: 0px;
}

#Navigation {
  margin-left: 190px;
  font-family: Calibri, Sans-Serif;
}

#Navigation li {
  float: left;
  list-style: none;
  padding-right: 3%;
  padding-top: 6px;
  font-size: 100%;
}

#Navigation a:link, a:active, a:visited {
  color: #012235;
  text-decoration: none;
  font-weight: 500;
}

#Navigation a:hover {
  color: White;
}

#WebLinks {
  float: right;
  color: #00324b;
  margin-top: 50px;
  width: 375px;
}

#WebLinks span {
  float: left;
  margin-right: 7px;
  margin-left: 21px;
  font-size: 10pt;
  margin-top: 8px;
  font-family: Helvetica;
}

#WebLinks ul li {
  float: left;
  padding-right: 7px;
  list-style: none;
}

#WebLinks ul li a {
  text-decoration: none;
  font-size: 8pt;
  color: #00324b;
  font-weight: normal;
}

#WebLinks ul li a img {
  border-style: none;
}

#WebLinks ul li a:hover {
  color: #bcc5c4;
}

Je voudrais que la barre latérale s'étire en hauteur avec le contenu de ma page et laisse l'image du bas de la barre latérale toujours au bas de la barre latérale.

65
css
demandé sur Ben Thomas 2009-04-26 21:20:39

14 réponses

Mise à jour: comme cette réponse obtient toujours des votes à la fois haut et bas, et est au moment de la rédaction huit ans Vieux: il y a probablement de meilleures techniques là-bas maintenant. Original suit la réponse ci-dessous.


Clairement, vous recherchez la techniquefausses colonnes : -)

Par la façon dont la propriété height est calculée, vous ne pouvez pas définir height: 100% dans quelque chose qui a une hauteur automatique.

23
répondu Arve Systad 2017-02-22 08:44:11

Cela a fonctionné pour moi

.container { 
  overflow: hidden; 
  .... 
} 

#sidebar { 
  margin-bottom: -5000px; /* any large number will do */
  padding-bottom: 5000px; 
  .... 
} 
92
répondu montrealmike 2014-01-29 19:16:04

Jusqu'à ce que la flexbox de CSS devienne plus grand public, vous pouvez toujours positionner absolument la barre latérale, la coller à zéro pixels du haut et du bas, puis définir une marge sur votre conteneur principal pour compenser.

JSFiddle

Http://jsfiddle.net/QDCGv/

HTML

<section class="sidebar">I'm a sidebar.</section>

<section class="main">I'm the main section.</section>

CSS

section.sidebar {
  width: 250px;
  position: absolute;
  top: 0;
  bottom: 0;
  background-color: green;
}

section.main { margin-left: 250px; }

Note : ceci est un über moyen simple de le faire, mais vous trouverez bottom ne signifie pas "bas de la page", mais " bas de fenêtre."La barre latérale se terminera probablement brutalement si votre contenu principal défile vers le bas.

27
répondu Adam Grant 2012-12-31 14:56:06

J'utiliserais tables css pour atteindre une hauteur de barre latérale de 100%.

L'idée de base est d'envelopper la barre latérale et les divs principaux dans un conteneur.

Donnez au conteneur Un display:table

Et donnez aux 2 divs enfants (barre latérale et principale) un display: table-cell

Comme ça..

#container {
display: table;
}
#main {
display: table-cell;
vertical-align: top;
}
#sidebar {
display: table-cell;
vertical-align: top;
} 

Regardez ça démo en direct où j'ai modifié votre balisage initial en utilisant la technique ci-dessus (j'ai utilisé des couleurs d'arrière-plan pour les différentes divs afin que vous puissiez voir lesquelles ceux qui sont)

13
répondu Danield 2013-01-17 10:31:39

Flexbox (http://caniuse.com/#feat=flexbox)

Enveloppez D'abord les colonnes que vous voulez dans une div ou une section, ex:

<div class="content">
    <div class="main"></div>
    <div class="sidebar"></div>
</div>

Puis ajoutez le CSS suivant:

.content {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}
6
répondu hawkeye126 2015-09-17 21:00:29

J'ai rencontré ce problème à plusieurs reprises sur différents projets, mais j'ai trouvé une solution qui fonctionne pour moi. Vous devez utiliser quatre balises div-une qui contient la barre latérale, le contenu principal et un pied de page.

Tout d'abord, Stylez les éléments de votre feuille de style:

#container {
width: 100%;
background: #FFFAF0;
}

.content {
width: 950px;
float: right;
padding: 10px;
height: 100%;
background: #FFFAF0;
}

.sidebar {
width: 220px;
float: left;
height: 100%;
padding: 5px;
background: #FFFAF0;
}

#footer {
clear:both;
background:#FFFAF0;
}

Vous pouvez modifier les différents éléments comme vous le souhaitez, assurez-vous de ne pas changer la propriété de pied de page "clear: both" - c'est très important de laisser dans.

Ensuite, configurez simplement votre page web comme ce:

<div id=”container”>
<div class=”sidebar”></div>
<div class=”content”></div>
<div id=”footer”></div>
</div>

J'ai écrit un billet de blog plus en profondeur à ce sujet à http://blog.thelibzter.com/how-to-make-a-sidebar-extend-the-entire-height-of-its-container. veuillez me faire savoir si vous avez des questions. Espérons que cette aide!

4
répondu TheLibzter 2010-08-22 21:21:09

Suite à la réponse de @montrealmike, puis-je simplement ajouter mon adaptation?

J'ai fait ceci:

.container { 
  overflow: hidden; 
  .... 
} 

#sidebar { 
  margin-bottom: -101%;
  padding-bottom: 101%; 
  .... 
} 

J'ai fait la chose" 101% " pour répondre à la possibilité (ultra rare) que quelqu'un puisse regarder le site sur un écran énorme avec une hauteur supérieure à 5000px!

Bonne réponse cependant, montrealmike. Il a fonctionné parfaitement pour moi.

4
répondu Lloyd Jones 2014-02-01 18:29:09

Peut-être que les mises en page multi-colonnes sortent de la boîte est ce que vous cherchez?

2
répondu strager 2009-04-26 17:24:40

Je suppose qu'aujourd'hui, on utiliserait probablement flexbox pour cela. Voir l'exemple du Saint Graal .

2
répondu Frank Lämmer 2013-10-20 14:05:30

J'étais confronté au même problème que Jon. TheLibzter m'a mis sur la bonne voie, mais l'image qui doit rester au bas de la barre latérale n'a pas été inclus. J'ai donc procédé à quelques ajustements...

Important:

  • positionnement de la div qui contient la barre latérale et le contenu (#bodyLayout). Cela devrait être relatif.
  • positionnement du div qui doit rester au bas de la barre latérale (#sidebarBottomDiv). Cela devrait être absolu.
  • la largeur du contenu + la largeur de la barre latérale doit être égale à la largeur de la page (#container)

Voici le css:

    #container
    {
        margin: auto;
        width: 940px;
    }
    #bodyLayout
    {
        position: relative;
        width: 100%;
        padding: 0;
    }
    #header
    {
        height: 95px;
        background-color: blue;
        color: white;
    }
    #sidebar
    {
        background-color: yellow;
    }
    #sidebarTopDiv
    {
        float: left;
        width: 245px;
        color: black;
    }
    #sidebarBottomDiv
    {
        position: absolute;
        float: left;
        bottom: 0;
        width: 245px;
        height: 100px;
        background-color: green;
        color: white;
    }
    #content
    {
        float: right;
        min-height: 250px;
        width: 695px;
        background-color: White;
    }
    #footer
    {
        width: 940px;
        height: 75px;
        background-color: red;
        color: white;
    }
    .clear
    {
        clear: both;
    }

Et voici le html:

<div id="container">
    <div id="header">
        This is your header!
    </div>
    <div id="bodyLayout">
        <div id="sidebar">
            <div id="sidebarTopDiv">
                This is your sidebar!                   
            </div>
            <div id="content">                  
            This is your content!<br />
            The minimum height of the content is set to 250px so the div at the bottom of
            the sidebar will not overlap the top part of the sidebar.
            </div>
            <div id="sidebarBottomDiv">
                This is the div that will stay at the bottom of your footer!
            </div>
            <div class="clear" />
        </div>
    </div>
</div>
<div id="footer">
    This is your footer!
</div>
1
répondu Krizzz 2011-10-06 08:25:34

Je me rends compte que c'est un vieux post mais j'essayais de trouver quelque chose pour que mon site ait une barre latérale. Serait-ce de travailler?

#sidebar-background
{
    position:fixed;
    width:250px;
    top:0;
    bottom:0;
    background-color:orange;
}

#content-background
{
    position:fixed;
    right:0;
    top:0;
    bottom:0;
    left:250px;
    background-color:pink;
}

#sidebar
{
    float:left;
    width:250px;
}

#content
{
    float:left;
    width:600px;
}

<div id="sidebar-background"></div>
<div id="content-background"></div>

<div id="sidebar">Sidebar stuff here</div>
<div id="content">Stuff in here</div>
1
répondu ChrisHigs 2014-03-14 00:07:04

Je pense que votre solution serait d'envelopper votre conteneur de contenu et votre barre latérale dans un parent contenant div. Flottez votre barre latérale vers la gauche et donnez-lui l'image d'arrière-plan. Créez une large marge au moins la largeur de votre barre latérale pour votre conteneur de contenu. Ajoutez effacement d'un hack float pour que tout fonctionne.

0
répondu Bjorn Tipling 2009-04-26 17:29:57

Utiliser l'arrière-plan du corps si vous utilisez la barre latérale à Largeur fixe, donnez la même image de largeur que votre barre latérale. mettez également background-repeat: repeat - Y dans vos codes css.

0
répondu DevelopmentBucket 2014-01-31 11:16:59

Position absolue, top: 0 et bottom: 0 pour la barre latérale et position relative pour le wrapper (ou conteneur) qui contient tous les éléments et c'est fait !

0
répondu Vincent V. 2014-06-25 15:58:30