Одна из идей - не определять right
и не указывать браузеру использовать статическую позицию.Для этого вам нужно убедиться, что статическая позиция находится справа.
Вот пример, где вы должны отрегулировать направление (и сбросить его для содержимого)
.wrap {
width: 250px;
margin: 0 auto;
height: 150vh;
background: silver;
direction:rtl;
}
.sidebar {
position: fixed;
top: 0;
height: 100vh;
background: gold;
}
.wrap > div:last-child {
direction:ltr;
}
body {
margin:0;
}
<div class='wrap'>
<div class='sidebar'>sidebar</div>
<div> some content</div>
</div>
Начиная с спецификации :
Для целей настоящего раздела и следующего, термин "статическая позиция "(элемента) относится примерно к позиции, которую элемент имел бы в нормальном потоке.
Тогда
Если все три из 'осталось',' width 'и' right '- это' auto ': сначала установите любые значения' auto 'для' margin-left 'и' margin-right 'на 0. Затем, если свойство' direction 'элемента, устанавливающегоблок, содержащий статическую позицию, 'ltr' устанавливает 'left' в статическую позицию и применяет правило номер три ниже;в противном случае установите «вправо» в статическую позицию и примените правило номер один ниже.
Вот еще одна идея с position:sticky
.wrap {
width: 250px;
margin: 0 auto;
height: 150vh;
background: silver;
}
.sidebar {
position: sticky;
float:right; /* Yes float!*/
top: 0;
height: 100vh;
background: gold;
}
body {
margin:0;
}
<div class='wrap'>
<div class='sidebar'>sidebar</div>
<div> some content</div>
</div>