【问题标题】:How to fix side divs and make centre div scrollable using flexbox?如何使用 flexbox 修复侧面 div 并使中心 div 可滚动?
【发布时间】:2016-06-01 15:58:07
【问题描述】:

我有以下布局:-

我试图实现这一点,当我滚动时,一旦侧面的红色 div 到达顶部,它们就会固定在该位置,并且可以从那里滚动更多绿色 div(基本上我想将我的红色 div 保留在总是帧)。

我使用 flex 来对齐 3 个 div:-

以下是我的 HTML:-

<div class="content-container">
    <div class="left-navbar"></div>
    <div class="content-section"></div>
    <div class="right-navbar"></div>
</div>

以下是我的css:-

.left-navbar,.right-navbar{
    width: 15%; /*change */
    height:10em;
    margin: 20px 30px 0 20px;
    background-color:red;
    position:relative;
}

.content-container{
    display:flex;/*Add webkit flex properties */
}

.content-section{
    height: 100em;
    width: 60%;
    background-color: green;
}
.stick{
       position: fixed;
      top: 0px;
 }

以下是我的 JS:-

function sticky_relocate() {
    var window_top = $(window).scrollTop();
    var div_top = $('.left-navbar').offset().top;
    if (window_top > div_top) {
        $('.left-navbar').addClass('stick');
        /* $('#sticky-anchor').height($('#sticky').outerHeight()); */
    } else {
        $('.left-navbar').removeClass('stick');
        /*$('#sticky-anchor').height(0); */
    }
}


$(function() {
    $(window).scroll(sticky_relocate);
    sticky_relocate();
});

所以现在当我到达顶部时,左边的 div 确实被固定了,但中心 div 向左移动,左边的红色 div 越过了它。

有人可以帮我解决这个问题吗?红色 div 到达顶部后应该被固定,并且中心 div 应该是可滚动的。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    这是一个代码笔,展示了如何做到这一点:

    http://codepen.io/thecox/pen/OXPZzr

    当导航栏变为fixed 时,它们不再占用页面空间。所以content-section 折叠到left-navbar 留下的区域。我没有将 sticky 类添加到导航栏,而是将其添加到容器中,以便可以调整多个元素。我删除了 flex 行为,并使用了标准浮点数。

    .content-container.sticky .left-navbar,
    .content-container.sticky .right-navbar {
      position: fixed;
      top: 0;
    }
    
    .content-container.sticky .left-navbar {
      left: 0;
    }
    
    .content-container.sticky .right-navbar {
      right: 0;
    }
    

    最后,为了解决一些严重的跳跃问题,我让 JS 代码检查它是否滚动到初始容器之外(否则,它会计算一遍又一遍地位于 left-navbar 的顶部)。如果您有任何问题,请告诉我!

    【讨论】:

    • 我得到了第一部分,但对 JS 脚本有点困惑,初始容器是什么意思?你在这里谈论内容容器吗?还有你所说的一遍又一遍是什么意思?
    • 当然,让我澄清一下。以前,当窗口顶部到达这些元素时,您将sticky 类添加到滚动时的leftright 导航栏。由于添加的类使这些元素fixed,它会在窗口顶部检测到它们,从而在滚动时一遍又一遍地删除和添加sticky 类。我指的是.content-section 作为初始容器,因为这是您真正想要开始滚动固定导航栏的地方(当窗口到达该容器时)。让我知道这是否有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多