Высота боковой панели CSS 100%


Я бьюсь головой о стену в течение нескольких часов, пытаясь выяснить эту проблему и думаю, что это должно быть что-то маленькое, чего мне не хватает. Я искал в интернете, но ничего не нашел, кажется, работает. HTML-код:

<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>

мой полный CSS:

* {
  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;
}

Я хотел бы, чтобы боковая панель растягивалась по высоте с содержимым моей страницы и оставляла изображение нижней части боковой панели всегда внизу боковой панели.

14 65
css

14 ответов:

обновление: поскольку этот ответ все еще получает голоса как вверх, так и вниз, и находится на момент написания восемь лет старый: есть, вероятно, лучшие методы там сейчас. Оригинальный ответ ниже.


очевидно, что вы ищете колонны из искусственного техника :-)

по тому, как вычисляется свойство height, вы не можете установить height: 100% внутри что-то, что имеет автоматическ-высоты.

это сработало для меня

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

#sidebar { 
  margin-bottom: -5000px; /* any large number will do */
  padding-bottom: 5000px; 
  .... 
} 

до тех пор, пока CSS flexbox не станет более распространенным, вы всегда можете просто абсолютно позиционировать боковую панель, вставляя ее в ноль пикселей от верхней и нижней части, а затем установить маржу на главном контейнере для компенсации.

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; }

Примечание: это очень простой способ сделать это, но вы найдете bottom не означает "внизу страницы", но " внизу окна."Боковая панель, вероятно, резко закончится, если ваш основной контент прокручивается вниз.

Я хотел бы использовать таблицы css для достижения 100% высоты боковой панели.

основная идея заключается в том, чтобы обернуть боковую панель и основные дивы в контейнер.

дайте контейнеру a display:table

и дать 2 ребенка ДИВС (боковой панели и основной) a display: table-cell

вот так..

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

взгляните на это ДЕМО где я изменил вашу начальную разметку, используя вышеуказанную технику (я использовал цвета фона для различных дивов, так что вы можете увидеть, какие из них какие)

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

сначала оберните столбцы, которые вы хотите в div или разделе, например:

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

затем добавьте следующий CSS-код:

.content {
    display: -webkit-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}

я столкнулся с этой проблемой несколько раз на разных проектах, но я нашел решение, которое работает для меня. Вы должны использовать четыре тега div-один, который содержит боковую панель, основное содержимое и нижний колонтитул.

во-первых, стиль элементов в таблице стилей:

#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;
}

вы можете редактировать различные элементы, однако вы хотите, просто убедитесь, что вы не измените свойство нижнего колонтитула "clear:both" - это очень важно, чтобы оставить.

затем просто установить вверх по вашей веб-странице, как это:

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

Я написал более подробное сообщение в блоге об этом на http://blog.thelibzter.com/how-to-make-a-sidebar-extend-the-entire-height-of-its-containerпожалуйста, дайте мне знать, если у вас есть какие-либо вопросы. Надеюсь, это поможет!

В дополнение к ответу @montrealmike, могу ли я просто добавить свою адаптацию?

Я сделал так:

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

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

Я сделал" 101% " вещь, чтобы удовлетворить (ультра редко) возможность того, что кто-то может просматривать сайт на огромном экране с высотой более 5000px!

отличный ответ, хотя, montrealmike. Это прекрасно работало для меня.

Я думаю, сегодня можно было бы использовать на основе этого. Смотрите Святой Грааль пример.

я столкнулся с той же проблемой, что и Джон. TheLibzter поставил меня на правильный путь, но изображение, которое должно оставаться в нижней части боковой панели, не было включено. Поэтому я внес некоторые коррективы...

важно:

  • позиционирование div, который содержит боковую панель и содержимое (#bodyLayout). Это должно быть относительно.
  • позиционирование div, который должен остаться на дне sidbar (#sidebarBottomDiv). Это должно быть абсолютный.
  • ширина содержимого + ширина боковой панели должна быть равна ширине страницы (#container)

вот 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;
    }

и вот 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>

Я понимаю, что это старый пост, но я пытался что-нибудь придумать для моего сайта, чтобы посоветоваться. Сработает ли это?

#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>

Я думаю, что ваше решение будет заключаться в том, чтобы обернуть контейнер содержимого и боковую панель в родительский, содержащий div. Переместите боковую панель влево и дайте ей фоновое изображение. Создайте широкое поле по крайней мере шириной боковой панели для контейнера содержимого. Добавить очистка float hack чтобы все это работало.

используйте фон тела, если вы используете боковую панель с фиксированной шириной, дайте изображение той же ширины, что и ваша боковая панель. также поместите background-repeat: repeat-y в ваши css-коды.

позиция абсолютная, сверху: 0 и снизу: 0 для боковой панели и положение относительно для обертки (или контейнера) ведьма содержание всех элементов, и это сделано !