Верхний нижний колонтитул в конце содержимого [дубликат]

Вы можете использовать pandas.DataFrame.fillna с опцией method='ffill'. 'ffill' означает «прямое заполнение» и будет распространять последнее действительное наблюдение вперед. Альтернативой является 'bfill', который работает одинаково, но обратный.

import pandas as pd

df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])
df = df.fillna(method='ffill')

print(df)
#   0  1  2
#0  1  2  3
#1  4  2  3
#2  4  2  9

Для этого также существует функция прямого синонима, pandas.DataFrame.ffill , чтобы сделать вещи проще .

248
задан Bill the Lizard 21 October 2009 в 01:22
поделиться

23 ответа

Чтобы получить липкий нижний колонтитул:

  1. У вас есть <div> с class="wrapper" для вашего контента.
  2. Перед закрытием </div> в wrapper поместите <div class="push"></div>.
  3. Сразу после закрытия </div> wrapper поместите <div class="footer"></div>.
* {
    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's height */
}
.footer, .push {
    height: 142px; /* .push must be the same height as .footer */
}
188
ответ дан TylerH 21 August 2018 в 12:56
поделиться
  • 1
    Он не работает в asp.net с & lt; form & gt; тег – jlp 28 February 2010 в 13:59
  • 2
    @jlp: вам нужно добавить тег формы в команду height: 100%, иначе он сломает липкий нижний колонтитул. Например: html, body, form {height: 100%;} – dazbradbury 9 March 2012 в 15:21
  • 3
    Я заметил, что добавление прокладки в нижний колонтитул прикручивает его, но выяснил, что это можно зафиксировать, вычитая дополнительную прокладку на нижнем колонтитуле из высоты {footer, push}. – nicooga 20 October 2012 в 08:13
  • 4
    Подробное объяснение с демонстрацией представлено на этом сайте: CSS Sticky Footer – mohitp 22 March 2013 в 11:15
  • 5
    @Syk Я обнаружил, что уменьшение минимальной высоты помогает. 94% - хорошее значение, но вы все еще видите проблему на мобильном телефоне: (Не уверен, что здесь есть реальное решение. – ACK_stoverflow 16 November 2016 в 07:14

CSS:

  #container{
            width: 100%;
            height: 100vh;
            }
 #container.footer{
            float:left;
            width:100%;
            height:20vh;
            margin-top:80vh;
            background-color:red;
            }

HTML:

           <div id="container">
               <div class="footer">
               </div>
           </div>

Это должно сделать трюк, если вы ищете ответный нижний колонтитул, выровненный в нижней части страницы, который всегда удерживает верхний предел 80% высоты просмотра.

1
ответ дан Ajith 21 August 2018 в 12:56
поделиться

jQuery CROSS BROWSER CUSTOM PLUGIN - $ .footerBottom ()

Или используйте jQuery, как я, и установите высоту нижнего колонтитула auto или fix, что бы вы ни хотели, он будет работать так или иначе. этот плагин использует селектор jQuery, поэтому для его работы вам нужно будет включить библиотеку jQuery в ваш файл.

Вот как вы запускаете плагин. Импортируйте jQuery, скопируйте код этого настраиваемого плагина jQuery и импортируйте его после импорта jQuery! Это очень простой и простой, но важный.

Когда вы это сделаете, все, что вам нужно сделать, это запустить этот код:

$.footerBottom({target:"footer"}); //as html5 tag <footer>.
// You can change it to your preferred "div" with for example class "footer" 
// by setting target to {target:"div.footer"}

нет необходимости размещать его внутри события готовности документа. Он будет работать хорошо, как есть. Он пересчитает положение вашего нижнего колонтитула при загрузке страницы и при изменении размера окна.

Вот код плагина, который вам не нужно понимать. Просто знайте, как его реализовать. Это делает для вас работу. Однако, если вам нравится знать, как это работает, просто просмотрите код. Я оставлял комментарии для вас.

//import jQuery library before this script

// Import jQuery library before this script

