如何创建不同级别的粘性 headers?
How can I create different levels of sticky headers?
我想要一种优雅的方式 "collect" multi-level headers 在用户滚动时 window 的顶部,并且 position:sticky
得到我完成了 90% 的路程。下面的代码片段的工作方式与我希望的一样,但有一个例外:当 Header 2b 到达顶部时,Header 3b 仍然可见。由于 Header 3b 是 Header 2a 的 "child",我希望它在 Header 2b 到达顶部后滚动或以某种方式隐藏。 (可以预见,Header 1b 和 Header 2d 都有同样的问题。)
我知道我这里的是 CSS 是如何 应该 工作的,但是有没有一种优雅的方式让它像我一样工作问?我试过给 p
一个 white
的 background-color
并弄乱 z-index
但我没有任何运气。
h1, h2, h3 {
position: -webkit-sticky;
position: sticky;
top: 0px;
}
h1 {
background-color: red;
height: 35px;
}
h2 {
background-color: blue;
height: 25px;
top: 35px;
}
h3 {
background-color: green;
height: 20px;
top: 60px;
}
<h1>Header 1a</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2a</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3a</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3b</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2b</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3c</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3d</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h1>Header 1b</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2c</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3e</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3f</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2d</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3g</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3h</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
您需要使用 'z-index' 标签才能这样做。
第一个 header 的 z-index 值应该低于任何其他 header。
最后一个 header 应该具有最高的 z-index 值。
z-index 标签用于将元素放在任何其他元素的下方或上方。
我认为这样做的合乎逻辑的方法是考虑如下所示的嵌套 div:
h1,
h2,
h3 {
position: -webkit-sticky;
position: sticky;
top: 0px;
margin:0;
}
h1 {
background-color: red;
height: 35px;
z-index:3;
}
h2 {
background-color: blue;
height: 25px;
top:35px;
z-index:2;
}
h3 {
background-color: green;
height: 20px;
top:60px;
z-index:1;
}
<div>
<h1>Header 1a</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h2>Header 2a</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3a</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3b</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
<div>
<h2>Header 2b</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3c</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3d</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
</div>
<div>
<h1>Header 1b</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h2>Header 2c</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3e</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3f</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
<div>
<h2>Header 2d</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3g</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3h</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
</div>
我想要一种优雅的方式 "collect" multi-level headers 在用户滚动时 window 的顶部,并且 position:sticky
得到我完成了 90% 的路程。下面的代码片段的工作方式与我希望的一样,但有一个例外:当 Header 2b 到达顶部时,Header 3b 仍然可见。由于 Header 3b 是 Header 2a 的 "child",我希望它在 Header 2b 到达顶部后滚动或以某种方式隐藏。 (可以预见,Header 1b 和 Header 2d 都有同样的问题。)
我知道我这里的是 CSS 是如何 应该 工作的,但是有没有一种优雅的方式让它像我一样工作问?我试过给 p
一个 white
的 background-color
并弄乱 z-index
但我没有任何运气。
h1, h2, h3 {
position: -webkit-sticky;
position: sticky;
top: 0px;
}
h1 {
background-color: red;
height: 35px;
}
h2 {
background-color: blue;
height: 25px;
top: 35px;
}
h3 {
background-color: green;
height: 20px;
top: 60px;
}
<h1>Header 1a</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2a</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3a</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3b</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2b</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3c</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3d</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h1>Header 1b</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2c</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3e</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3f</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h2>Header 2d</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3g</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3h</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
您需要使用 'z-index' 标签才能这样做。 第一个 header 的 z-index 值应该低于任何其他 header。 最后一个 header 应该具有最高的 z-index 值。 z-index 标签用于将元素放在任何其他元素的下方或上方。
我认为这样做的合乎逻辑的方法是考虑如下所示的嵌套 div:
h1,
h2,
h3 {
position: -webkit-sticky;
position: sticky;
top: 0px;
margin:0;
}
h1 {
background-color: red;
height: 35px;
z-index:3;
}
h2 {
background-color: blue;
height: 25px;
top:35px;
z-index:2;
}
h3 {
background-color: green;
height: 20px;
top:60px;
z-index:1;
}
<div>
<h1>Header 1a</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h2>Header 2a</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3a</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3b</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
<div>
<h2>Header 2b</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3c</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3d</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
</div>
<div>
<h1>Header 1b</h1>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h2>Header 2c</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3e</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3f</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
<div>
<h2>Header 2d</h2>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<div>
<h3>Header 3g</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
<h3>Header 3h</h3>
<p>Lorem ipsum dolor sit amet, no qui quis eloquentiam.</p>
</div>
</div>
</div>