【问题标题】:Why isn't position:sticky with left:0 working inside a scrollable container?为什么 position:sticky with left:0 不能在可滚动容器内工作?
【发布时间】:2020-01-06 21:41:21
【问题描述】:

我有这个问题 - 我有一个包含一些行的容器,并且在每一行中都有一个粘性左列,然后是多个其他列。现在在下面的示例中,这可以工作一段时间,但是当您滚动父容器时,位置sticky 不再起作用,并且在您滚动时它会被推动。

.container {
  overflow-x: scroll;
}

.row {
  display: flex;
  width: 100%;
  
}

.item {
  min-width: 173px;
}

.sticky {
  min-width: 250px;
  position: sticky;
  left: 0;
  background: red;
}
<div class="container">
  <div class="row">
    <div class="item sticky">STICKY ROW 1</div>
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
    <div class="item">9</div>
    <div class="item">10</div>
  </div>
  <div class="row">
    <div class="item sticky">STICKY ROW 2</div>
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
    <div class="item">9</div>
    <div class="item">10</div>
  </div>
  <div class="row">
    <div class="item sticky">STICKY ROW 3</div>
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
    <div class="item">4</div>
    <div class="item">5</div>
    <div class="item">6</div>
    <div class="item">7</div>
    <div class="item">8</div>
    <div class="item">9</div>
    <div class="item">10</div>
  </div>
</div>

有没有办法解决这个问题..或者有其他方法可以解决这个问题吗??

我想要的结果是能够将粘性 div 粘贴在 0 的左侧,并让其他列在下方滚动..

现在我知道,如果 overflow-x: scroll 在实际的 .row 元素上,它会按预期工作.. 但我可能有 100 多行,所以滚动需要在父容器上

【问题讨论】:

    标签: html css flexbox sticky


    【解决方案1】:

    添加边框以更好地查看与使用块级元素和width:100% 的限制相关的问题(不是您设置的无用而是块元素的默认行为)

    .container {
      overflow-x: scroll;
    }
    
    .row {
      display: flex;
      border:1px solid;
    }
    
    .item {
      min-width: 173px;
    }
    
    .sticky {
      min-width: 250px;
      position: sticky;
      left: 0;
      background: red;
    }
    <div class="container">
      <div class="row">
        <div class="item sticky">STICKY ROW 1</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
      <div class="row">
        <div class="item sticky">STICKY ROW 2</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
      <div class="row">
        <div class="item sticky">STICKY ROW 3</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
    </div>

    考虑使用inline-flex 的内联级别元素来解决问题。添加min-width:100% 以确保在内容很小的情况下至少覆盖100% 的宽度。

    .container {
      overflow-x: scroll;
    }
    
    .row {
      display: inline-flex;
      min-width: 100%;
      border:1px solid;
    }
    
    .item {
      min-width: 173px;
    }
    
    .sticky {
      min-width: 250px;
      position: sticky;
      left: 0;
      background: red;
    }
    <div class="container">
      <div class="row">
        <div class="item sticky">STICKY ROW 1</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
      <div class="row">
        <div class="item sticky">STICKY ROW 2</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
      <div class="row">
        <div class="item sticky">STICKY ROW 3</div>
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
        <div class="item">9</div>
        <div class="item">10</div>
      </div>
    </div>

    一些相关问题:

    Nested sticky element with zero left does not sticky

    Why is my element not sticking to the left when using position sticky in css?

    【讨论】:

    • 完美答案。将元素更改为inline-flex,现在它会扩展以适应宽度,而不是将自身限制为 100% 宽度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2015-04-29
    • 2013-09-22
    • 2013-05-26
    相关资源
    最近更新 更多