Вам нужно сделать так, чтобы все элементы прилипали к одному и тому же контейнеру (содержащему блок) , добавив несколько смещений.
Вот базовый пример, где элементы будут прилипать к телу:
body {
margin:0;
min-height:200vh;
border:2px solid;
}
.first {
height:50px;
background:red;
position:sticky;
top:0;
}
.second {
height:50px;
background:blue;
position:sticky;
top:52px;
}
.third {
height:50px;
background:green;
position:sticky;
top:104px;
}
<div class="first"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
<div class="second"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
<div class="third"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
Не будет работать, если они находятся в разных контейнерах:
body {
margin: 0;
min-height: 300vh;
}
body > div {
border:2px solid;
}
.first {
height: 50px;
background: red;
position: sticky;
top: 0;
}
.second {
height: 50px;
background: blue;
position: sticky;
top: 52px;
}
.third {
height: 50px;
background: green;
position: sticky;
top: 104px;
}
<div>
<div class="first"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
</div>
<div>
<div class="second"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
</div>
<div>
<div class="third"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum
lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
</div>
Элемент с фиксированным позиционированием - это элемент, вычисленное значение позиции которого является фиксированным.Он обрабатывается как относительно позиционированный, пока его содержащий блок не пересекает указанный порог (например, задает для top значение, отличное от auto) в пределах своего корневого потока (или контейнера, в котором он прокручивается), и в этот момент он рассматривается как «застрявший» до встречи с противоположным краем содержащего его блока ref
Самая важная часть здесь - последняя.Поэтому, если все элементы не находятся в одном и том же контейнере, каждый из них достигнет края своего контейнера, и поведение закрепления на этом остановится.Обратите внимание, что в последнем примере каждый элемент перестанет двигаться при достижении bottom-border
содержащего его блока
. Если вы хотите обработать динамическую высоту, вы можете рассмотреть это решение: КакМогу ли я правильно отразить различные уровни заголовков с помощью позиции: sticky?
Еще один связанный вопрос, чтобы получить больше примеров: css sticky - не прилипает к нижней части родителя