Make div expand to take all the available space
本问题已经有最佳答案,请猛点这里访问。
我想要一个桌面式的全页面布局。顶部的一些菜单(Uknown高度,取决于内容)和下面的DIV,它占用了视区中的所有可用空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | div { padding: 0px } html, body { height: 100%; padding: 0px; margin: 0px; } .outer { background: olive; height: 100%; } .menu { background: orange; } .should_fill_available_space { background: brown; } |
1 2 3 4 | Lorem Ipsum Lorem Ipsum Lorem Ipsum Brown color should go all the way down |
我有本案的密码笔:https://codepen.io/marek-zganiacz/pen/nveaxr
我想让
最简单的方法是使用flexbox。
这是您的JS小提琴:https://js fiddle.net/cryh53l7/
HTML
1 2 3 4 5 6 | Lorem Ipsum Lorem Ipsum Lorem Ipsum Brown color should go all the way down |
CSS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | div{ padding: 0px } html, body{ height: 100%; padding: 0px; margin: 0px; } .outer { display: flex; flex-direction: column; background: olive; height: 100%; } .menu{ background: orange; } .should_fill_available_space{ flex: 1; background: brown; } |
这就是Web文档标准的世界满足基于视区的桌面应用程序仿真的地方。您需要绝对定位容器。在这些容器中,您将能够设置相对位置元素或使用将使用HTML流的元素。
外面有许多API,它们将在封面下做同样的事情,并且它们在连接到DOM之后,将始终依赖于JavaScript计算来根据元素的尺寸放置元素。
下面是一个基于代码的简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | div{ padding: 0px } html, body{ height: 100%; padding: 0px; margin: 0px; } .outer { background: olive; height: 100%; width:100% position:absolute; } .menu{ background: orange; } .should_fill_available_space{ background: brown; position:absolute; bottom:0px; width:100vw; } Lorem Ipsum Lorem Ipsum Lorem Ipsum Brown color should go all the way down |
正如我提到的,您可以使用JavaScript来检索菜单的维度,并将其应用到您的布局中。
1 2 3 4 5 6 | window.addEventListener("load", function load(event){ var menu = document.getElementById("menu"); var main = document.getElementById("this"); var menuHeight = menu.offsetHeight; main.style.top = menuHeight +"px"; },false); |
这是密码笔。
您可以使用css3中的flexbox实现这一点(https://css tricks.com/snippets/css/a-guide-to-flexbox/)。
像这样更新你的CSS,让它工作:
1 2 3 4 5 6 7 8 9 10 11 | .outer { background: olive; height: 100%; display: flex; flex-direction: column; } .should_fill_available_space{ background: brown; flex-grow: 2; } |
试试这个!
我用了一个桌子显示器,希望对你没问题:)
HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | Lorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Lorem Ipsum Lorem IpsumLorem Ipsum Brown color should go all the way down |
CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | div{ padding: 0px } html, body{ height: 100%; padding: 0px; margin: 0px; } .outer { background: olive; height: 100%; display:table; width:100%; } .menu{ background: orange; display:table-row; } .should_fill_available_space{ background: brown; display:table-row; } div+ div{ height:100%; } |
您可以直接指定height属性。
所以第一个div元素将有