1

Не получается закрепить footer.

Я пытался задать минимальную высоту странице вот так, чтобы footer выводился в конце:

CSS и HTML:

html,
body {
  height: calc(100% - 90px)/* 90 - высота navbar и footer */
}

.bottom-bar { postion: absolute; bottom: 45px; }

<body>
  <navbar></navbar>
  <div class="container" style="padding-top: 20px">
    <div ng-view></div>
  </div>
  <div class="bottom-bar">
    <div class="container">
      <div class="col-xs-8 column">
        <!-- content -->
      </div>
      <div class="col-xs-4 col-md-4 column">
        <!-- content -->
      </div>
    </div>
  </div>
</body>

В принципе, это работает, но есть одна ошибка - когда body растягивается, позиция footera не меняется. Как это исправить?

Вот так выводится footer сейчас: введите сюда описание изображения

А вот так должен выводится: введите сюда описание изображения

Dev18
  • 640

4 Answers4

2

Если Вы используете bootstrap, то footer добавить класс navbar-fixed-bottom:

if( $(document).height() <= $(window).height() ){  
  $(".bottom-bar").addClass("navbar-fixed-bottom");
}
<script src="https://code.jquery.com/jquery-2.0.3.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css" />

<navbar>Navbar</navbar> <div class="container" style="padding-top: 20px"> <div ng-view></div>

Content </div>

<div class="bottom-bar"> bottom-bar <div class="container"> <div class="col-xs-8 column"> <!-- content --> </div> <div class="col-xs-4 col-md-4 column"> <!-- content --> </div> </div> </div>

С контентом:

if( $(document).height() <= $(window).height() ){  
  $(".bottom-bar").addClass("navbar-fixed-bottom");
}
<script src="https://code.jquery.com/jquery-2.0.3.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css" /> <navbar>Navbar</navbar> <div class="container" style="padding-top: 20px; height: 1500px;"> <div ng-view></div>

  Content
&lt;/div&gt;

&lt;div class="bottom-bar"&gt;
  bottom-bar
    &lt;div class="container"&gt;
        &lt;div class="col-xs-8 column"&gt; 
            &lt;!-- content --&gt;
        &lt;/div&gt;
        &lt;div class="col-xs-4 col-md-4 column"&gt;
            &lt;!-- content --&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;</code></pre>

Кастомно:

if( $(document).height() <= $(window).height() ){  
  $(".bottom-bar").addClass("fixed");
}
.fixed {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
}
<script src="https://code.jquery.com/jquery-2.0.3.js"></script>

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.2/css/bootstrap.min.css" />

<navbar>Navbar</navbar> <div class="container" style="padding-top: 20px"> <div ng-view></div>

Content </div>

<div class="bottom-bar"> bottom-bar <div class="container"> <div class="col-xs-8 column"> <!-- content --> </div> <div class="col-xs-4 col-md-4 column"> <!-- content --> </div> </div> </div>

SVE
  • 22,387
  • Нет-нет, мне не нужен фиксированный футер. Попробую еще раз объяснить - если контент на странице занимает мала места по высоте - нужно вывести футер как на втором скрине. Если контента много - он должен быть в конце страницы. – Илья Бизунов Nov 23 '16 at 13:38
  • @ИльяБизунов, поправила – SVE Nov 23 '16 at 13:48
0

минимальная высота элементу задается через css-свойство min-height

Stalker
  • 533
0

Проще всего данную задачу решить при помощи флексбокса. Таким образом, высота футера может быть какой угодно и динамически меняться.

HTML:

<html>
  <body class="page-body">
    <main role="main" class="page-content"></main>
    <footer class="page-footer"></footer>
  </body>
</html>

CSS:

.page-body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

.page-content {
  flex-grow: 1;
}
  • Да, я и флексбоксами пробовал - все арвно не получается. Не могу понять в чем проблема. Я прикрепил скриншоты в вопрос, может быть, посмотрев на них станет понятнее о чем я говорю. – Илья Бизунов Nov 23 '16 at 13:11
0

Все оказалось совсем просто. Я задал минимальную высоту не html и body, а контейнеру который в иерархии страницы находится выше, чем футер.

body > .container {
    min-height: calc(100vh - 177px);
}