【发布时间】:2018-12-11 21:26:03
【问题描述】:
我正在尝试制作一个占据整个窗口并使用其自己的内部滚动机制的网络应用程序。我不希望任何内容出现在浏览器窗口之外。
现在我正在尝试使用包含 flex 容器的布局,设置为 flex 列,具有固定的标题导航栏,然后是显示动态数据的内容区域,该区域将具有滚动条来查看内容溢出。这样第二个标题将始终在页面上。我正在使用 Angular 来执行此操作,并且因为被路由的组件在标题和内容 divs 之前向 DOM 添加了另一个级别,因此 flex 容器不会限制它们的高度。
.page {
display: flex;
flex-flow: column;
height: 100%;
max-height: 100vh;
}
.header {
flex: 1 1 50px;
border: 3px solid red;
}
.container {
display: flex;
flex: 1 1 auto;
flex-flow: column;
padding: 20px;
}
.dynamic-content {
flex: 1 1 auto;
border: 3px solid blue;
overflow-y: scroll;
display: flex;
flex-flow: column;
}
.item {
font-size: 40px;
}
<div class='page'>
<div class="header">
Head
</div>
<div class="container">
<app-component _nghost class="ng-star-inserted">
<div class="header">SubHeader</div>
<div class='dynamic-content'>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
<div class="item">item</div>
</div>
</app-component>
</div>
我希望div.container 仅占据页面的剩余高度,并且div.dynamic-content 在添加项目超出其底部边界时不调整大小,而是切断任何溢出并显示滚动条以到达其余的内容。这样,当用户向下滚动页面时,SubHeader div 和主 Head div 将始终显示在屏幕上。
angular-router-endpoint 和 angular-routed-component divs 正如它们的类所描述的那样,是一个 Angular Router-Outlet 和一个由 Outlet 插入的自定义 Angular 组件。据我所知,该组件不能直接设置样式。
【问题讨论】:
-
如果你想通过视口高度来限制它,只需使用
max-height: 100vh -
@Terry 确实适用于这个例子,我相信我过于简单化了。我使用的是 Angular,DOM 略有不同。我将编辑问题。