【问题标题】:How is horizontal position:sticky and width:auto related?水平位置:粘性和宽度:自动如何相关?
【发布时间】:2019-02-16 00:59:46
【问题描述】:

有一个水平粘性元素,我希望 width 不能是 auto,这样粘性才能正常工作。

因此,虽然此剪辑有效,但删除 width: 100px; 将导致非粘性行为。

#a {
  position: sticky;
  left: 0;
  background: red;
  width: 100px;
}

#b {
  /* this is to make a scrollbar */
  width: 3000px;
  background: blue;
}
<div id="a">a</div> 
<div id="b">b</div> 

为什么会这样? 我有点假设浏览器需要宽度来检测元素何时离开视口,但为什么这不适用于水平但垂直模式下的自动计算宽度?

【问题讨论】:

标签: css css-position


【解决方案1】:

粘性定位元素仍被限制在其包含块的边界内。当您的元素具有自动宽度并沿水平轴粘性定位时,在其包含块的最右边开始推动它之前,它没有剩余空间可以粘贴,因为它的包含块被滚动出视图。

:root {
  border: medium solid fuchsia;
}

#a {
  position: sticky;
  left: 0;
  background: red;
  width: 100px;
}

#t:not(:checked) ~ #a {
  width: auto;
}

#b {
  /* this is to make a scrollbar */
  width: 3000px;
  background: blue;
}
<input type="checkbox" id="t" checked><label for="t"><code>width: 100px;</code></label>
<div id="a">a</div> 
<div id="b">b</div> 

【讨论】:

  • 我可能会说我们需要考虑一个 inline-block 容器元素来满足 OP 的期望。
  • 虽然这不是我所要求的 100%,但它帮助我回答了这个问题。因此,当我不指定 with 时,该元素的 与其父元素相同,因此没有粘性空间。
  • @Lux:我没有提到这一点的原因是因为我假设你已经知道,当你删除 width: 100px 声明时,你提供的 sn-p 会让你清楚。我假设您在问为什么自动宽度会阻止粘性行为,我完全回答了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 1970-01-01
  • 1970-01-01
  • 2021-09-28
  • 2013-02-02
  • 1970-01-01
相关资源
最近更新 更多