Bootstrap vh-100 on body 垂直生长子元素

Bootstrap vh-100 on body growing child elements vertically

当我在 Chrome 开发工具中更改页面宽度时,页面也会垂直增长。 bootstrap 假设我拥有的视口高度似乎比实际情况要大。

相关代码:

<!DOCTYPE html>
<html class="vh-100">
  <head>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <title>Reef Chat</title>
    <style>
      * { border: 1px black solid;}
      body {font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;}
      
      #form {display: inline-flex; backdrop-filter: blur(10px); }
      #input {border-radius: 0;}
      #input:focus {outline: none;}
      #form > button {background: #333; border: none; outline: none; color: #fff; border-radius: 0;}
    </style>
  </head>
  <body class="vh-100">
    <div class="container-fluid h-100">
      <ul id="messages"></ul>
        <form id="form" action="" class="position-fixed bottom-0 start-50 translate-middle-x w-100">
          <input id="input" autocomplete="off" class="form-control"/><button class="btn btn-primary">Send</button>
        </form>
      </div>
...

参考自this answer

height: 100vh = 100% of the viewport height

height: 100% = 100% of the parent's element height

如果我有 window 高度 593 像素并且如果我在 <body> 上使用 height: 100vh;body 本身将是高度 593 像素包括边框。
但是,如果我在 <html><body> 上都使用 height: 100%;,则 html 元素的高度将为 593 像素,而 body 的高度将为 591 像素。在两个元素上使用此 height: 100%; 将不会溢出您的 body 标签。

选项 1。

删除 htmlbody 上的 class="vh-100" 并改用 CSS height: 100%;

* {
    border: 1px black solid;
}

html {
    height: 100%;
}
body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    height: 100%;
}

#form {
    display: inline-flex;
    backdrop-filter: blur(10px);
}

#input {
    border-radius: 0;
}

#input:focus {
    outline: none;
}

#form>button {
    background: #333;
    border: none;
    outline: none;
    color: #fff;
    border-radius: 0;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"/>
<body>
    <div class="container-fluid h-100">
        <ul id="messages"></ul>
        <form id="form" action="" class="position-fixed bottom-0 start-50 translate-middle-x w-100">
            <input id="input" autocomplete="off" class="form-control" />
            <button class="btn btn-primary">Send</button>
        </form>
    </div>
</body>

jsfiddle 上查看实际效果。

选项 2。

在您的 <body> 标签上使用 overflow: hidden;

jsfiddle 上查看。