【问题标题】:Bug with overflow-y:scroll and position:absolute in Chrome溢出-y:滚动和位置:Chrome中的绝对错误
【发布时间】:2014-10-15 17:12:59
【问题描述】:

当应用溢出-y:滚动和位置:绝对时,在 Chrome 中没有呈现 DIV(其高度保持为零)。如果其中任何一个被删除,则呈现该框。 这在 Firefox 中不会发生。

HTML

<div id="container">
    <div class="big"></div>
    <div>
        <ul>
            <li>Element #1</li>
            <li>Element #2</li>
            <li>Element #3</li>
            <li>Element #4</li>
            <li>Element #5</li>
        </ul>
    </div>
</div>

CSS

#container ul {
    list-style: none;
    margin: 0;
    overflow-y: scroll;
    position: absolute;
    top: 31px;
    left: 0;
    right: 0;
    bottom: 0;
}

#container {
    height: auto;
    display: -moz-box;
    display: -webkit-box;
    display: box;
}

#container div{
    position: relative;
    height: 100%;
    width: 200px;
}

#container div.big{
    height: 500px;
}

这是一个显示问题的小提琴: http://jsfiddle.net/351bj7k4/5/

【问题讨论】:

    标签: html css google-chrome overflow css-position


    【解决方案1】:

    导致问题的原因

    其实不是bug。

    通过使用 Chrome 开发者工具面板,您会看到 &lt;ul&gt; 元素及其父元素 &lt;div&gt; 的计算 height 被计算为 0

    <div id="container">
        <div class="big"></div>
        <div>  <!-- <= This -->
            <ul> <!-- <= And this -->
                ...
    

    因为height 属性(应用于&lt;div&gt;)的百分比值与其父级的高度有关。

    10.5 Content height: the 'height' property

    百分比是相对于生成框的高度计算的 containing block。如果包含块 的高度不是 明确指定(即,它取决于内容高度),并且这个 元素不是绝对定位的,值计算为'auto'。

    &lt;ul&gt; 使用绝对定位从正常流中移除时,&lt;div&gt; 的计算高度将为0。因此,具有 bottom: 0 声明的 &lt;ul&gt; 元素将没有空间;所以&lt;ul&gt; 的计算高度也是0

    因此,如果您将overflow-y: scroll 声明应用于&lt;ul&gt;,它将隐藏所有列表项,因为它们都是开箱即用的

    解决办法

    感谢Flexbox(您在容器上使用的display: box 旧语法),#container 中的&lt;div&gt; 元素默认填充其父元素的整个高度。

    因此,您可以安全地删除 height: 100% 声明从导致问题的#container div 选择器,并且还使用弹性盒显示类型为&lt;div&gt; 使&lt;ul&gt; 填充整个身高:

    EXAMPLE HERE (另一个HERE

    #container div {
        position: relative;
        /* height: 100%; */
        width: 200px;
    
        display: -moz-box;
        display: -webkit-box;
        display: box;
    }
    

    PS:为了检查旧答案 - 这有点误解 - click here

    【讨论】:

    • 感谢您的回答。在这种情况下,不应该 height:100% 工作吗?
    • 我也有类似的问题。但我希望 UL 元素从底部而不是顶部开始。即“顶部”被删除。但是一旦顶部被移除,滚动条就会消失。 jsfiddle.net/4c4crfhb
    • 我在这里遇到了类似的问题:stackoverflow.com/questions/55796188/…
    猜你喜欢
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    • 2013-03-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-07-03
    • 2018-12-05
    相关资源
    最近更新 更多