фиксация блока по координате вертикали

210
29 сентября 2017, 20:14

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

$(window).scroll(function(){
$('#menu').css({
    'top': $(this).scrollTop()
});});

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

Answer 1

Если это возможно, рекомендую использовать css position: sticky.
Поддерживается в Edge 16+, FF 32+, Chrome 56+, Safari 8+.

body { 
  position: relative; 
} 
 
img, aside { 
  float: left; 
  width: 8em; 
} 
 
aside { 
  margin-top: 8px; 
  clear: left; 
  background: silver; 
 
  -webkit-position: sticky; 
  position: sticky; 
  top: 0; 
} 
 
aside a { 
  display: block; 
} 
 
main { 
  margin-left: 9em; 
} 
 
p:first-child { 
  margin-top: 0; 
} 
 
label { 
  display: block; 
  cursor: pointer; 
  color: red; 
  font-weight: bold; 
} 
 
#hscroll { 
  display: none; 
} 
 
#hscroll:checked ~ main { 
  width: 100%; 
}
<input type=checkbox id=hscroll> 
 
<img src=//www.gravatar.com/avatar/cbfaff96665b7567defe1b34a883db8b?s=256&d=identicon&r=PG> 
 
<aside> 
  <label for=hscroll>Show/hide scroll</label> 
  <a>Menu 1</a> 
  <a>Menu 2</a> 
  <a>Menu 3</a> 
  <a>Menu 4</a> 
  <a>Menu 5</a> 
  <a>Menu 6</a> 
  <a>Menu 7</a> 
  <a>Menu 8</a> 
  <a>Menu 9</a> 
</aside> 
 
<main> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
  <p>У меня на сайте присутствует боковое меню которое должно фиксироваться при вертикальном скроллинге страницы, я решил эту проблему следующим образом: $(window).scroll(function(){ $('#menu').css({     'top': $(this).scrollTop() });}); Но проблема в том что при таком подходе страница автоматически удлиняется вниз, кода пользователь проскроллит до самого низа страницы, подскажите что делать?</p> 
</main>

READ ALSO
Slick responsive

Slick responsive

Имею такую конструкцию:

206
Получение массива из значений инпутов и селектов

Получение массива из значений инпутов и селектов

Здравствуйте! На сайте есть страница с несколькими селектами (содержимое берется из бд) и тем же количеством инпутов:

238