// Our custom jQuery Plugin
(function($) {
  $.footerBottom = function(options) { // Or use "$.fn.footerBottom" or "$.footerBottom" to call it globally directly from $.footerBottom();
    var defaults = {
      target: "footer",
      container: "html",
      innercontainer: "body",
      css: {
        footer: {
          position: "absolute",
          left: 0,
          bottom: 0,
        },

        html: {
          position: "relative",
          minHeight: "100%"
        }
      }
    };

    options = $.extend(defaults, options);

    // JUST SET SOME CSS DEFINED IN THE DEFAULTS SETTINGS ABOVE
    $(options.target).css({
      "position": options.css.footer.position,
      "left": options.css.footer.left,
      "bottom": options.css.footer.bottom,
    });

    $(options.container).css({
      "position": options.css.html.position,
      "min-height": options.css.html.minHeight,
    });

    function logic() {
      var footerOuterHeight = $(options.target).outerHeight(); // Get outer footer height
      $(options.innercontainer).css('padding-bottom', footerOuterHeight + "px"); // Set padding equal to footer height on body element
      $(options.target).css('height', footerOuterHeight + "!important"); // Set outerHeight of footer element to ... footer
      console.log("jQ custom plugin footerBottom runs"); // Display text in console so ou can check that it works in your browser. Delete it if you like.
    };

    // DEFINE WHEN TO RUN FUNCTION
    $(window).on('load resize', function() { // Run on page loaded and on window resized
      logic();
    });

    // RETURN OBJECT FOR CHAINING IF NEEDED - IF NOT DELETE
    // return this.each(function() {
    //   this.checked = true;
    // });
    // return this;
  };
})(jQuery); // End of plugin


// USE EXAMPLE
$.footerBottom(); // Run our plugin with all default settings for HTML5
/* Set your footer CSS to what ever you like it will work anyway */
footer {
  box-sizing: border-box;
  height: auto;
  width: 100%;
  padding: 30px 0;
  background-color: black;
  color: white;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<!-- The structure doesn't matter much, you will always have html and body tag, so just make sure to point to your footer as needed if you use html5, as it should just do nothing run plugin with no settings it will work by default with the <footer> html5 tag -->
<body>
  <div class="content">
  <header>
    <nav>
      <ul>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
        <li>link</li>
      </ul>
    </nav>
  </header>

  <section>
      <p></p>
      <p>Lorem ipsum...</p>
    </section>
  </div>
  <footer>
    <p>Copyright 2009 Your name</p>
    <p>Copyright 2009 Your name</p>
    <p>Copyright 2009 Your name</p>
  </footer>

0
ответ дан Antoine 21 August 2018 в 12:56
поделиться
  • 1
    Ванильный java-скрипт менее длинный, чем плагин. – Ravinder Payal 4 March 2017 в 19:31

Я иногда с этим боролся, и я всегда находил, что решение со всеми этими div внутри друг друга было беспорядочным решением. Я просто немного испортил его, и я лично узнал, что это работает, и это, безусловно, один из самых простых способов:

html {
    position: relative;
}

html, body {
    margin: 0;
    padding: 0;
    min-height: 100%;
}

footer {
    position: absolute;
    bottom: 0;
}

Что мне нравится в этом, так это то, что никакой дополнительный HTML не должен быть применяется. Вы можете просто добавить этот CSS, а затем написать свой HTML как всегда

1
ответ дан Daniel Alsaker 21 August 2018 в 12:56
поделиться
  • 1
    Это сработало, но я добавил ширину: 100% к нижнему колонтитулу. – Victor.Uduak 22 February 2018 в 03:26

Использовать CSS vh units!

Вероятно, наиболее очевидным и небедовым способом сделать липкий нижний колонтитул было бы использование новых единиц просмотра css .

Возьмем, к примеру, следующую простую разметку:

<header>header goes here</header>
<div class="content">This page has little content</div>
<footer>This is my footer</footer>

Если заголовок имеет высоту 80 пикселей, а нижний колонтитул высотой 40 пикселей, мы можем сделать наш липкий нижний колонтитул одним единственное правило в содержимом div:

.content {
    min-height: calc(100vh - 120px);
    /* 80px header + 40px footer = 120px  */
}

Это означает: пусть высота содержимого div должна быть не менее 100% от высоты видового экрана минус комбинированные высоты верхнего и нижнего колонтитула.

Вот и все.

* {
    margin:0;
    padding:0;
}
header {
    background: yellow;
    height: 80px;
}
.content {
    min-height: calc(100vh - 120px);
    /* 80px header + 40px footer = 120px  */
    background: pink;
}
footer {
    height: 40px;
    background: aqua;
}
<header>header goes here</header>
<div class="content">This page has little content</div>
<footer>This is my footer</footer>

... и вот как работает тот же код с большим количеством содержание в содержимом div:

* {
    margin:0;
    padding:0;
}
header {
    background: yellow;
    height: 80px;
}
.content {
    min-height: calc(100vh - 120px);
    /* 80px header + 40px footer = 120px  */
    background: pink;
}
footer {
    height: 40px;
    background: aqua;
}
<header>header goes here</header>
<div class="content">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius. Claritas est etiam processus dynamicus, qui sequitur mutationem consuetudium lectorum. Mirum est notare quam littera gothica, quam nunc putamus parum claram, anteposuerit litterarum formas humanitatis per seacula quarta decima et quinta decima. Eodem modo typi, qui nunc nobis videntur parum clari, fiant sollemnes in futurum.
</div>
<footer>
    This is my footer
</footer>

NB:

1) Высота верхнего и нижнего колонтитула должна быть известна

