【问题标题】:Stack sticky element after other sticky element with dynamic height在具有动态高度的其他粘性元素之后堆叠粘性元素
【发布时间】:2019-05-29 08:42:11
【问题描述】:

我需要堆叠一些像这样的粘性标题元素: https://webthemez.com/demo/sticky-multi-header-scroll/index.html

here 的stackover 中有此问题的解决方案。但就我而言,我的粘性标题具有动态高度。因此不可能硬编码棒头的顶部位置。我的代码如下:

html

<div class="sticky-header1">
    Header 1 with dynamic height
</div>
<div>
    Header 1 content
</div>

<div class="sticky-header2">
    Header 2 with dynamic height
</div>
<div>
    Header 2 content
</div>

css

.sticky-header1,
.sticky-header2
{
    position: sticky;
}

在这种情况下是否可以设置堆叠的粘性标题?首选纯 CSS 解决方案。

【问题讨论】:

标签: css sticky


【解决方案1】:

也许你需要像这样使用javascript:

firstdiv =document.querySelector(".first");
secondiv =document.querySelector(".second");
thirdiv = document.querySelector(".third");
const fheight = firstdiv.offsetHeight;
const sheight = secondiv.offsetHeight;
secondiv.style.top= `${fheight}px`;
thirdiv.style.top= `${fheight+sheight}px`;
body {
  margin:0;
  min-height:200vh;
  border:2px solid;
}
.first {
  height:50px;
  background:red;
  position:sticky;
  top:0;
}

.second {
  height:60px;
  background:blue;
  position:sticky;
}
.third {
  height:80px;
  background:green;
  position:sticky;

}
<div class="first"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
<div class="second"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>
<div class="third"></div>
<p>lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum lorem ipsum</p>

【讨论】:

  • 这是一个很好的 javascript 解决方案。我仍在寻找纯 CSS 解决方案。
【解决方案2】:

我认为您无法仅使用 CSS 来实现。即使您曾经设法做到这一点,它也会非常脆弱,您需要考虑到有些浏览器不接受sticky 位置!我会改用基于 javascript 的解决方案

【讨论】:

    【解决方案3】:

    使用纯 CSS 是不可能的,如果已知或恒定高度元素而不增加元素,那么它是可能的(这不好)。另一种方法是使用简单的 javascript,只计算元素高度并设置 CSS 位置 top 属性。

    ---谢谢---

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 2022-11-01
      • 2023-01-10
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      相关资源
      最近更新 更多