html - 如何设置div高度以填充视口的空白区域
问题描述
我希望滑入菜单的高度能够填充移动导航栏 div 下方的视口。现在它超出了它并使菜单可滚动。高度应该是:[100vh-(移动导航栏的高度)] 我该如何设置它?
我不想分配一个固定值,因为它不会让它保持响应。并且菜单应该保持绝对,因为它需要滑过它下面的内容。
function menuSlidesIn(){
var checkbox = document.getElementById("btnControl")
var menu = document.getElementById("menu-options")
if(checkbox.checked == true){
menu.style.left = "0%"
}
else{
menu.style.left = "-100%"
}
}
html, body{
padding: 0;
margin: 0;
}
#mobile-menu{
display: grid;
grid-template-columns: repeat(2, 1fr);
list-style: none;
padding: 0 2em;
margin: 0;
}
#hamburger{
place-self: center right;
position: relative;
}
#btnControl{
display: none;
}
.menu-burger{
width: 60px;
height: 10px;
border-radius: 10px;
background-color: #555555;
margin: 5px 0;
transition: 0.5s;
}
#menu-bar{
position: relative;
}
#menu-options{
display: grid;
grid-template-rows: repeat(4, 1fr) ;
position: absolute;
top: 0%;
left: -100%;
width: 100vw;
max-width: 100vw;
height: -webkit-fill-available;
list-style: none;
text-align: center;
padding: 0;
margin: 0;
background-color: gray;
transition: 0.5s;
}
#menu-options li{
padding: 1em 0;
display: flex;
justify-content: center;
align-items: center;
}
<div id="mobile-navbar">
<ul id="mobile-menu">
<li><a href="#">Logo</a></li>
<li id="hamburger">
<input type="checkbox" id="btnControl" onclick="menuSlidesIn()"/>
<label for="btnControl" id="label-hamburger">
<div class="menu-burger"></div>
<div class="menu-burger"></div>
<div class="menu-burger"></div>
</label>
</li>
</ul>
</div>
<div id="menu-bar">
<ul id="menu-options">
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Courses</a></li>
<li><a href="#">Contact Us</a></li>
</ul>
</div>
解决方案
您可以设置height
使用offsetHeight
和resize event
。将此添加JavaScript
到您的代码中:
window.onresize = applyMenuHeight; // everytime page resizes, run this function
applyMenuHeight(); //run the function once at least
function applyMenuHeight() {
var menuHeight = document.querySelector('#mobile-menu').offsetHeight; // get menu height
document.querySelector('#menu-options').style.height = "calc(100vh - " + menuHeight + "px)"; // set the height dynamically
}
它将存储菜单,并在每次调整大小height
时为您减去并更新它。100vh
window
推荐阅读
- python - 返回 0 而不是 2?
- reactjs - 自定义挂钩中的状态未更新
- matlab - Matlab关于通过相关性平滑图像的问题
- python - Python3中带有西里尔字母的“charmap编解码器无法编码字符”错误
- javascript - React 抛出错误:对象作为 React 子对象无效
- r - 为数据框中变量的每个值重复一个 ggplot
- javascript - Javascript 对象的类型
- java - java.lang.NullPointerException:当使用同一个包的另一个类而没有包声明时
- javascript - firebase:不要从实时数据库中获取数据
- c++ - 从 C++ 使用 C++ 库时未定义的引用