@sasha_jarvi

Как выполнить “липкий сайдбар” с остановкой скролла на определенном элементе и возвращением скролла при пролистывании данного элемента?

Имеется следующий код:

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
</head>
<body>
  <header>Header</header>
  <main>
    <div class="container">
      <div class="row justify-content-around">
        <div class="col-12 col-sm-8 col-md-6 col-lg-5 content-1">Content 1</div>
    <div class="col-12 col-sm-8 col-md-6 col-lg-5" id="sidebar">Sidebar</div>
        <div class="col-12" id="large-content-block">Large content</div>
        <div class="col-12 col-sm-8 col-md-6 col-lg-5 content-2">Content 2</div>
        <div class="col-lg-5"></div>
      </div>
    </div>
   </main>
  <footer>Footer</footer>
</body>
</html>


CSS:

body {
  color: #fff;
}

header, footer {
  background-color: green;
  padding: 50px 25px 50px;
}

.content-1, .content-2 {
  background-color: lightblue;
  padding: 50px 20px 50px;
  height: 800px;
  margin-top: 30px;
  margin-bottom: 30px;
}

#sidebar {
  background-color: lightblue;
  padding: 50px 25px 50px;
  height: 200px;
  margin-top: 30px;
  margin-bottom: 30px;
}

#large-content-block {
  background-color: red;
  padding: 50px 25px 50px;
  height: 200px;
  margin-bottom: 30px;
}


Необходимо выполнить следующее:

  1. Сделать #sidebar липким, при этом скролл данного элемента должен останавливаться при достижении #large-content-block.
  2. После того, как мы проскроллим элемент #large-content-block, #sidebar снова должен скроллиться. Скролл должен останавливаться при достижении футера.


Каким путем можно реализовать данный функционал?
Codepen: https://codepen.io/anon/pen/byqQyp
  • Вопрос задан
  • 651 просмотр
Решения вопроса 1
hzzzzl
@hzzzzl
вот по первому вопросу
https://codepen.io/anon/pen/OYpYZE
(пришлось чуть поменять хтмл)

про второй вопрос, "мы проскроллим элемент #large-content-block" это начиная с какого момента?
чтобы сайдбар появлялся под красным блоком, когда доскроллили до верхней границы красного блока?
думаю надо будет ловить этот момент через js event scroll, и переносить блок с сайдбаром из одного места в другое
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы