我有一个Flex div,它包含另外两个元素,当在桌面上全屏查看时,其中一个元素充当侧边栏,而在较小的屏幕上,这些元素会折叠起来,一个显示在另一个的顶部。
此技术在Every Layout上进行了说明。
我想介绍一个用于导航的sticky元素。在宽屏上,它可以正常工作。我可以滚动页面,sitcky元素会粘在顶部。但是,在较窄的窗口中,该元素不会粘在上面。它会滚动到视图之外--在Safari和Firefox中都是如此。
.with-sidebar {
display: flex;
flex-wrap: wrap;
}
.with-sidebar > :first-child {
flex-basis: 20rem;
flex-grow: 1;
background-color: green;
}
.with-sidebar > :last-child {
flex-grow: 999;
min-inline-size: 50%;
background-color: red;
}
.sticky {
position: sticky;
top: 1rem;
}
<div class="with-sidebar">
<div>
<h1>Sidebar</h1>
<div style="height:10rem">Spacer</div>
<div class="sticky">
<h1>Sticky Element</h1>
</div>
</div>
<div>
<h1>Not Sidebar</h1>
<div style="height:200rem">Spacer</div>
</div>
</div>
除此之外,我还尝试过将sticky封装到另一个元素中,尝试过将align-self: flex-start;
应用到sticky中,但还没有找到任何有效的方法。
当侧边栏和非侧边栏垂直堆叠以及并排放置时,如何确保元素是粘性的?
- 更新**
我曾经尝试过将.with-sidebar
放在一个更高的 Package 器中。现在,发生了什么事情很清楚了。不是侧边栏的元素正在将粘性元素推离屏幕。当元素并排时,这种情况不会发生。但是,在一个较小的窗口中,非侧边栏元素就在粘性元素的正下方。
<div style="height: 400rem">
<div class="with-sidebar">
<div>
<h1>Sidebar</h1>
<div style="height:10rem">Spacer</div>
<div class="sticky">
<h1>Sticky Element</h1>
</div>
</div>
<div>
<h1>Not Sidebar</h1>
<div style="height:60rem">Spacer</div>
</div>
</div>
</div>
2条答案
按热度按时间xmd2e60i1#
我认为最好重做标记(或设计),例如,如果你指定了一个块的高度,“粘性元素”就位于其中,
div:has(.sticky) { height: 500px; }
,那么元素开始“粘一点”,或者另一个例子,改变嵌套并为此元素添加属性 align-self。
但我不认为这就是全部。这只是一个例子,让你可以看到如何元素的工作。规范CSS Positioned Layout Module Level 3非常简要地描述了行为的元素时,定位粘性。
r7s23pms2#
如果10雷姆不是你想要的,使用媒体查询顶部位置...
更新:我澄清我的想法: