【问题标题】:2-column fixed-fluid lay-out with fixed horizontal bars and scrolling content具有固定水平条和滚动内容的 2 列固定流体布局
【发布时间】:2012-12-13 15:51:48
【问题描述】:

浏览此站点和其他站点,我没有找到解决此特定问题的方法。在查看以下示例(也放在下面)之后,可以最好地描述我想要实现的目标: http://jsfiddle.net/yev8/HRQB5/

目前情况: 在这个例子中,我有一个左列(固定宽度)和一个右列(液体宽度)。在右栏中有四个条。与顶部对齐的两个条在每一页上都是相同的。与底部对齐的两个条在每一页上都是不同的,两者的每种组合都是可能的。现在在中间我有一个 div,“内容”,它填满了可用空间,如果需要,还有一个垂直滚动条。

我想要实现的目标: 我希望将 div 的滚动条替换为垂直覆盖整个页面的滚动条,就像默认滚动条一样。滚动时,左侧菜单和所有栏不应该改变它们的位置。唯一滚动的应该是中间的内容 div。

我不知道这是否可能,但在理想情况下,我只想用 css 来解决这个问题。如果这是不可能的,javascript(有或没有 jQuery)都可以工作。

谁能给我任何建议或指出正确的方向?我似乎无法让它按我想要的方式工作。

我当前的html:

<!doctype html>
<html lang="nl">
    <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
        <title></title>
        <link href="css/stylesheet.css" rel="stylesheet" media="screen">
    </head>
    <body>
        <div id="wrapper">
            <div id="left">
                <ul>
                    <li><a href="#" title="">Menu item</a></li>
                    <li><a href="#" title="">Menu item</a></li>
                    <li><a href="#" title="">Menu item</a></li>
                </ul>
            </div>
            <div id="right">
                <div id="bar-1">bar-1</div>
                <div id="bar-2">bar-2</div>
                <div id="content">
                    <div style="height:400px;background-color:#ff0;"></div>
                    <div style="height:400px;background-color:#f0f;"></div>
                    <div style="height:400px;background-color:#0f0;"></div>
                    <div style="height:400px;background-color:#00f;"></div>
                </div>
                <div id="bar-3">bar-3</div>
                <div id="bar-4">bar-4</div>
            </div>
        </div>
    </body>
</html>

我当前的css:

html, body {
    height: 100%;
    background-color: #fff;
    color: #2f2f2f;
    overflow: hidden;
    padding: 0;
    margin: 0;
    border: 0;
    outline: 0;
}

div#wrapper {
    height: 100%;
    margin: auto;
    position: relative;
}

div#left {
    height: 100%;
    float: left;
    width: 256px;
    overflow-y: auto;
    background-color: #fcfcfc;
}

div#right {
    height: 100%;
    position: relative;
    margin-left: 256px;
}

    div#right div#bar-1 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 0;
        height: 64px;
        top: 0;
        background-color: #eaeaea;
    }

    div#right div#bar-2 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 0;
        top: 64px;
        height: 32px;
        background-color: #979797;
    }

    div#right div#content {
        position: absolute;
        left: 0;
        right: 0;
        top: 96px;
        bottom: 224px;
        overflow-y: scroll;
    }

    div#right div#bar-3 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 0;
        bottom: 128px;
        height: 96px;
        background-color: #eaeaea;
    }

    div#right div#bar-4 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 0;
        bottom: 0;
        height: 128px;
        background-color: #d5d5d5;
    }

【问题讨论】:

    标签: css fixed vertical-scrolling liquid-layout


    【解决方案1】:

    你的意思是这样的吗:http://jsfiddle.net/Y2spp/2/

    我根据其他条在内容顶部和底部添加了填充。 确保内容的高度为 100%,并且条形图位于内容的顶部。

    仅 CSS 更改:

    div#right div#bar-1 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 17px;
        height: 64px;
        z-index:4;
        top: 0;
        background-color: #eaeaea;
    }
    
    div#right div#bar-2 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 17px;
        top: 64px;
        z-index:4;
        height: 32px;
        background-color: #979797;
    }
    
    div#right div#content {
        position: absolute;
        left: 0;
        right: 0;
        top: 0px;
        bottom: 0px;
        padding-top:96px;
        padding-bottom:224px;
        overflow-y: scroll;
        z-index:2;
    }
    
    div#right div#bar-3 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 17px;
    z-index:4;
        bottom: 128px;
        height: 96px;
        background-color: #eaeaea;
    }
    
    div#right div#bar-4 {
        overflow: hidden;
        position: absolute;
        left: 0;
        right: 17px;
        z-index:4;
        bottom: 0;
        height: 128px;
        background-color: #d5d5d5;
    }​
    

    【讨论】:

    • 感谢蒂米德的回复。好想法。顶部填充似乎有效,但底部填充不起作用。我现在只看到内容 div 中蓝色条的一半,这意味着内容 div 中的内容现在部分位于底部条的后面。
    • 我现在(暂时)在内容 div 中放置了一个高度为 224px 的内容填充 div 来填充我需要的空间。我宁愿有一个没有这个的解决方案,因为每个页面的底部栏都不同,所以如果有人知道这个方法,请分享。 :)
    • 您可能需要为此使用 JS。 Padding -bottom 在小提琴中起作用,不是吗?
    • 对我来说,它在 Fiddle 中适用于 Chrome、Opera 和 Safari。不适用于 Firefox 或 Internet Explorer。因为,正如您所说,无论如何我都需要为此使用 Javascript,所以内容填充 div 不会有问题。感谢您为我指明正确的方向。回答采纳! :)
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多