css3 – firefox overflow -y不能使用嵌套的flexbox

前端之家收集整理的这篇文章主要介绍了css3 – firefox overflow -y不能使用嵌套的flexbox前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我设计了100%宽度的100%高度布局与css3 flexBox,它在IE11上工作(如果IE11的仿真正确,可能在IE10上)。

但Firefox(35.0.1),overflow-y不工作。正如你可以在这个codepen看到的:
http://codepen.io/anon/pen/NPYVga

firefox没有正确呈现溢出。它显示一个滚动条

html,body {
  height: 100%;
  margin: 0;
  padding: 0;
  border: 0;
}
.level-0-container {
  height: 100%;
  display: -webkit-Box;
  display: -webkit-flex;
  display: -ms-flexBox;
  display: flex;
  -webkit-Box-orient: vertical;
  -webkit-Box-direction: normal;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column; 
}
.level-0-row1 {
  border: 1px solid black;
  Box-sizing: border-Box;
}
.level-0-row2 {
  -webkit-Box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  border: 1px solid black;
  Box-sizing: border-Box;
  display: -webkit-Box;
  display: -webkit-flex;
  display: -ms-flexBox;
  display: flex;
  -webkit-Box-orient: horizontal;
  -webkit-Box-direction: normal;
  -webkit-flex-direction: row;
  -ms-flex-direction: row;
  flex-direction: row;
}
.level-1-col1 {
  width: 20em;
  overflow-y: auto;
}
.level-1-col2 {
  -webkit-Box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  border: 4px solid blue;
  Box-sizing: border-Box;
  display: -webkit-Box;
  display: -webkit-flex;
  display: -ms-flexBox;
  display: flex;
  -webkit-Box-orient: vertical;
  -webkit-Box-direction: normal;
  -webkit-flex-direction: column;
  -ms-flex-direction: column;
  flex-direction: column;
}
.level-2-row2 {
  -webkit-Box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
  border: 4px solid red;
  Box-sizing: border-Box;
  overflow-y: auto;
}
<html>
<body>

    <div class="level-0-container">

        <div class="level-0-row1">
            Header text
        </div>

        <div class="level-0-row2">

            <div class="level-1-col1">
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                line <br/>
                
            </div>

            <div class="level-1-col2">

                    <div class="level-2-row1">
                        Some text
                        <p/> Some text 2
                        <p/> Some text 3
                        <p/> 
                    </div>

                    <div class="level-2-row2">
                        <p>some text</p>
                        <p>some text</p> 
                        <p>some text</p> 
                        <p>some text</p>
                        <p>some text</p>
                        <p>some test</p>
                    </div> 
                </div>

        </div>

    </div>
</body>


</html>

解决方法

tl; dr:你的.level-0-row2规则中需要min-height:0。 ( Here’s a codepen with that fix.)

更详细的说明:

Flex项目建立一个默认的最小尺寸,它基于孩子的内在大小(不考虑孩子/后代的“溢出”属性)。

每当你有一个浮动元素:[hidden | scroll | auto]在一个flex项目中,你需要给它的祖先flex项目min-width:0(在一个水平的flex容器)或min-height:0(在垂直的flex容器中),要禁用此最小化大小的行为,否则flex项目将拒绝缩小比小孩的最小内容大小小。

参见https://bugzilla.mozilla.org/show_bug.cgi?id=1043520了解更多被这个被咬的网站的例子。 (请注意,这只是一个代号,用于跟踪在这种规范文本被实现后被​​这种问题所破坏的网站 – 在Firefox中并不是一个错误)

您不会在Chrome中看到这个(至少不是这个帖子),因为它们是haven’t implemented this minimum sizing behavior yet.(编辑:Chrome现在已经实现了这个最小化行为,但是它们可能仍然是incorrectly collapse min-sizes to 0 in some cases.)

猜你在找的CSS相关文章