bounty将在3天后过期。回答此问题可获得+250声望奖励。KyleMit ◇希望奖励现有答案:谢谢bholtbholt -这解决了我的问题!
我在这个问题上卡住了一点,我想我应该分享这个position: sticky
+ flexbox的问题:
我的粘性div一直工作得很好,直到我将视图切换到一个flex box容器,突然当div被 Package 在一个flexbox父容器中时,它就不粘了。
.flexbox-wrapper {
display: flex;
height: 600px;
}
.regular {
background-color: blue;
}
.sticky {
position: -webkit-sticky;
position: sticky;
top: 0;
background-color: red;
}
<div class="flexbox-wrapper">
<div class="regular">
This is the regular box
</div>
<div class="sticky">
This is the sticky box
</div>
</div>
8条答案
按热度按时间kmbjn2e31#
由于flex box元素默认为
stretch
,因此所有元素的高度都相同,无法滚动。将
align-self: flex-start
添加到sticky元素将高度设置为auto,这允许滚动,并修复了它。目前,所有主流浏览器都支持这一点,但Safari仍然支持
-webkit-
前缀,除Firefox外的其他浏览器在position: sticky
表方面存在一些问题。JSFiddle showing the solution
pzfprimi2#
在我的例子中,其中一个父容器应用了
overflow-x: hidden;
,这将破坏position: sticky
的功能。您需要删除该规则。任何父元素都不应应用上述CSS规则。此条件适用于所有父元素,直到(但不包括)'body'元素。
nc1teljy3#
如果在父元素中使用flex,请使用align-self:flex-start用于你想使其粘滞的元素。
wd2eg0qa4#
您也可以尝试将子div添加到flex项中,并将
position: sticky; top: 0;
分配给它。这对我来说是一个两列的布局,第一列的内容需要是粘性的,第二列的内容是可滚动的。
kyvafyod5#
对于我的情况,
align-self: flex-start
(或justify-self: flex-start
)解决方案不起作用。我还需要保留overflow-x: hidden
,因为一些容器水平滑动。我的解决方案需要将
display: flex
与overflow-y: auto
嵌套以获得所需的行为:position: absolute
或position: fixed
width
来正确演示水平幻灯片,或者可能在我的实际布局上有一些其他设置使其工作...overflow-x: auto
在父元素overflow-x: hidden
下的元素中正确工作,需要一个不做任何其他事情的 Package 器元素s1ag04yj6#
确保flex-wrapper已经分配了一个高度,并将溢出值设置为auto。然后添加“align-self:灵活启动;“到粘性元素。
tzxcd3kk7#
我做了一个临时的flexbox表,遇到了这个问题。为了解决这个问题,我简单地把粘性标题行放在flexbox的外面,就在它的前面。
u4dcyp6a8#
根据我的经验,全局解决方案/规则:
请勿将具有粘性元素的结构直接放入{ display:flex }容器。
相反(对于Flex布局),将带有粘性元素的表/div放在Flex子容器中(例如,使用{ flex:1 1 auto },但不带{ display:flex }),那么一切都应该按预期工作。