【问题标题】:How to set 100 % height without having a vertical scrollbar?如何在没有垂直滚动条的情况下设置 100% 高度?
【发布时间】:2020-07-02 20:07:32
【问题描述】:

上下文

我有一个固定高度的导航栏。我希望下面的空间垂直填充屏幕的其余部分。我还需要有一个固定的高度,因为我在页面中有一个容器,它有一个可滚动的列表,但不滚动整个页面overflow: hidden

问题

当我在100% 的所有父元素上设置高度时,我得到一个垂直滚动条。我在 SO 上找到了一些关于“保证金崩溃”的答案,但没有什么可以解决我的问题。 100vh 在没有滚动条的情况下也无法工作。

这是设置高度的 css(#__next 只是 next.js 呈现页面的 div):

html,
body,
#__next {
  height: 100%;
  width: 100%;
}

导航栏只是一个固定的像素高度,下面的空间有height: 100%

这是显示垂直滚动条的屏幕截图:

我在 chrome 检查器上找不到任何问题。

它应该是这样的(设计文件):

你知道如何解决这个问题吗?我需要从屏幕“SippetPanel”和“SnippetContent”中获取两个容器以获取剩余高度而不添加滚动条。它也应该有一个隐藏溢出的内部滚动条(稍后当列表中有很多项目时,比如来自设计文件)

【问题讨论】:

  • 你的问题是100%。 100% 什么?你可以使用calc()来解决你的问题:height: calc(100% - navbarpx)calc()
  • 解决了滚动条,但现在我在底部有一个奇怪的白条,甚至没有出现在 devtools 中:imgur.com/a/dWaGjWC
  • 如果它没有出现在开发工具中,它可能是body。重新检查你的计算。
  • 我现在有这个:html, body, #__next { height: calc(100% - 80px); width: 100%; } 这给了我底部的白条
  • 好的。我必须仅在 html 上设置它,然后将其余设置为 100%。但现在我还必须计算边距和填充,但现在很好。适合我。添加它作为答案,我会接受它。谢谢男人

标签: javascript html css


【解决方案1】:

请注意,百分比高度是指父母的身高。 您可以使用calc() 来解决您的问题:

#__next{
    height: calc(100% - navbarpx);
    ...
}

calc()

关于填充问题,您可以查看border-box

【讨论】:

  • 如果我将边距添加到计算中,我的底部又会出现一个白框-.- box-sizing: border-box; 没有任何改变。有什么想法吗?
  • 据我所知,border-box 中并未隐含边距。只是填充和边框。看起来您需要的选项从未实现过。您可以为此使用一个好的旧经典包装器或尝试::before ::after
  • 完美!我将边距切换为填充,现在它可以工作了。
  • 好的。不要急于布局阶段并使其正确。否则它总是会在以后咬你。
  • 是的,谢谢伙计。这就是为什么我在 SO 上问的原因,因为当事情看起来不像我想要的那样时我讨厌它,我需要应用一些肮脏的技巧:D 再次感谢
【解决方案2】:

我通常只是尝试不同的 vh 值,这意味着 90vh、95.5vh 等,所以一切都很完美。您可以尝试干预 body position: absolute 等,但这会将所有内容推入导航栏,因此您需要使用额外的 margin-top 来修复它。

所以我看到的最佳解决方案是尝试不同的高度 vh 值并找到最佳位置。您需要对不同的手机类型以及媒体查询执行相同的操作,但这并不难。

【讨论】:

    【解决方案3】:

    其中一种方法是使用 flex-box,它允许您明确地说(取所有可用高度。

    .body {
      display: flex;
      flex-direction: column;
    }
    
    .navbar {
      flex: 30px 0 0;
      /* 30px height and do not grow or shint */
      background: red;
    }
    
    .content {
      flex-grow: 1;
      /* take all available space */
      background: blue;
    }
    
    .body, html, body {
      width: 100%;
      height: 100%;
    }
    <div class="body">
    <div class="navbar"></div>
    <div class="content"></div>
    </div>

    【讨论】:

    • 嗯,很有趣。我也会试试的。它是否适用于“内容”div中的溢出:自动,因此里面的内容是可滚动的,而不滚动整个页面/添加垂直滚动条?谢谢队友
    • 我不确定溢出和弯曲在一起(听说过一些问题),但我几乎可以肯定这是可能的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2012-02-26
    • 2015-10-26
    • 2014-08-19
    • 1970-01-01
    • 2017-07-02
    • 2021-07-17
    相关资源
    最近更新 更多