Нижний колонтитул внизу страницы или содержимого, в зависимости от того, что меньше
У меня есть следующая структура:
<body>
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
</body>
Я динамически загружаю содержимое в <article>
с помощью javascript. Из-за этого высота блока <article>
может измениться.
Я хочу, чтобы блок <footer>
находился в нижней части страницы, когда есть много контента или внизу окна браузера, когда существует только несколько строк содержимого.
В данный момент я могу сделать то или другое... но не то и другое.
Итак, кто-нибудь знает, как я могу это сделать - заставьте <footer>
придерживаться нижней части страницы/содержимого или нижней части экрана, в зависимости от того, что ниже.
Ответы
Ответ 1
Яркий нижний колонтитул Ryan Fait очень приятный, однако я считаю, что его основная структура не хватает *.
Моя базовая структура выбора:
<div class="page">
<div class="page__inner">
<header class="header">
<div class="header__inner">
</div>
</header>
<nav class="nav">
<div class="nav__inner">
</div>
</nav>
<main class="wrapper">
<div class="wrapper__inner">
<div class="content">
<div class="content__inner">
</div>
</div>
<div class="sidebar">
<div class="sidebar__inner">
</div>
</div>
</div>
</main>
<footer class="footer">
<div class="footer__inner">
</div>
</footer>
</div>
</div>
Что еще не так далеко от:
<div id="main-wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<footer>
</footer>
</div>
Трюк для того, чтобы закрепить нижний колонтитул, заключается в том, что нижний колонтитул закреплен на нижней части его содержащего элемента. Это требует, чтобы высота нижнего колонтитула была статичной, но я обнаружил, что нижние колонтитулы обычно имеют статическую высоту.
HTML:<div id="main-wrapper">
...
<footer>
</footer>
</div>
CSS:#main-wrapper {
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
#main-wrapper {
padding: 0 0 100px;
position: relative;
}
footer {
bottom: 0;
height: 100px;
left: 0;
position: absolute;
width: 100%;
}
header {
background-color: #F00;
}
nav {
background-color: #FF0;
}
article {
background-color: #0F0;
}
footer {
background-color: #00F;
}
<div id="main-wrapper">
<header>
here be header
</header>
<nav>
</nav>
<article>
here be content
</article>
<footer>
here be footer
</footer>
</div>
Ответ 2
Липкий нижний колонтитул Ryan Fait - это простое решение, которое я использовал несколько раз в прошлом.
Основной HTML:
<div class="wrapper">
<div class="header">
<h1>CSS Sticky Footer</h1>
</div>
<div class="content"></div>
<div class="push"></div>
</div>
<div class="footer"></div>
CSS
* {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -142px; /* the bottom margin is the negative value of the footer height */
}
.footer, .push {
height: 142px; /* .push must be the same height as .footer */
}
/*
Sticky Footer by Ryan Fait
http://ryanfait.com/
*/
Переведя это, чтобы быть похожим на то, что у вас уже есть результаты с чем-то в этом направлении:
HTML
<body>
<div class="wrapper">
<header>
</header>
<nav>
</nav>
<article>
</article>
<div class="push"></div>
</div>
<footer>
</footer>
</body>
CSS
* {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -142px; /* the bottom margin is the negative value of the footer height */
}
footer, .push {
height: 142px; /* .push must be the same height as .footer */
}
Просто не забудьте обновить негатив на краю обертки, чтобы соответствовать высоте вашего нижнего колонтитула и нажать div. Удачи!
Ответ 3
Я думаю, что ниже двух строк в css должно быть достаточно, чтобы получить то, что вы хотите.
#footer
{
position: relative ;
bottom: 0;
}
Это сработало для меня.
Ответ 4
Здесь (Сделать нижний колонтитул снизу страницы) - отличный пост/учебник для решения вашей проблемы... попробуйте.