Высота боковой панели 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 ответов:
обновление: поскольку этот ответ все еще получает голоса как вверх, так и вниз, и находится на момент написания восемь лет старый: есть, вероятно, лучшие методы там сейчас. Оригинальный ответ ниже.
очевидно, что вы ищете колонны из искусственного техника :-)
по тому, как вычисляется свойство height, вы не можете установить
height: 100%
внутри что-то, что имеет автоматическ-высоты.
это сработало для меня
.container { overflow: hidden; .... } #sidebar { margin-bottom: -5000px; /* any large number will do */ padding-bottom: 5000px; .... }
до тех пор, пока CSS flexbox не станет более распространенным, вы всегда можете просто абсолютно позиционировать боковую панель, вставляя ее в ноль пикселей от верхней и нижней части, а затем установить маржу на главном контейнере для компенсации.
JSFiddle
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 чтобы все это работало.