У меня есть макет с двумя столбцами, где я хочу, чтобы правый столбец был position: sticky
, чтобы он оставался в поле зрения при прокрутке более длинного левого столбца.
Это два столбца начальной загрузки, поэтому первое, что я должен был сделать, это удалить поплавки (и вместо этого использую display: inline-block
).
Это прекрасно работает само по себе или в верхней части DOM этой конкретной страницы, но в отрендеренном месте (которое, увы, составляет около 30 или около того делений глубины ... не спрашивайте ... Я не могу заставить его работать. Обе колонки просто продолжают прокручиваться.
Я знаю, есть ли у родительского элемента свойство overflow
, отличное от visible
, которое может нарушить position: sticky
, но здесь это не является проблемой. Может ли быть так, что если любой родительский элемент в цепочке имеет переполнение, это может нарушить липкое позиционирование?
Я просто уверен, что искать в этой ситуации, чтобы определить, что ломает его в этой ситуации. Есть ли другие ключевые вещи, на которые стоит обратить внимание, когда речь идет о липком позиционировании?
РЕДАКТИРОВАТЬ: я перефразировал свой вопрос, поскольку он определенно (после дальнейшего изучения и тестирования) определил, что проблема с родительским элементом в верхней части DOM была установлена на overflow-x: hidden
. Поскольку это общий код, мне придется выяснить причину этого и почему он там есть.
Но ... тем временем, есть ли какие-нибудь известные обходные пути к этому ... где можно использовать элемент ниже по дереву DOM в качестве содержащего элемента для элемента, расположенного закрепленным?
В приведенном ниже примере, если вы удалите переполнение из .theproblem
, страница будет работать так, как я хочу (правый столбец «залипает» при прокрутке страницы).
.theproblem {
overflow-x: hidden;
}
.column {
display: inline-block;
width: 45%;
vertical-align: top;
}
.column1 {
border: 1px solid red;
height: 1000px;
}
.column2 {
border: 1px solid green;
position: sticky;
top: 1px;
}
<div class="theproblem">
<div class="columnwrapper">
<div class="column column1">
This is column 1 (the tall one)
</div>
<div class="column column2">
This is column 2 (the sticky one)
</div>
</div>
</div>
JSBin link