Я использую CSS position: sticky
, чтобы прикрепить некоторые элементы к моей странице.Я использую <div>
s для создания сетчатой структуры (<table>
s не подходит для моего варианта использования).Обратите внимание, что это конкретно вопрос position: sticky
- я не ищу решение Javascript, и я считаю, что position: sticky
должен работать должным образом в зависимости от спецификации и поведения в других браузерах.
Мне нужно вставить строку для вертикальной прокрутки и первую ячейку в этом ряду для горизонтальной прокрутки.Если я использую position: sticky; left: 0;
в первой ячейке без , придерживающейся строки, ячейка просто остается влево.Тем не менее, в Safari , если я использую, например.
.row {
position: sticky;
top: 10px;
width: ...
}
.cell {
position: sticky;
left: 0;
width: ...
}
строка придерживается при вертикальной прокрутке по желанию, но ячейка не прилипаетпри горизонтальной прокрутке.
Код ведет себя так, как нужно в Chrome и Firefox, и в iframe
в Safari .
Вот некоторый коддля минимального примера:
CSS:
.row {
position: -webkit-sticky;
position: sticky;
top: 10px;
white-space: nowrap;
width: 2000px;
z-index: 30;
}
.cell {
display: inline-block;
width: 100px;
}
.sticky {
position: -webkit-sticky;
position: sticky;
left: 0;
font-weight: bold;
}
HTML:
<div class="row">
<div class="cell sticky">Sticky</div>
<div class="cell">Content</div>
<div class="cell">Content</div>
...
</div>
Загруженные файлы здесь (нельзя использовать codepen / jsfiddle, поскольку они загружаются в iframe):
https://qcn.github.io/minimal_sticky.html Минимальный пример: не работает в Safari, работает в Chrome / Firefox
https://qcn.github.io/minimal_sticky_iframe.html Тот же минимальный пример, загруженный в iframe:в Safari работает!
Еще одна интересная вещь, которую я заметил, заключалась в том, что если я прокручиваю страницу по горизонтали, а затем обновляюсь, липкая ячейка визуализируется слева от окна просмотра, а затем прокручивается нормально в этой позиции (т. е. онавсе еще не прилипает, но он знает, где он должен был быть при загрузке страницы!).Это и тот факт, что поведение работает внутри iframe и в других браузерах, заставляет меня подозревать, что это ошибка браузера, но я не могу найти другие ссылки на нее.