2) В старых версиях IE (IE8-) и Android (4.4-) не поддерживаются единицы просмотра. ( caniuse )

3) Когда-то у веб-кита возникла проблема с единицами просмотра в правиле calc. Это действительно исправлено ( см. Здесь ), поэтому там нет проблем. Однако, если вы хотите избежать использования calc по какой-либо причине, вы можете обойти это, используя отрицательные поля и отступы с размером окна -

. Так же:

* {
    margin:0;padding:0;
}
header {
    background: yellow;
    height: 80px;
    position:relative;
}
.content {
    min-height: 100vh;
    background: pink;
    margin: -80px 0 -40px;
    padding: 80px 0 40px;
    box-sizing:border-box;
}
footer {
    height: 40px;
    background: aqua;
}
<header>header goes here</header>
<div class="content">Lorem ipsum 
</div>
<footer>
    This is my footer
</footer>

67
ответ дан Danield 21 August 2018 в 12:56
поделиться
  • 1
    Это в значительной степени лучшее решение, которое я видел здесь, работал даже в моем странном случае с некоторым содержимым .content, переполненным в нижний колонтитул для тех, кто знает-зачем. И я думаю, что с sth, как Sass и переменными, это может быть все более гибким. – themarketka 5 December 2014 в 21:16
  • 2
    Действительно, этот работает как шарм. Легко откидываться и для не поддерживающих браузеров. – Aramir 3 July 2015 в 23:06
  • 3
    Как возиться с абсолютными измерениями, которые еще не взломаны? В лучшем случае это возможно less hacky – Jonathan 9 March 2016 в 10:33
  • 4
    Но и если высота нижнего колонтитула и заголовка затухает в процентах, а не px? Как 15% высоты страницы? – Fernanda Brum Lousada 27 April 2017 в 02:36
  • 5
    Единицы просмотра не всегда работают в мобильных браузерах, которые скрывают или отображают адресную строку в зависимости от положения прокрутки – Evgeny 28 April 2017 в 15:33

Вы можете использовать position: absolute для установки нижнего колонтитула в нижней части страницы, но затем убедитесь, что ваши 2 столбца имеют соответствующие margin-bottom, чтобы они никогда не закрывались нижним колонтитулом.

