Я пытаюсь создать макет, где у меня будет заголовок 100px наверху. footer 80px всегда придерживается нижней части экрана браузера и прокручиваемой области содержимого между верхним и нижним колонтитулом. вертикальная полоса прокрутки должна появиться в области содержимого, когда я закончил писать, пока контент не коснется верхнего конца нижнего колонтитула.
Может ли кто-нибудь предложить мне, как я могу достичь этого?
Вот что я пробовал: JsFiddle
<header>
</header>
<div id="main">
<div id="content">
scrollable content area
</div>
<footer>
footer always appearing bottom of the browser screen
</footer>
</div>
Мой css:
header {
height: 100px;
width: 100%;
background: #bbb;
}
#main {
background: #ccc;
width: 100%;
height: 100%
}
#content {
position: relative;
height: 100%;
width: 100%;
background: green;
overflow-y: auto;
}
footer {
position: relative;
bottom: 0;
height: 80px;
width: 100%;
background: #aaa;
}
EDITED: FIDDLE
#content {
position: absolute;
height: calc(100% - 180px);
background: green;
overflow-x: hidden;
overflow-y:scroll;
}
Я ответил на аналогичный вопрос, прежде чем: Процент высоты в процентах, но все же прокрутка
Вот один из подходов.
HTML:
<header>The Header...</header>
<div id="main">
<div id="content">
scrollable content area
<p>Lorem ipsum dolor sit amet, ...</p>
</div>
</div>
<footer>footer always appearing bottom of the browser screen</footer>
CSS:
html, body {
height: 100%;
}
body {
margin: 0;
}
header {
height: 100px;
width: 100%;
background: #bbb;
position: absolute;
top: 0;
}
#main {
background: #ccc;
width: 100%;
position: absolute;
top: 100px;
bottom: 80px;
left: 0;
right: 0;
overflow-y: auto;
}
#content {
overflow: auto;
background: green;
}
footer {
position: absolute;
bottom: 0;
height: 80px;
width: 100%;
background: #aaa;
}
Хитрость заключается в создании абсолютно #main
контейнер-контейнера, который охватывает область между заголовком и нижним колонтитулом, #main
, используя верхние, нижние, левые, правые смещения и применять overflow-y: auto
.
Затем #content
займет пробел и, в конце концов, запустит полосу прокрутки на #main
.
См. Демонстрацию по адресу: http://jsfiddle.net/audetwebdesign/aNRE9/
Просто скажи мне, что ты пробовал? Я не вижу ни одного заголовка, ни нижнего колонтитула, ни текста, содержащегося в умелом div.
Хорошо, дайте мне немного помочь вам.
То, что вы делаете, просто, но потребует от вас понимания сути.
footer {
position: absolute; // position as absolute..
bottom: 0; // margin-bottom as 0
max-width: 80px; // width
margin: 0 auto; // margin..
}
Это заставит нижний колонтитул всегда оставаться в конце документа, который я подразумеваю внизу страницы.
header {
position: absolute;
top: 0;
max-width: 100px;
margin: 0 auto;
}
Я полностью не понимаю этого. Поэтому я просто собираюсь немного поправить вас.
Вы можете создать полосу прокрутки в div контента. Вы хотите это:
вертикальная полоса прокрутки должна находиться в области содержимого
Вы можете сделать это, используя это:
div {
max-height: 100px;
min-height: 100px;
}
Я предполагаю, что вы собираетесь изменить div
на элемент или класс или id на тот, который у вас есть.
Сначала вы создадите div с максимальной высотой, чтобы div не превышал высоту экрана. Затем вы можете использовать полосу прокрутки следующим образом:
overflow: scroll;
Добавьте это свойство в элемент. Таким образом, у вас будет нижний колонтитул, заголовок и блок контента, для которых есть панель прокрутки, а не та, что у браузера.
http://jsfiddle.net/afzaal_ahmad_zeeshan/aNRE9/2/
Мне очень жаль, но я не стал менять фон, но вы можете видеть, заголовок остается там, нижний колонтитул в конце и свитки div! :)
Удачи!
margin:0 auto;
это заставило бы элемент придерживаться нижней части HTML-документа или нижней части окна? Прошу из любопытства :)
Для этого, к сожалению, вам понадобится JavaScript. Ничего страшного. Я также добавил обработчик, когда вы изменяете размер окна.
var resizeTimer;
window.onload = function(){
makeMiddleFull();
}
window.onresize = function(){
clearTimeout(resizeTimer);
resizeTimer = setTimeout(makeMiddleFull, 100);
}
function makeMiddleFull(){
var cobj = document.getElementById('content');
cobj.style.height = (getDocHeight() - (document.getElementById('header').style.height + document.getElementById('footer').style.height)) + "px";
}
function getDocHeight() {
var D = document;
return Math.max(
D.body.scrollHeight, D.documentElement.scrollHeight,
D.body.offsetHeight, D.documentElement.offsetHeight,
D.body.clientHeight, D.documentElement.clientHeight
);
}
См. Обновленную скрипту для полного обновления кода, включая DOM и CSS: http://jsfiddle.net/Qpc2s/2/