我实际上有两个问题,但让我们先解决主要问题,因为我相信另一个问题更容易解决。

我有一个固定的位置div滚动左侧的菜单。右边是一个标准的div滚动适当。问题是,当浏览器的视图端口太小,看不到整个菜单..没有办法让它滚动,我可以找到(至少不是与css)。我尝试在css中使用不同的溢出,但没有使div滚动。包含菜单的div被设置为min-height:100%和position:fixed..这两个属性我都需要保留。

包含菜单的div位于另一个包装器div中,该包装器div的位置绝对,高度设置为100%。

如果内容对于div来说太高,我如何让它垂直滚动?

这导致我到另一个问题,我不希望滚动条显示..但我想我可能已经有了一个答案(只是它还不工作,因为我不能让div滚动开始)。

有解决方案吗?也许需要javascript ?(对此我知之甚少)

JS小提琴示例

以及导致这个问题的相关代码(因为在这里发布整个事情太长了):

.fixed-content {
    min-height:100%;
    position:fixed;
    overflow-y:scroll;
    overflow-x:hidden;
} 

我还试过增加高度:100%也是为了看看这是不是一个问题,但也没有效果……也没有固定的高度,比如600px。


这里有两个修复。

首先,关于固定的边栏,你需要给它一个高度,让它溢出:

HTML代码:

<div id="sidebar">Menu</div>
<div id="content">Text</div>

CSS代码:

body {font:76%/150% Arial, Helvetica, sans-serif; color:#666; width:100%; height:100%;}
#sidebar {position:fixed; top:0; left:0; width:20%; height:100%; background:#EEE; overflow:auto;}
#content {width:80%; padding-left:20%;}

@media screen and (max-height:200px){
    #sidebar {color:blue; font-size:50%;}
}

生活例子: http://jsfiddle.net/RWxGX/3/

如果你的内容超出了div的高度,不可能不得到滚动条。这就是为什么我为屏幕高度添加了一个媒体查询。也许你可以为短屏幕尺寸调整样式,这样就不需要出现滚动条了。

干杯 伊格纳西奥


使用高度:100%的问题是它将是页面的100%,而不是窗口的100%(正如您可能期望的那样)。这将导致您所看到的问题,因为非固定内容足够长,可以包含100%高度的固定内容,而不需要滚动条。浏览器不知道/不关心你不能滚动那个栏来看到它

你可以用fixed来完成你想做的事情。

.fixed-content {
    top: 0;
    bottom:0;
    position:fixed;
    overflow-y:scroll;
    overflow-x:hidden;
}

你这把小提琴叉显示了我的修理方法: http://jsfiddle.net/strider820/84AsW/1/


为任何想要做类似事情的人留下答案,但在水平方向上,就像我想要的那样。

像下面这样调整@strider820的答案会有神奇的效果:

.fixed-content {        //comments showing what I replaced.
    left:0;             //top: 0;
    right:0;            //bottom:0;
    position:fixed;
    overflow-y:hidden;  //overflow-y:scroll;
    overflow-x:auto;    //overflow-x:hidden;
}

就是这样。还要查看@train解释使用overflow:auto over overflow:scroll的注释。


一般来说,固定的部分应该设置宽度,高度和顶部,底部属性,否则它将无法识别其大小和位置。

如果所使用的框是body的直接子框,并且有邻居,那么检查z-index和top, left属性是有意义的,因为它们可能会相互重叠,这可能会影响您在滚动内容时的鼠标悬停。

下面是内容框(body标签的直接子)的解决方案,它通常与移动导航一起使用。

.fixed-content {
    position: fixed;
    top: 0;
    bottom:0;

    width: 100vw; /* viewport width */
    height: 100vh; /* viewport height */
    overflow-y: scroll;
    overflow-x: hidden;
}

希望能对大家有所帮助。谢谢你!


这里的解决方案并不适用于我,因为我正在设计react组件。

但对侧边栏有效的是

.sidebar{
position: sticky;
top: 0;
}

希望这能帮助到一些人。