#footer {
    position: absolute;
    bottom: 0px;
    width: 100%;
}
#content, #sidebar { 
    margin-bottom: 5em; 
}
31
ответ дан Druzion 21 August 2018 в 12:56
поделиться
  • 1
    Я пробовал это с моей аналогичной настройкой (два столбца + нижний колонтитул), и это не работает. – isomorphismes 15 March 2012 в 08:44
  • 2
    каким образом это не работает? – Jimmy 15 March 2012 в 19:18
  • 3
    Он перекрывается с контентом, если контент растет. – Satya Prakash 17 October 2013 в 16:03
  • 4
    поэтому контент имеет крайность. вы должны установить его на любую фиксированную высоту, которую вы делаете в нижнем колонтитуле. – Jimmy 17 October 2013 в 19:06
  • 5
    Это очень хорошо работает с HTML 5 – Girish Kumar Kaitholil 17 January 2016 в 18:37

Одним из решений было бы установить минимальную высоту для полей. К сожалению, кажется, что это не очень хорошо поддерживается IE (сюрприз).

1
ответ дан Grey Panther 21 August 2018 в 12:56
поделиться

Для этого вопроса многие из ответов, которые я видел, неуклюжи, сложны в реализации и неэффективны, поэтому я подумал, что сделаю это, и придумаю мое собственное решение, которое всего лишь крошечный бит css и html

html,
body {
  height: 100%;
  margin: 0;
}
.body {
  min-height: calc(100% - 2rem);
  width: 100%;
  background-color: grey;
}
.footer {
  height: 2rem;
  width: 100%;
  background-color: yellow;
}
<body>
  <div class="body">test as body</div>
  <div class="footer">test as footer</div>
</body>

работает, устанавливая высоту нижнего колонтитула, а затем используя css calc для определения минимальной высоты страницы с нижним колонтитулом все еще внизу, надеюсь, что это поможет некоторым людям:)

1
ответ дан jjr2000 21 August 2018 в 12:56
поделиться

Попробуйте поместить контейнер div (с переполнением: авто) вокруг содержимого и боковой панели.

Если это не работает, у вас есть скриншоты или примеры ссылок, где нижний колонтитул не отображается правильно ?

1
ответ дан John Sheehan 21 August 2018 в 12:56
поделиться

Для меня самый лучший способ его отображения (нижний колонтитул) прилипает к дну, но не покрывает контент все время:

#my_footer {
    position: static
    fixed; bottom: 0
}
0
ответ дан juan Isaza 21 August 2018 в 12:56
поделиться

Несколько человек поставили ответ на эту простую проблему здесь, но мне нужно добавить одну вещь, учитывая, насколько я расстроен, пока не понял, что я делаю неправильно.

Как уже упоминалось, большинство простой способ сделать это так.

html {
    position: relative;
    min-height: 100%;
}

body {
    background-color: transparent;
    position: static;
    height: 100%;
    margin-bottom: 30px;
}

.site-footer {
    position: absolute;
    height: 30px;
    bottom: 0px;
    left: 0px;
    right: 0px;
}

Однако свойство, не упомянутое в сообщениях, по-видимому, потому, что оно обычно является по умолчанию, является позицией: static на теге body. Относительно относительного отношения не будет!

Моя тема Wordpress переопределила отображение тела по умолчанию, и это смутило меня в течение долгого времени.

0
ответ дан Kyle Zimmer 21 August 2018 в 12:56
поделиться

Мне не повезло с решениями, предлагаемыми на этой странице раньше, но потом, наконец, этот небольшой трюк сработал. Я включу его в другое возможное решение.

footer {
  position: fixed;
  right: 0;
  bottom: 0;
  left: 0;
  padding: 1rem;
  background-color: #efefef;
  text-align: center;
}
0
ответ дан Laughing Horse 21 August 2018 в 12:56
поделиться

Установите для CSS для #footer значение:

position: absolute;
bottom: 0;

Затем вам нужно будет добавить padding или margin в нижней части ваших #sidebar и #content до совпадают с высотой #footer или когда они перекрываются, #footer будет их покрывать.

Кроме того, если я правильно помню, IE6 имеет проблемы с CSS bottom: 0. Возможно, вам придется использовать JS-решение для IE6 (если вас интересует IE6, который есть).

