我有以下CSS布局:
* {
margin: 0;
box-sizing: border-box;
}
body {
font-family: Verdana, Geneva, Tahoma, sans-serif;
}
nav {
background-color: darkslateblue;
color: white;
padding: 20px;
}
main h2 {
padding: 20px 20px 10px 20px;
}
#item-wrapper {
display: flex;
padding: 10px;
}
#item-selector,
#item-viewer {
margin: 0 10px;
}
#item-selector {
display: flex;
flex-direction: column;
width: 250px;
overflow-y: scroll;
}
#item-viewer {
flex: 1;
height: 50vh;
}
.item {
border: 3px solid darkslateblue;
margin-bottom: 10px;
padding: 10px;
cursor: pointer;
}
#item-viewer {
border: 3px solid darkslateblue;
}
<nav>
<h1>Header</h1>
</nav>
<main>
<h2>Your items:</h2>
<div id="item-wrapper">
<div id="item-selector">
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
<div class="item">
<p style="font-size:50px;">Item</p>
</div>
</div>
<div id="item-viewer">
<p style="padding: 10px;">Select an item on the left to view more information</p>
</div>
</div>
</main>
我希望左边的可滚动div不超过窗口的高度。我试过将<body>
和<html>
的高度设置为100vh
,并将overflow: auto
和overflow: hidden
添加到body
、html
、#item-wrapper
和#item-selector
,但这些都不起作用。如果我给出#item-selector
和显式高度,那么它就起作用了。但我希望它填充窗口高度的剩余部分,所以这并不理想。我希望#item-selector
不超过页面的高度,并在其内容超过高度时滚动。
2条答案
按热度按时间00jrzges1#
您必须将
height
设置应用于 * 所有 * 父元素,因此html
、body
和#item-selector
得到height: 100%;
,并且main
必须得到一个计算的高度值,该高度值从100%中减去nav
和h2
元素的高度。height: calc(100% - 130px);
将大致执行以下代码片段中的操作:但是您要么必须为nav
和h2
定义精确的高度设置,要么使用javascript获得它们的实际高度。iyzzxitl2#
在这段代码中,我将h2标签 Package 在一个div中,id为'itemHeaderWrapper',并将其预定义高度设置为5vh。我还将导航的高度设置为10vh。这意味着我可以强制左侧的可滚动div的高度为85vh,然后滚动。