Давайте добавим некоторую границу, и мы ясно увидим, что происходит:
.scroll {
width: 200px;
height: 200px;
border: 1px solid;
overflow: auto;
}
.scroll > div {
border:2px solid green;
}
.container {
width: 600px;
height: 1000px;
border:2px solid red!important;
}
.container > div {
border:2px solid green;
}
.sticky-left {
position: sticky;
left: 0;
}
.sticky-top {
position: sticky;
top: 0;
}
<div class="scroll">
<div class="sticky-top">sticky-top</div>
<div class="sticky-left">sticky-left</div>
<div class="container">
<div class="sticky-top">sticky-top-nested</div>
<div class="sticky-left">sticky-left-nested</div>
</div>
</div>
Как видите, вложенные липкие элементы имеют ширину, равную родительской ширине (поскольку они являются блочными элементами), поэтому места длялевый-липкий, чтобы иметь любое липкое поведение 1 , поскольку у него есть width:100%
в отличие от верхнего, который все еще может придерживаться, потому что его высота меньше, чем родительская высота.
Для не вложенных элементов я думаю, что это понятно.
Сделайте элемент inline-block
или уменьшите ширину, и у вас будет липкое поведение:
.scroll {
width: 200px;
height: 200px;
border: 1px solid;
overflow: auto;
}
.scroll > div {
border:2px solid green;
}
.container {
width: 600px;
height: 1000px;
border:2px solid red!important;
}
.container > div {
border:2px solid green;
width:150px;
}
.sticky-left {
position: sticky;
left: 0;
}
.sticky-top {
position: sticky;
top: 0;
}
<div class="scroll">
<div class="sticky-top">sticky-top</div>
<div class="sticky-left">sticky-left</div>
<div class="container">
<div class="sticky-top">sticky-top-nested</div>
<div class="sticky-left">sticky-left-nested</div>
</div>
</div>
1 Элемент с липким расположением - это элемент, вычисленное значение позиции которого является липким, Он обрабатывается как относительно позиционированный, пока его содержащий блок не пересекает указанный порог (например, задает для top значение, отличное от auto) в пределах своего корневого потока (или контейнера, в котором он прокручивается), и в этот момент он рассматривается как«застрял» до встречи с противоположным краем содержащего его блока . ref
В вашем случае вы всегда встречали противоположноекрай.