【问题标题】:How do I get a div to fill the remaining height of the screen, without creating a scrollwheel?如何在不创建滚轮的情况下让 div 填充屏幕的剩余高度?
【发布时间】:2021-09-09 09:01:01
【问题描述】:

我正在启动一个 WebGL 项目,并使用 Bootstrap 5 在顶部创建了一个功能性 NavBar。我正在尝试用画布填充剩余空间,我将在其中呈现我的作品。然而,使用height: 100%;,我猜似乎是在尝试高度不包括导航栏,并且在屏幕下方太远,创建了一个滚轮。

我正在创建一个此处显示的工作示例https://jsfiddle.net/cL40tzg9/6/,它将说明我的意思。我只是想创建一个 NavBar 并将剩余空间与我的画布一起使用,以防止任何不必要的滚动。我在这里做错了什么?谢谢

JavaScript 是(缩小了一点),

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <div class="container-fluid">
    <a class="navbar-brand h1" style="cursor: default"> example </a>
  </div>
</nav>

<canvas id="scene_container"> </canvas>

使用 CSS,

html, body {
    height:100%;
    width: 100%;
    margin: 0;
    padding: 0;
    background-color: transparent;
}

#scene_container {
    width: 100%;
    height: 100%;
    background: transparent;
    z-index: 0; 
}

【问题讨论】:

  • 请将您的代码添加到问题中,而不是作为外部资源的链接
  • 画布不能为 100%,因为 nav 也占用空间。也许flexbox 方法适合?
  • @ProfessorAbronsius 我会将navbarscene 都嵌套在单个flexbox 中吗?
  • 你可以这样做 - body 可能是一个合适的弹性容器
  • @ProfessorAbronsius 我应该查看flexbox 的哪些属性来解决我的问题?假设我将这两个项目嵌套在 class="flex-container" 中,然后有 .flex-container { display: flex; flex-direction: column; } 我应该查看哪个属性?

标签: html css three.js


【解决方案1】:

将画布设置为全高减去导航高度的简单 Flex 方法可能看起来有点像这样。以下使用 css var --nav-height 为方便起见并应用背景颜色来说明效果。

:root{
  --nav-height:3rem;
}
html, body {
    height:100vh;
    max-height:100vh;
    width: 100%;
    margin: 0;
    padding: 0;
    background-color: transparent;
}


body,body *{
  box-sizing:border-box;
  margin:0;
}

body{
  display:flex;
  flex-direction:column;
}

nav{
  height:var(--nav-height);
  min-height:var(--nav-height);
  max-height:var(--nav-height);
  width:100%;
  flex:1;
  
  background:yellow;
}

canvas{
  width:100%;
  height:calc( 100vh - var(--nav-height) );
  flex:100;
  
  background:pink;
}
<nav class='navbar navbar-expand-lg navbar-light bg-light'>
  <div class='container-fluid'>
    <a class='navbar-brand h1' style='cursor: default'> example </a>
  </div>
</nav>
<canvas id='scene_container'></canvas>

【讨论】:

  • 不幸的是,这似乎对我不起作用,并且我的控制台中没有收到任何错误。我仍然收到一个大滚轮,因为我的画布变得太大了。
  • 您是在移动设备上查看吗?在我的笔记本电脑上,这似乎很好
  • 我正在使用桌面 :( 似乎仍然占据了很多高度。
  • 宽度的滚轮被移除了,但它允许您向下滚动的高度是导航栏的高度。
【解决方案2】:

如果nav 具有静态高度,则需要使用flex 或从canvas 中减去nav 的高度。

#scene_container {
    width: 100%;
    height: calc(100% - 64px);
    background: transparent;
    z-index: 0; 
}

64px 是您当前的导航高度。

【讨论】:

  • 设备之间的导航高度不会改变吗?我通常会尽量避免硬编码差异。
  • 取决于您如何设计您的网站,您可以将其设为静态或在不同的屏幕尺寸上进行更改。但您也可以通过media queries 更改不同尺寸的hight。如果可能,我建议使用flex
猜你喜欢
  • 2010-09-10
  • 2016-12-29
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多