I want my .sidebar flex element to be sticky when I'm scrolling but position: sticky; top: 0; doesn't work.
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
body {
  height: 100vh;
}
header {
  width: 100%;
  height: 100px;
  background-color: blue;
  opacity: 0.5;
  position: sticky;
  z-index: 100;
  top: 0;
}
.container {
  display: flex;
  gap: 2rem;
  position: relative;
}
.sidebar {
  position: sticky;
  top: 0;
}
.main {
  display: flex;
  gap: 2rem;
  flex-direction: column;
}
.main div {
  width: 300px;
  aspect-ratio: 1 / 1;
  background-color: red;
}<div class="root">
  <header></header>
  <div class="container">
    <div class="sidebar">
      <p>Sidebar</p>
      <button>Upload image</button>
    </div>
    <div class="main">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </div>
</div> 
    