【问题标题】:nested CSS3 flexboxes not working嵌套的 CSS3 flexbox 不起作用
【发布时间】:2012-05-20 04:55:11
【问题描述】:

弹性盒可以嵌套吗?我在水平弹性盒中嵌套了一个水平弹性盒,在垂直弹性盒中嵌套了一个垂直弹性盒。只有水平中的水平在 chrome 中有效,在 firefox 中无效!

我在这里创建了一个 jsfiddle:http://jsfiddle.net/NpkTL/1/

但是这里是html:

<div id="A">
    <div id="A1">A1</div>
    <div id="A2">
        <div id="A2-container">
            <div id="A2a">A2a</div>
            <div id="A2b">A2b</div>
        </div>
    </div>
</div>
<div id="B">
    <div id="B1">B1</div>
    <div id="B2">
        <div id="B2-container">
            <div id="B2a">B2a</div>
            <div id="B2b">B2b</div>
        </div>
    </div>
</div>

​ 和 CSS:

* {
    margin: 0;
    padding: 0;
    font-family: Arial;        
}

#A {
    position: absolute;
    top: 0px;
    left: 0px;
    background: black;
    width: 50%;
    height: 100%;

    display: -moz-box;
    display: -webkit-box;    
    display: box;
    -moz-box-orient: horizontal;
    -webkit-box-orient: horizontal;
    box-orient: horizontal;
}

#A1 {
background: brown;
width: 100px;
height: 80%;   
}

#A2 {
background: orange;
height: 80%;
-moz-box-flex: 1;
-webkit-box-flex: 1;
box-flex: 1;    
}

#A2-container {
    display: -moz-box;
    display: -webkit-box;    
    display: box;
    -moz-box-orient: horizontal;
    -webkit-box-orient: horizontal;
    box-orient: horizontal;
    width: 100%;
    height: 100%;    
}

#A2a {
    background: red;
    height: 80%;   
    -moz-box-flex: 1;
    -webkit-box-flex: 1;
    box-flex: 1;    
}

#A2b {
    background: blue;
    width: 100px;
    height: 80%;
}

#B {
    position: absolute;
    top: 0px;
    right: 0px;
    background: gray;
    width: 50%;
    height: 100%;

    display: -moz-box;
    display: -webkit-box;    
    display: box;
    -moz-box-orient: vertical;
    -webkit-box-orient: vertical;
    box-orient: vertical;

}

#B1 {
    background: brown;
    width: 80%;
    height: 100px;   
}

#B2 {
    background: orange;
    width: 80%;
    -moz-box-flex: 1;
    -webkit-box-flex: 1;
    box-flex: 1;    
}

#B2-container {
    display: -moz-box;
    display: -webkit-box;    
    display: box;
    -moz-box-orient: vertical;
    -webkit-box-orient: vertical;
    box-orient: vertical;
    width: 100%;
    height: 100%;    
}

#B2a {
    background: red;
    width: 80%;   
    -moz-box-flex: 1;
    -webkit-box-flex: 1;
    box-flex: 1;    
}

#B2b {
    background: blue;
    width: 80%;
    height: 100px;
}

​#A在左边,#B在右边。 #A 和#A2-container 是垂直弹性盒,#B 和#B2-container 是水平弹性盒。我为不同的 div 设置颜色,并在每个级别(垂直宽度和垂直高度)缩小它们,以便更容易看到发生了什么。左边看起来不错(在 chrome 中!),但在右边,#B2a 应该垂直填充 #B2(橙色)。

我意识到在这个例子中,使用中间行/列 3 中的 flex 的 flexbox 会更容易,但我将内容动态加载到 #A2 的等效项中,这恰好也是一个 flexbox .

【问题讨论】:

  • 您使用 outdated Flexbox syntax(从 2009 年开始)。 display: box 永远不会被支持。使用新语法(从 2012 年开始)并且没有中间容器,它可以在 Firefox 22+ 中运行,并且应该可以在当前的 Chrome 中运行:jsfiddle.net/NpkTL/4

标签: css flexbox


【解决方案1】:

Firefox 的 flex box 模型现在有很多问题。如果你有任何固定或绝对定位的盒子,它会坏掉;也没有宽度会将您的弹性框恢复为内联框。

【讨论】:

    【解决方案2】:

    弹性盒可以嵌套,但你必须摆脱定位。反正你基本上不再需要它了。

    根据我的经验,现在仍然存在的问题是 z-stacking flexbox。 而且将 flexbox 项目在主轴上的位置彼此不同也不是直截了当的(例如,如果我有一排并且我想将一个子项目在左侧对齐,另一个在右侧对齐,我将不得不玩边缘等可能会变得痛苦)

    根据不同的浏览器,结果可能会非常不一致。

    无论如何,我鼓励你使用这个:http://the-echoplex.net/flexyboxes/ 很有帮助。

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 2018-05-18
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 2016-05-26
      相关资源
      最近更新 更多