Небольшая хитрость всем известного футера

в 13:51, , рубрики: css, html, jquery, верстка, метки: , , ,

Здравствуй хабр!
Рассмотрим старый, известный рецепт прижатия футера к низу страницы минусовыми отступами, это удобно, просто и главное — красиво.
Хочу предложить несколько нестандартную трактовку старого рецепта, с небольшим включением jQuery, просто еще один взгляд на привычные вещи, прошу заинтересовавшимся под кат.

Для примера возьмем немного порубленную в фотошопе страницу биханки
Небольшая хитрость всем известного футера

Между футером и контентом осталось много свободного места, а если так?
Небольшая хитрость всем известного футера

Вроде лучше, теперь сделаем контента немного больше
Небольшая хитрость всем известного футера

Золотой середины нет. Или есть? О красоте сложно спорить, кому то покажется что большой футер лучше, кому то меньший лучше, давайте сделаем футер с динамической высотой.

Простая страница с кодом

<!DOCTYPE html>
<!--[if lt IE 7]>      <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]>         <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]>         <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="viewport" content="width=device-width">
    </head>
    <body>
        <style>
          SECTION.main, FOOTER {
            width:1100px;
            margin:0 auto
          }
          FOOTER {
            height:20px;
          }
        </style>
        <SECTION class="main">
        </SECTION>
        <FOOTER>
          <p>я футер!
        </FOOTER>
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
        <script>window.jQuery || document.write('<script src="js/vendor/jquery-1.9.1.min.js"></script>')</script>
        <script>
            $(document).ready(function(){
                function setFooterPosition()
                {
                    var mainBlockHeight = $('SECTION.main').outerHeight(true)
                    var browserViewportHeight = $(window).height()
                    var footerBlockHeight = $('FOOTER').outerHeight(true)

                    var lastViewportHeight = browserViewportHeight - (mainBlockHeight + footerBlockHeight)

                    if(lastViewportHeight > 0)
                    {
                        var needFooterMarginTop = lastViewportHeight * 0.2 //20%
                        var needFooterPaddingBottom = lastViewportHeight * 0.8 //80%

                        $('FOOTER').css('marginTop', needFooterMarginTop)
                        $('FOOTER').css('paddingBottom', needFooterPaddingBottom)
                    }
                }

                $(window).resize(setFooterPosition())

                setFooterPosition()
            })
        </script>
    </body>
</html>

Скрипт на странице вычисляет свободное место. 20% он делает отступом между контентом и футером, а остальные 80% добавляет в высоту футера, если свободного места нет — оставляет стандартную высоту футера.

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

Автор: edli007

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js