2017-09-05 131 views
3

我正在尝试制作一个网页,其中包含固定高度的“标题”div,然后是其下的“内容”div。在内容div中有几个不同的div,其中包含实际的页面内容。在实际的项目中,所有这些元素的高度在不同的屏幕和用户之间可能会有所不同,因为它们的内容主要由PHP生成。为什么'flex-grow'在Chrome和Firefox/Edge中表现不同?

很抱歉,如果这个解释不清,但下面演示了什么,我已经这么远: https://codepen.io/anon/pen/ZJPgWm (代码格式不和某些值看起来有点怪异,因为我刚刚抛出此一起尽快模仿我的实际项目)。

#main { 
 
    width: 90%; 
 
    min-width: 400px; 
 
    max-width: 1200px; 
 
    height: calc(100vh - 10px); 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    position: relative; 
 
    overflow: hidden; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
#head { 
 
    background-color: blue; 
 
    font-size: 3vh; 
 
} 
 

 
#content { 
 
    background-color: red; 
 
    flex-grow: 1; 
 
    display: flex; 
 
} 
 

 
#left { 
 
    width: calc(16% - 6px); 
 
    float: left; 
 
    background-color: green; 
 
} 
 

 
#inner { 
 
    font-size: 10vh; 
 
    flex-grow: 1; 
 
    width: calc(84% - 6px); 
 
    float: left; 
 
    margin-left: 8px; 
 
    margin-bottom: 10px; 
 
    flex-grow: 1; 
 
    overflow-x: hidden; 
 
    overflow-y: auto; 
 
    background-color: yellow; 
 
}
<body> 
 
    <div id="main"> 
 
    <div id="head"> 
 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </div> 
 
    <div id="content"> 
 
     <div id="left"> 
 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
     </div> 
 
     <div id="inner"> 
 
     <p> 
 
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
     </p> 
 
     </div 
 
    </div> 
 
    </div> 
 
</body>

在铬,滚动条在#inner DIV内示出。这就是我要的。 在firefox和MS Edge上,#inner div的溢出内容被截断,所以不可能看到该内容(没有更高的屏幕)。 我应该注意,原因似乎是,在Chrome中,#inner和#content div的高度被控制,使得它们的边界框不会超出#main div的边界。但是,在Firefox中,它们的边界框延伸到页面底部以下(由开发人员工具显示)。

我在找的是一种方法,它可以让所有的浏览器给出当前由chrome给出的结果。理想情况下,解释哪个浏览器是“正确的”,以及它们为什么不同也是有帮助的。

请注意,我想尽可能避免使用JS。任何帮助或建议表示赞赏。

回答

1

的Flex项目的有默认为auto,这意味着它不会收缩低于其内容的大小,所以当你窝他们喜欢这一点,并把overflow: auto在柔性物品的孩子,你需要让它知道它min-height被允许缩小。

min-height: 0;添加到您的content规则中,它们的行为将类似。

#main { 
 
    width: 90%; 
 
    min-width: 935px; 
 
    max-width: 1600px; 
 
    height: calc(100vh - 90px); 
 
    margin-left: auto; 
 
    margin-right: auto; 
 
    position: relative; 
 
    overflow: hidden; 
 
    display: flex; 
 
    flex-direction: column; 
 
} 
 

 
#head { 
 
    background-color: blue; 
 
    font-size: 20px; 
 
} 
 

 
#content { 
 
    background-color: red; 
 
    flex-grow: 1; 
 
    display: flex; 
 
    min-height: 0; 
 
} 
 

 
#inner { 
 
    font-size: 60px; 
 
    flex-grow: 1; 
 
    overflow-y: auto; 
 
}
<body> 
 
    <header> 
 
    </header> 
 
    <div id="main"> 
 
    <div id="head"> 
 
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
     in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
    </div> 
 
    <div id="content"> 
 
     <div id="inner"> 
 
     <p> 
 
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor 
 
      in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 
 
     </p> 
 
     </div </div> 
 
    </div> 
 
</body>

相关问题