11
ответ дан Linus Caldwell 21 August 2018 в 12:56
поделиться
  • 1
    когда окно слишком мало, нижний колонтитул отображается перед содержимым с помощью этого css. – Seichi 9 March 2015 в 21:49

Ни одно из этих чистых css-решений не работает корректно с динамическим изменением размера содержимого (по крайней мере, в Firefox и Safari), например, если у вас есть фон, установленный на контейнере div, страница, а затем измените размер (добавив несколько строк) в таблицу div, таблица может торчать из нижней части стилизованной области, т. е. вы можете иметь половину стола в белом на черной теме, а половину стола - белую, так как цвет шрифта и цвет фона белый.

Вложенная разметка в нескольких столбцах - это уродливый взломать, а 100% минимальный размер тела / контейнер div для приклеивания нижнего колонтитула - это уродливый хак.

Единственное не-скриптовое решение, которое работает во всех браузерах, которые я пробовал: гораздо более простая / короткая таблица с темой (для заголовка) / tfoot (для нижнего колонтитула) / tbody (td для любого количества столбцов) и высотой 100%. Но это восприняло семантические и SEO-недостатки (tfoot должен появиться перед tbody. Роли ARIA могут помочь достойным поисковым системам, хотя).

1
ответ дан obecalp 21 August 2018 в 12:56
поделиться

Используйте абсолютное позиционирование и z-index для создания липкого нижнего колонтитула с любым разрешением, используя следующие шаги:

  • Создайте нижний колонтитул с position: absolute; bottom: 0; и желаемой высотой
  • Установите дополнение нижнего колонтитула, чтобы добавить пробел между нижней частью содержимого и нижней частью окна
  • Создайте контейнер div, который обертывает содержимое тела с помощью position: relative; min-height: 100%;
  • Добавить нижнее дополнение к основному контенту div, равное высоте и дополнению нижнего колонтитула
  • Установите нижний колонтитул z-index больше, чем контейнер div, если нижний колонтитул обрезается

Вот пример:

    <!doctype html>
    <html>
    <head>
      <title>Sticky Footer</title>
      <meta charset="utf-8">
      <style>
      .wrapper { position: relative; min-height: 100%; }
      .footer { position: absolute; bottom:0; width: 100%; height: 200px; padding-top: 100px; background-color: gray; }
      .column { height: 2000px; padding-bottom: 300px; background-color: green; }
     /* Set the `html`, `body`, and container `div` to `height: 100%` for IE6 */

      </style>
    </head>
    <body>
      <div class="wrapper">
        <div class="column">
          <span>hello</span>
        </div>
        <div class="footer">
          <p>This is a test. This is only a test...</p>
        </div>
      </div>
    </body>
    </html>

2
ответ дан Paul Sweatte 21 August 2018 в 12:56
поделиться

Я создал очень простую библиотеку https://github.com/ravinderpayal/FooterJS

. Она очень проста в использовании. После включения библиотеки просто позвоните в эту строку кода.

footer.init(document.getElementById("ID_OF_ELEMENT_CONTAINING_FOOTER"));

Нижние колонтитулы могут быть динамически изменены путем вызова функции выше с другим параметром / id.

footer.init(document.getElementById("ID_OF_ANOTHER_ELEMENT_CONTAINING_FOOTER"));

Примечание. - Вы не должны изменять или добавлять CSS. Библиотека динамична, что подразумевает, что даже если размер экрана будет изменен после загрузки страницы, он сбросит положение нижнего колонтитула. Я создал эту библиотеку, потому что CSS решает проблему некоторое время, но когда размер отображения значительно меняется, от рабочего стола до планшета или наоборот, они либо перекрывают содержимое, либо больше не остаются липкими.

Другое решение - это CSS Media Queries, но вы должны вручную писать разные стили CSS для разных размеров экранов, в то время как эта библиотека выполняет свою работу автоматически и поддерживается всеми базовыми браузерами, поддерживающими JavaScript.

Редактирование решения CSS:

