上面介绍的解决方案适用于没有边框、边距和/或填充的非常简单的布局。您可以在网上找到很多很多解决方案都可以解决这个问题。
但是,如果您只是为任何或所有 Div 添加边框、边距和/或填充,几乎所有解决方案都会完全崩溃。
Flex Boxes (CSS display:flex;) 在这方面非常强大,它们可以完美地与边框、边距和/或内边距的任意组合配合使用。
他们可以根据需要将您的屏幕空间划分为多个 Div,使用固定大小、百分比大小或“剩余的任何内容”为每个内部 Div。这些可以按任何顺序排列,因此您不仅限于页眉和/或页脚。它们也可以水平使用而不是垂直使用,并且可以下一步使用。
因此,您可以在它们之间拥有一个固定大小的页眉、一个 20% 的页脚,以及一个动态大小的“剩下的”客户区。反过来,在该客户区域内,您可以在客户区域的左边缘有一个百分比宽度的菜单栏,旁边有一个固定宽度的垂直分隔线,以及一个占用“剩下的东西”的客户区域在那个右边。
这是一个 Fiddle 来演示所有这些。相关的 CSS 非常简单。
CSS Flex Box (display:flex;) 带边框/边距/填充的演示
例如,这里有两个 CSS 类,它们创建的容器将分别水平或垂直地流动其包含的 Div:
.HorFlexContainer {
display: flex;
flex-direction: row;
flex-wrap: wrap;
flex: 1; /* this essentially means "use all parent's inner width */
}
.VertFlexContainer {
display: flex;
flex-direction: column;
flex-wrap: wrap;
flex: 1; /* this essentially means "use all parent's inner height */
}
不过,上面的小提琴确实展示了这一切。
作为参考,请参阅 Chris Coyier 的这篇优秀文章:
Flexbox 教程
希望这一切都有帮助!