Как сделать так, чтобы мой нижний колонтитул всегда оставался внизу страницы, даже если содержимое страницы меньше экрана?
Я еще не добавил контент на свою страницу, так как я все еще работаю над верхним и нижним колонтитулом. Я заметил, что мой нижний колонтитул вместо того, чтобы находиться внизу страницы, как если бы страница была выше, он находится в середине страницы, прямо под заголовком.
Я знаю, что это должно происходить в CSS, но как мне сделать так, чтобы это пошло на дно? я попробую position: fixed; bottom: 0px;
, но это идет ко дну, и когда я добавляю больше контента, он либо перекрывается, либо идет под контентом.
Редактировать: мне нужно, чтобы нижний колонтитул был регулируемой высотой. Другими словами, я не могу использовать height: 100px;
или что угодно. Кроме того, я не хочу, чтобы нижний колонтитул прилипал к нижней части экрана, если содержание превышает размер страницы. Если высота экрана составляет 720px, а страница - 1200px, нижний колонтитул не должен быть внизу экрана. Это должно быть внизу страницы, вне поля зрения.
Как я могу исправить эту проблему? Я бы хотел без использования JavaScript.
Вот моя текущая страница. Мой нижний колонтитул не является фиксированной высотой, и я не могу использовать решения, которые требуют этого.
<!DOCTYPE html>
<html>
<head>
<style>
body
{
font-family: Lato;
margin: 0px;
padding: 0px;
width: 100%;
}
header
{
height: 80px;
padding-left: 20px;
padding-right: 5px;
padding-top: 15px;
}
header h1
{
display: inline;
}
header nav
{
float: right;
font-size: 18pt;
}
header nav a
{
color: #999;
line-height: 50px;
margin-right: 20px;
text-decoration: none;
}
header nav a:hover
{
color: #666;
}
header nav a.currentPage
{
color: #7a7acc;
}
header nav a.currentPage:hover
{
color: #7a7acc;
}
footer
{
background-color: #f2f2f2;
color: #666;
font-size: 12pt;
padding: 20px;
text-align: center;
}
footer div
{
max-width: 750px;
margin: 0px auto;
}
footer a
{
color: #666;
}
</style>
</head>
<body>
<header>
<h1>
<img src="logo.png" />
</h1>
<nav>
<a href="/" class="currentPage">Home</a>
<a href="/services">Services</a>
<a href="/news">News</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
<footer>
<div>
<p>Footer text. Footer text. Footer text.</p>
</div>
</footer>
</body>
</html>
3 ответа
Используйте таблицы CSS:
FIDDLE1 - мало контента
FIDDLE2 - мало контента + большой колонтитул
FIDDLE3 - много контента
наценка
<header class="row">header content</header>
<div class="row">content here</div>
<footer class="row">footer content</footer>
CSS
html {
height:100%;
width:100%;
}
body {
height:100%;
width:100%;
display:table;
table-layout:fixed;
margin:0 auto;
}
.row {
display:table-row;
background:orange
}
div.row {
height:100%;
background:pink
}
Это потому, что ваш контент не имеет ничего, так что нижний колонтитул будет расти.
Здесь у меня есть решение, если ваша структура такая
HTML
<header> header content goes here </header>
<div class="container"> main content </div>
<footer> footer part </footer>
CSS
header { // header definitions }
.container {
min-height: 500px;
// other definitions
}
footer { // footer definitions }
Это будет придерживаться вашего нижнего колонтитула ниже 500px
содержимого, даже если содержимое пусто.
Вы можете использовать автоматические поля flexbox
Минимальный пример:
body {
display: flex;
flex-flow: column;
min-height: 100vh; /* have the flex container at least take up the viewport */
margin: 0;
font-size: 20px;
}
footer {
margin-top: auto;
background: #999999;
}
<body>
<header>Header</header>
<div>Some random content</div>
<footer>Footer</footer>
</body>
Используя тот же минимальный пример выше, но с длинным контентом:
body {
display: flex;
flex-flow: column;
min-height: 100vh; /* have the flex container at least take up the viewport */
margin: 0;
font-size: 20px;
}
div {
height: 3000px;
}
footer {
margin-top: auto;
background: #999999;
}
<body>
<header>Header</header>
<div>Some random content</div>
<footer>Footer</footer>
</body>
Используя код OP:
body {
font-family: Lato;
margin: 0px;
padding: 0px;
width: 100%;
display: flex;
flex-flow: column;
min-height: 100vh;
}
header {
height: 80px;
padding-left: 20px;
padding-right: 5px;
padding-top: 15px;
}
header h1 {
display: inline;
}
header nav {
float: right;
font-size: 18pt;
}
header nav a {
color: #999;
line-height: 50px;
margin-right: 20px;
text-decoration: none;
}
header nav a:hover {
color: #666;
}
header nav a.currentPage {
color: #7a7acc;
}
header nav a.currentPage:hover {
color: #7a7acc;
}
footer {
margin-top: auto;
background-color: #f2f2f2;
color: #666;
font-size: 12pt;
padding: 20px;
text-align: center;
}
footer div {
max-width: 750px;
margin: 0px auto;
}
footer a {
color: #666;
}
<!DOCTYPE html>
<html>
<body>
<header>
<h1>
<img src="logo.png" />
</h1>
<nav>
<a href="/" class="currentPage">Home</a>
<a href="/services">Services</a>
<a href="/news">News</a>
<a href="/about">About</a>
<a href="/contact">Contact</a>
</nav>
</header>
<footer>
<div>
<p>Footer text. Footer text. Footer text.</p>
</div>
</footer>
</body>
</html>
У меня была такая же проблема несколько недель назад с веб-сайтом, над которым я работаю, и после небольшого поиска и проб и ошибок мне удалось найти решение этой проблемы.
У меня есть здесь код, так как это немного сложно объяснить:
HTML:
<header>
some header<br />
</header>
<section>
<!-- no content -->
<!-- little content -->
<div id="little-content">some content</div>
<!-- a lot of content -->
<div id="lotsa-content">some more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more<br />and more content</div>
</section>
<footer>
© some footer
</footer>
CSS:
html,
body {
margin: 0;
min-height: 100%;
position: absolute;
width: 100%;
}
header,
footer {
background: red;
color: white;
position: absolute;
text-align: center;
width: 100%;
}
section {
margin: 1.3em 0;
}
#little-content {
display: none;
}
#lotsa-content {
display: none;
}
footer {
bottom: 0;
}
Вот JSFiddle, который я сделал для тебя.
Надеюсь, это поможет.
EDIT1:
Чтобы быть более точным в ответе на ваш вопрос: вы должны сделать позицию родителя нижнего колонтитула (я думаю, что это тело) абсолютной и дать ему минимальную высоту 100% (также для его ширины), то же самое положение для нижний колонтитул (позиция: абсолютная;), а также прикрепить его к нижней части с нижней: 0; и последнее, что нужно сделать, это задать нижнее поле для высоты нижнего колонтитула, чтобы оно не перекрывалось (я также дал верхнее поле из-за того, что я также сделал заголовок абсолютным).
EDIT2:
Вот пример JSFiddle с предоставленным вами кодом.