html – 子div高度100%内部位置:固定div溢出auto

前端之家收集整理的这篇文章主要介绍了html – 子div高度100%内部位置:固定div溢出auto前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
尝试以下操作时遇到一些奇怪的行为(请参阅jsfiddle: http://jsfiddle.net/9nS47/).

HTML:

<div id="slider">
    <div id="wrapper">
        <div id="navigation"></div>
        <div id="container">
            <div id="button"></div>
        </div>
    </div>
</div>

CSS:

HTML,BODY 
{ width:100%; height:100%; }
* { margin: 0; padding: 0; }
#slider
{
    position: fixed;

    top: 0;
    bottom: 0px;
    left: 100px;

    overflow-y: auto;

    background-color: red;
}

#wrapper
{
    position: relative;

    height: 100%;

    background-color: #000000;

    min-height:400px;
}

#navigation
{
    display: inline-block;
    width: 80px;
    height: 100%;

    background-color: #0000FF;
}

#container
{
display: inline-block;
    height: 100%;

    background-color: #00FF00;
}

#button
{
    width: 22px; height: 100%;
    float:right;

    background-color: #CCFFCC;
    cursor:pointer;
}

我要做的是制作一个横跨整个可见窗口高度的左侧导航栏,如果其高度小于例如400px,则仅显示滚动条.由于一些调整大小问题,该div的滚动条似乎总是可见的(底部有一个额外的像素我无法解释[color:red]).

当滚动条可见时,Firefox还会将第二个子元素移动到第一个元素下方,因为滚动条似乎是内容区域的一部分,因此占用大约20px的空间.如果Overflow:Auto被Overflow替换,则不会发生这种情况:滚动.

ATM改变布局(特别是位置:固定的容器)不是一种选择.

不要介意绿色和蓝色框之间的空间.似乎是一个空白问题.

解决方法

由于您似乎无法更改“包装”代码,因此我尝试尽可能少地更改原始代码.事实上,我唯一做的就是添加一些jQuery.

查看this updated jsfiddle.我已经包含了jQuery,我添加的javascript是这样的:

$(window).bind("load resize",function(){  
     //this runs as soon as the page is 'ready'
    if($(window).height() < 400){        
        $("#slider").css("overflow-y","scroll");
    }else{        
        $("#slider").css("overflow-y","hidden");   
    }  
});

基本上,’onload’和’onrezise’,jQuery会判断你是否应该显示滚动条.

自动”不起作用的原因是滑块元素的“固定”位置.浏览器无法完美地找出高度.

猜你在找的HTML相关文章