具有固定位置(无滚动)侧边栏的Flex布局

时间:2015-07-30 11:42:09

标签: html css flexbox

我有一个左右画布侧边栏的布局,将主要内容区域包含在中间。

侧边栏和主要内容是弹性项目,从左到右以柔性布局定位。

侧边栏包含菜单和元链接。

我的问题是:在滚动内容区域时,是否可以将侧边栏保持在固定位置,以便它们保持在最高位置而不向下滚动?

JS小提琴:http://jsfiddle.net/Windwalker/gfozfpa6/2/

HTML:

<div class="flexcontainer">
    <div class="flexitem" id="canvas-left">
        <p>This content should not scroll</p>
    </div>
    <div class="flexitem" id="content">
        <div>
            <p>Scrolling Content</p>
        </div>
    </div>
    <div class="flexitem" id="canvas-right">
        <p>This content should not scroll</p>
    </div>
</div>

CSS:

.flexcontainer {
    display: flex;
    flex-direction: row;
    min-height: 100%;
    align-items: stretch;
}
.flexitem {
    display: flex;
}
#canvas-left {
    background: yellow;
    order: -1;
    flex: 0 0 57px;
}
#content {
    background: green;
    order: 1;
    padding: 1rem;
}
#content div {
    display: block;
}
#canvas-right{
    background: blue;
    order: 2;
    flex: 0 0 57px;
}

3 个答案:

答案 0 :(得分:11)

请使用提供的解决方案查看类似问题:How to simulate 'position:fixed' behavior on Flexbox-aligned sidebar

根据您的代码,您还可以将内部内容包装在“position:fixed”包装器中:

<div class="flexitem" id="canvas-left">
    <div class="fixed">
        <p>This content should not scroll</p>
    </div>
</div>

在CSS中添加适当的样式:

.fixed {
    position: fixed;
    width: 57px; /* according to #canvas-left */
}

以下是使用固定左侧边栏的代码示例:http://jsfiddle.net/8hm3849m/。请注意,此技巧不会为侧边栏提供适当的灵活网格,应修复包装器的宽度(或通过JavaScript动态设置)。

答案 1 :(得分:0)

我不知道如何使用flex,但这里是一个easyer / alternate css删除所有的flex ...并尝试永远不会添加填充到外部div,其内部项目的easyer,然后你不需要计算如果有很多div

.flexcontainer {
    display: block;
    min-height: 100%;
    align-items: stretch;
}
.flexitem {
    display: flex;
}
#canvas-left {
    background: yellow;
    order: -1;
    left: 0px;
    width: 20%;
    position: fixed;
}
#content {
    position: absolute;
    background: green;
    order: 1;
    width: 60%;
    left: 20%;
}
#content p {
    display: block;
    padding: 1rem;
}
#canvas-right{
    background: blue;
    order: 2;
    right: 0px;
    width: 20%;
    position: fixed;
}

答案 2 :(得分:0)

这个问题很旧,但我使用来解决了类似的问题

position: sticky;
top: 0;

用于左右项目。 我也删除了

display: flex 

弹性项目的CSS,我认为这不是必需的。

enter image description here