2017-02-07 30 views
0

我试图做一个嵌套的100%屏幕布局,但我遇到了一个问题,其中嵌套的容器没有在Safari中填充100%的父单元空间,即使细胞本身确实扩大以填充所有可用空间。如果我将subContainer设置为实际的Flex单元格,它也可以工作,但由于实际原因,我无法做到这一点。有任何想法吗?Flexbox嵌套容器没有扩展到在Safari中填充父项

jsfiddle

HTML:

<div id="masterContainer"> 
    <div id="header"> 
    header 
    </div> 

    <div id="content"> 

    <div id="subContainer"> 
     <div id="left"> 
     left 
     </div> 
     <div id="right"> 
     right 
     </div> 
    </div> 

    </div> 

</div> 

CSS:

#masterContainer { 

    display: flex; 
    flex-direction: column; 
    width: 200px; 
    height: 200px; 
} 

#header { 

    background: yellow; 
} 

#content { 

    background: grey; 
    flex: 1; 
} 

#subContainer { 

    display: flex; 
    width: 100%; 
    height: 100%; 
} 

#left { 

    background: red; 
    width: 50; 
} 

#right { 

    background: green; 
    flex: 1; 
} 
+0

皮特:详细说明:因为I'm这样的反应,路由器内嵌样式,然后我不能改变风格#的subContainer这是一个可变的孩子,而不克隆它。 –

+0

皮特:反应这是不可能的,不克隆组件或具有外部样式表,我不想拥有外部样式表。 –

+0

为什么不将'.content'设置为'flex:1;'而不是'flex:1 0 auto;'?你想要这个垂直填充吗? – JoseAPL

回答

1

这是在Safari此问题的方法。
由于Safari似乎避免计算非flex嵌套容器。

看看到this answer

#masterContainer { 
 
    
 
    display: flex; 
 
    flex-direction: column; 
 
    width: 200px; 
 
    height: 200px; 
 
} 
 

 
#header { 
 
    
 
    background: yellow; 
 
} 
 

 
#content { 
 
    background: grey; 
 
    flex: 1; 
 
    position: relative; 
 
} 
 

 
#subContainer { 
 
    display: flex; 
 
    width: 100%; 
 
    height: 100%; 
 
    position: absolute; 
 
} 
 

 
#left { 
 
    
 
    background: red; 
 
    width: 50px; 
 
} 
 

 
#right { 
 
    
 
    background: green; 
 
    flex: 1; 
 
}
<div id="masterContainer"> 
 
    <div id="header"> 
 
    header 
 
    </div> 
 
    
 
    <div id="content"> 
 
    
 
    <div id="subContainer"> 
 
     <div id="left"> 
 
     left 
 
     </div> 
 
     <div id="right"> 
 
     right 
 
     </div> 
 
    </div> 
 
    
 
    </div> 
 
    
 
</div>