@media only screen and (min-height: 768px) {/* or height/length of body content including footer*/
    /* For mobile phones: */
    #footer {
        width: 100%;
        position:fixed;
        bottom:0;
    }
}

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

И это кажется лучшим решением, чем JavaScript / library one.

0
ответ дан Ravinder Payal 21 August 2018 в 12:56
поделиться

Решение Flexbox

Гибкая компоновка предпочтительна для естественной высоты заголовка и нижнего колонтитула. Это гибкое решение проверено в современных браузерах и фактически работает :) в IE11.

См. JS Fiddle .

HTML

<body>
  <header>
    ...
  </header>
  <main>
    ...
  </main>
  <footer>
    ...
  </footer>
</body>  

CSS

html {
  height: 100%;
}

body {
  height: 100%;
  min-height: 100vh;
  overflow-y: auto;
  -webkit-overflow-scrolling: touch;
  margin: 0;
  display: flex;
  flex-direction: column;
}

main {
  flex-grow: 1;
  flex-shrink: 0;
}

header,
footer {
  flex: none;
}
0
ответ дан Reggie Pinkham 21 August 2018 в 12:56
поделиться

Вот решение с jQuery, которое работает как шарм. Он проверяет, больше ли высота окна больше высоты тела. Если это так, то он меняет верхний край нижнего колонтитула для компенсации. Тестирование в Firefox, Chrome, Safari и Opera.

$( function () {

    var height_diff = $( window ).height() - $( 'body' ).height();
    if ( height_diff > 0 ) {
        $( '#footer' ).css( 'margin-top', height_diff );
    }

});

Если ваш нижний колонтитул уже имеет верхний край (например, 50 пикселей), вам нужно будет изменить последнюю часть для:

css( 'margin-top', height_diff + 50 )
13
ответ дан Sophivorus 21 August 2018 в 12:56
поделиться

Аналогичное решение для @gcedo , но без необходимости добавления промежуточного содержимого, чтобы подтолкнуть нижний колонтитул. Мы можем просто добавить margin-top:auto в нижний колонтитул, и он будет сдвинут в нижней части страницы независимо от его высоты или высоты содержимого выше.

body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  margin:0;
}

.content {
  padding: 50px;
  background: red;
}

.footer {
  margin-top: auto;
  padding:10px;
  background: green;
}
<div class="content">
  some content here
</div>
<footer class="footer">
  some content
</footer>

2
ответ дан Temani Afif 21 August 2018 в 12:56
поделиться
  • 1
    Другой подход заключался бы в том, чтобы дать .content flex: 1 0 auto; сделать его растёт и не горючим, но margin-top: auto; - хороший трюк, который включает в себя нижний колонтитул стиля, а не «несвязанный». .content, что приятно. На самом деле, мне интересно, почему Flex необходим в этом подходе. – YakovL 22 April 2018 в 21:36
  • 2
    @YakovL да, основная идея здесь заключается в трюке с маркой;) Я знаю, что могу сделать контент таким, но он будет почти таким же, как предыдущий ответ, когда идея состоит в том, чтобы подтолкнуть нижний колонтитул контентом ... и здесь я хотел избежать этого и толкнуть нижний колонтитул только с краем;) – Temani Afif 22 April 2018 в 21:39
  • 3
    @YakovL flex необходим для поля: auto :) мы не можем использовать его без него ... в качестве поля: auto ведет себя немного иначе с помощью гибкого элемента, а затем блокирует элементы. Если вы удалите display:flex, это не сработает, у вас будет нормальный поток элемента элемента – Temani Afif 22 April 2018 в 21:41
  • 4
    Да, я вижу, что это не сработает без него, но я не понимаю, почему (что «немного отличается») – YakovL 22 April 2018 в 21:53
  • 5
    @YakovL это просто, используя обычный элемент блока, поток всегда является строковым направлением, поэтому работает только маржа справа / слева, используемая с авто (например, известный элемент margin:0 auto до центрального блока), НО мы не имеем никакого направления в столбце, поэтому нет маржирования с верхним / нижним. Flexbox имеет направление строки / столбца;). Это небольшая разница, но маржа также используется в flexbox для выравнивания элемента, поэтому даже в пределах направления строки вы можете использовать маркерный верх / нижний авто, чтобы выровнять по вертикали. Вы можете прочитать здесь: w3.org/TR / CSS-Flexbox-1 / # авто-поле – Temani Afif 22 April 2018 в 21:59

