Фиксированный плавающий sidebar

27.03.2018

Самый простой пример фиксированного плавающего сайдбара на HTML+CSS+JS.

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

HTML-разметка простой страницы

<div class="header">HEADER</div>
<div class="content">CONTENT</div>
<div class="sidebar">FIXED SIDEBAR</div>
<div class="footer">FOOTER</div>

CSS-стили для блоков контента

.header {
  width: 100%;
  background: purple;
  height: 80px;
}
.content {
  width: 80%;
  background: blue;
  height: 800px;
  float: left;
}
.sidebar {
  width: 20%;
  background: green;
  height: 100px;
  float: right;
}
.sidebar.fixed {
  position: fixed;
  right: 50%;
  margin-right: -50%;
}
.footer {
  width: 100%;
  background: gray;
  height: 50px;
  clear: both;
}

JS-скрипт для фиксированного сайдбара при прокрутке страницы

Не забываем подключить jQuery

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Скрипт:

$(function() {
  var $window = $(window);
  var $sidebar = $(".sidebar");
  var $sidebarTop = $sidebar.position().top;
  var $sidebarHeight = $sidebar.height();
  var $footer = $('.footer');
  var $footerTop = $footer.position().top;

  $window.scroll(function(event) {
    $sidebar.addClass("fixed");
    var $scrollTop = $window.scrollTop();
    var $topPosition = Math.max(0, $sidebarTop - $scrollTop);
    
    if ($scrollTop + $sidebarHeight > $footerTop) {
      var $topPosition = Math.min($topPosition, $footerTop - $scrollTop - $sidebarHeight);
    }

    $sidebar.css("top", $topPosition);
  });
});

Рабочий пример:

See the Pen Фиксированный плавающий sidebar by Denis (@deniscreative) on CodePen.0

Полезная инфа:

Оставить комментарий