今天重写了一个移动端的页面,改完后才发现页面中间需要自适应高度,传统的获取高度设置方法并不能实现页面想要的效果,便对原有页面样式进行了一下研究,发现原有页面是用flex布局实现自适应,于是照搬写法,却始终无法向原有页面一样自适应高度,但写法都是一样的,最后仔细将页面的结构性元素的样式尝试修改了一边,才发现原因:flex做自适应时,html和body需要先设置为100%,否则下面的子元素无法获取到高度。具体看代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> html,body{ height: 100%; } *{ margin: 0; padding: 0; } .wap{ display: flex; flex-direction:column; height: 100%; } .item1{ background: red; } .item2{ background: green; } .item3{ flex: 1; -webkit-box-flex: 1; background: blue; overflow-y: auto; } .item4{ height: 50px; 100%; background: chartreuse; } </style> </head> <body> <div class="wap" > <div class="item1"></div> <div class="item2"> <div> <input type="text" placeholder="1111"> </div> </div> <div class="item3"> </div> <div class="item4"></div> </div> </body> </html>
实现效果如下:(将绿色部分内容删除后,中间蓝色部分会自动填充到上面去)