Старый поток, который я знаю, но если вы ищете отзывчивое решение, это дополнение jQuery поможет:

$(window).on('resize',sticky);
$(document).bind("ready", function() {
   sticky();
});

function sticky() {
   var fh = $("footer").outerHeight();
   $("#push").css({'height': fh});
   $("#wrapper").css({'margin-bottom': -fh});
}

Полное руководство можно найти здесь: https: // pixeldesigns .co.uk / блог / отзывчивым-JQuery-липкий сноска /

0
ответ дан user1235285 21 August 2018 в 12:56
поделиться

Липкий нижний колонтитул с display: flex

Решение, вдохновленное липким нижним колонтитулом Филиппа Уолтона .

Объяснение

Это решение является действительным только для :

  • Chrome ≥ 21.0
  • Firefox ≥ 20.0
  • Internet Explorer ≥ 10
  • Safari ≥ 6.1

Он основан на дисплее flex , используя свойство flex-grow, которое позволяет элементу расти как по высоте, так и по ширине (когда flow-direction установлен на column или row соответственно), чтобы занять дополнительный пространство в контейнере.

Мы будем использовать также блок vh, где 1vh - , определенный как :

1 / 100-я высота окна просмотра

Поэтому высота 100vh - это краткое описание того, как элемент должен охватывать всю высоту видового экрана.

Это как вы бы структурировали свою веб-страницу:

----------- body -----------
----------------------------

---------- footer ----------
----------------------------

Чтобы нижний колонтитул лежал в нижней части страницы, вы хотите, чтобы пространство между телом и нижним колонтитулом увеличивалось настолько, насколько это необходимо нажмите нижний колонтитул внизу страница.

Поэтому наш макет становится:

----------- body -----------
----------------------------

---------- spacer ----------
                             <- This element must grow in height
----------------------------

---------- footer ----------
----------------------------

Реализация

body {
    margin: 0;
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.spacer {
    flex: 1;
}

/* make it visible for the purposes of demo */
.footer {
    height: 50px;
    background-color: red;
}
<body>
    <div class="content">Hello World!</div>
    <div class="spacer"></div>
    <footer class="footer"></footer>
</body>

Вы можете играть с ним в JSFiddle .

Прикиды Safari

Имейте в виду, что Safari имеет ошибочную реализацию flex-shrink свойство , которое позволяет деталям сжиматься больше минимальной высоты, необходимой для отображения содержимого. Чтобы исправить эту проблему, вам необходимо будет установить свойство flex-shrink явно 0 в .content и footer в приведенном выше примере:

.content { flex-shrink: 0; }
.footer  { flex-shrink: 0; }
37
ответ дан YakovL 21 August 2018 в 12:56
поделиться
  • 1
    Я считаю, что это правильный ответ, поскольку на самом деле это единственный подход, который работает, даже когда высота нижнего колонтитула неизвестна. – fstanis 21 August 2016 в 00:19
  • 2
    Я прошу OP принять это как ответ. Это единственное не-хакерское и общее решение. Из-за того, что другие ответы были сильно завышены, пользователи часто пропускают этот ответ, а позже сожалеют - из первых рук. :) – Sonu Mishra 14 August 2017 в 07:04
  • 3
    Это испортит сетку с помощью Neat 2 – Halfacht 16 March 2018 в 13:13
  • 4
    Но почему не решение самого Филиппа Уолтона, почему дополнительный «спейсер» элемент? – YakovL 19 April 2018 в 23:04
  • 5
0
ответ дан VXp 1 November 2018 в 07:16
поделиться
0
ответ дан Roger 1 November 2018 в 07:16
поделиться