【问题标题】:height:auto causes white space at the bottom in mobile devicesheight:auto 导致移动设备底部出现空白
【发布时间】:2020-05-12 17:37:00
【问题描述】:

html代码

<nav>...</nav>
<div class="bg">
      <div class="outer-box">
        <div class="inner-box">
          <div class="dev-image">
            <img
              src="img/ronak-dev-ux-ui-design-project-image@3x.webp"
              alt="Profile Picture"
            />
          </div>
          <div class="dev-name">Ronak Radadiya</div>
          <div class="dev-profession">Lorem Ipsum</div>
          <div class="dev-content">
            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Quasi sed cumque voluptatem repudiandae illo dolor nihil, ducimus eaque voluptatibus ex perspiciatis deleniti corrupti repellendus reiciendis rem expedita laudantium, velit dicta?
          </div>
          <div class="reach">
            <img
              src="img/ronak-dev-ux-ui-design-line@3x.webp"
              alt="Reach out"
            />
            <p>Reach Out to me</p>
            <img
              src="img/ronak-dev-ux-ui-design-line@3x.webp"
              alt="Reach out"
            />
          </div>
          <div class="social-icons">
            <a
              href="#"
              target="_blank"
            >
              <img
                src="img/ronak-whatsapp-product-ui-ux-design@3x.webp"
                alt="whatsapp"
              />
            </a>

            <a href="https://github.com/ronakradadiya" target="_blank">
              <img
                src="img/ronak-github-product-ui-ux-design@3x.webp"
                alt="github"
              />
            </a>

            <a
              href="https://www.linkedin.com/in/ronak-radadiya-506861167"
              target="_blank"
            >
              <img
                src="img/ronak-linkedin-product-ui-ux-design@3x.webp"
                alt="Linkedin"
              />
            </a>

            <a href="https://twitter.com/ronakradadiya98" target="_blank">
              <img
                src="img/ronak-twitter-product-ui-ux-design@3x.webp"
                alt="twitter"
              />
            </a>
          </div>
        </div>
      </div>
    </div>
<footer>... </footer>

css代码

html {
  height: 100%;
  margin: 0;
  padding: 0;
}

body {
  height: 100%;
  margin: 0;
  padding: 0;
}

/* Navbar */

.actives {
  color: #ff4060 !important;
}

.active {
  color: #ff4060 !important;
}

nav.bg-dark {
  background-color: var(--main-bg1-color) !important;
  height: 53px !important;
}

nav.shadow {
  -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
  -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
  box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
}

nav .nav-color {
  color: var(--main-text-color) !important;
}

nav .navbar-nav .nav-link {
  font-family: ProximaNovaA;
  font-size: 14px;
  font-weight: bold;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 0.35px;
  margin: 0rem 0.6rem;
}

/* Introduction */

.bg {
  height: calc(100% - 117px);
  width: 100%;
  background-color: var(--main-bg2-color);
  display: flex;
  justify-content: center;
  align-items: center;
}

.fixedHeight {
  height: 507px;
}

.autoHeightBody {
  height: auto;
}

.autoHeightBg {
  height: auto;
}

.outer-box {
  max-width: 700px;
  width: 100%;
  border-radius: 4px;
  background-color: var(--main-bg1-color);
  padding: 12px;
  margin: 20px;
}

.inner-box {
  width: 100%;
  border-radius: 4px;
}

.dev-image {
  max-width: 96px;
  max-height: 96px;
  margin-top: 26px;
  margin-bottom: 12px;
  margin-left: auto;
  margin-right: auto;
}

.dev-image img {
  width: 100%;
  height: 100%;
}

.dev-name {
  font-family: Roboto;
  font-size: 30px;
  font-weight: bold;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 1.24px;
  color: #ffffff;
  text-align: center;
  margin-bottom: 12px;
}

.dev-profession {
  font-family: Roboto;
  font-size: 14px;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 0.58px;
  color: #ff4060;
  text-align: center;
  margin-bottom: 24px;
}

.dev-content {
  max-width: 545px;
  width: 100%;
  font-family: Roboto;
  font-size: 16px;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: 1.5;
  letter-spacing: 0.4px;
  text-align: center;
  color: #aeaeae;
  margin-left: auto;
  margin-right: auto;
  margin-bottom: 32px;
}

.reach {
  display: flex;
  justify-content: center;
  align-items: center;
  margin-bottom: 24px;
}

.reach img {
  max-width: 150px;
  width: 100%;
  height: 1px;
}

.reach img:nth-child(1) {
  margin-right: 15px;
}

.reach p {
  font-family: Roboto;
  font-size: 14px;
  font-weight: normal;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 0.35px;
  text-align: center;
  color: #ffffff;
  margin-bottom: 0;
  margin-right: 15px;
}

.social-icons {
  display: flex;
  justify-content: center;
  margin-bottom: 41px;
}

.social-icons img {
  width: 24px;
  height: 24px;
}

.social-icons img:nth-child(1),
.social-icons img:nth-child(2),
.social-icons img:nth-child(3) {
  margin-right: 32px;
}

.footer {
  background-color: #111111;
  height: 64px;
  display: flex;
  align-items: center;
}

.footer-adjust {
  display: flex;
  justify-content: space-between;
}

.footer-left-content p {
  font-family: Roboto;
  font-size: 14px;
  font-weight: 500;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 0.35px;
  color: #aeaeae;
  margin-bottom: 0;
  padding-top: 4px;
}

.footer-right-content {
  display: flex;
}

.footer-right-content div a {
  font-family: Roboto;
  font-size: 14px;
  font-weight: 500;
  font-stretch: normal;
  font-style: normal;
  line-height: normal;
  letter-spacing: 0.35px;
  color: #aeaeae;
  text-decoration: none;
}

.footer-right-content div:nth-child(1) a,
.footer-right-content div:nth-child(2) a {
  margin-right: 40px;
}

@media (min-width: 576px) and (max-width: 767px) {
  .bg {
    height: calc(100% - 161px);
  }

  .outer-box {
    min-height: 507px;
  }

  .footer {
    height: 108px !important;
    padding-top: 24px;
    padding-bottom: 24px;
  }

  .footer,
  .footer-adjust {
    display: block !important;
  }

  .footer-left-content p {
    text-align: center;
    margin-bottom: 16px;
  }

  .footer-right-content {
    justify-content: center;
  }
}

@media (min-width: 0px) and (max-width: 575px) {
  .bg {
    height: calc(100% - 161px);
  }

  .outer-box {
    min-height: 507px;
  }

  .reach img {
    width: 50px;
    height: 1px;
  }

  .footer {
    height: 108px !important;
    padding-top: 24px;
    padding-bottom: 24px;
  }

  .footer-right-content div:nth-child(1) a,
  .footer-right-content div:nth-child(2) a {
    margin-right: 30px;
  }

  .footer,
  .footer-adjust {
    display: block !important;
  }

  .footer-left-content p {
    text-align: center;
    margin-bottom: 16px;
  }

  .footer-right-content {
    justify-content: center;
  }
}

JS代码

let styleBgBox = parseInt($(".bg").css("height"));
let styleOuterBox = parseInt($(".outer-box").css("height"));

if ($(window).outerWidth() >= 768) {
  $(".outer-box").addClass("fixedHeight");
} else {
  $(".outer-box").removeClass("fixedHeight");
}

if (styleBgBox < 547 && styleOuterBox == 507) {
  $("body").addClass("autoHeightBody");
  $(".bg").addClass("autoHeightBg");
} else if (styleBgBox > 547 && styleOuterBox > 507) {
  $("body").addClass("autoHeightBody");
  $(".bg").addClass("autoHeightBg");
} else if (styleBgBox < 547 && styleOuterBox > 507) {
  $("body").addClass("autoHeightBody");
  $(".bg").addClass("autoHeightBg");
} else {
  $("body").removeClass("autoHeightBody");
  $(".bg").removeClass("autoHeightBg");
}

$(window).resize(function () {
  if ($(window).outerWidth() >= 768) {
    $(".outer-box").addClass("fixedHeight");
  } else {
    $(".outer-box").removeClass("fixedHeight");
  }

  styleBgBox = parseInt($(".bg").css("height"));
  styleOuterBox = parseInt($(".outer-box").css("height"));
  if (styleBgBox < 547 && styleOuterBox == 507) {
    $("body").addClass("autoHeightBody");
    $(".bg").addClass("autoHeightBg");
  } else if (styleBgBox > 547 && styleOuterBox > 507) {
    $("body").addClass("autoHeightBody");
    $(".bg").addClass("autoHeightBg");
  } else if (styleBgBox < 547 && styleOuterBox > 507) {
    $("body").addClass("autoHeightBody");
    $(".bg").addClass("autoHeightBg");
  } else {
    $("body").removeClass("autoHeightBody");
    $(".bg").removeClass("autoHeightBg");
  }
});

当我将使用 calc() 计算的现有高度替换为 height:auto 时,在移动设备中查看时底部会出现一个空白。代码中是否可以使用 height:auto 的替代方法。我尝试使用 vh 而不是 %,使用溢出属性,但它不起作用?

【问题讨论】:

    标签: javascript html jquery css twitter-bootstrap


    【解决方案1】:

    这两个是问题

    html {height: 100%;}
    body {height: 100%;}
    

    html 和 body 的 100% 高度是视口的高度,而不是整个文档的高度。内部元素使公共高度超过视口,它可以使您正在采取的措施。

    更新

    完全删除您的自定义script。我只会写下 CSS 类,我做了一些更改。替换它会起作用。

    html {
      height: 100%;
      margin: 0;
      padding: 0;
    }
    body {
      position: relative;
      min-height: 100%;
      margin: 0;
      padding: 0;
      background-color: #111111;
    }
    nav.bg-dark {
        background-color: var(--main-bg1-color) !important;
        height: 53px !important;
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        z-index: 2;
    }
    .bg {
        min-height: 100vh;
        padding: 53px 0 60px 0;
        box-sizing: border-box;
        width: 100%;
        background-color: var(--main-bg2-color);
        display: flex;
        justify-content: center;
        align-items: center;
        z-index: 1;
        position: relative;
    }
    .footer {
        background-color: #111111;
        height: 64px;
        display: flex;
        align-items: center;
        position: absolute;
        bottom: 0;
        right: 0;
        left: 0;
        z-index: 2;
    }
    @media (min-width: 576px) and (max-width: 767px) {
      .bg {
        padding: 53px 0 156px 0;
      }
    }
    
    @media (min-width: 0px) and (max-width: 575px) {
      .bg {
        padding: 53px 0 156px 0;
      }  
    }
    

    【讨论】:

    • 当我在 html 和 body 上使用 min-height:100% 并删除 js 代码时,它在移动设备上运行良好,但在桌面屏幕等大型设备的底部出现空白。
    • 在大屏幕上,我希望内容在视口中可见,这意味着不应该引入滚动条,除非它在较小的设备中查看,然后我可以引入滚动条。这就是我想要的
    • 尝试只添加 html {min-height: 100%;} body {min-height: 100%;} 并且不要删除 js。如果这没有帮助 - 我会继续寻找解决方案
    • 仍然导致与前面提到的相同的问题
    • 为了获得最佳体验,首先使用html {height: 100%;} body {min-height: 100%; position: relative;},我的第一个答案有误。在每个项目中使用这些结构。虽然在reletive 中阅读了一些关于position absolute 的内容。 100vh - 是当前视口的 100%(您可以在屏幕上看到的所有内容)。有时它在移动浏览器上有点不稳定,当您滚动时,由于导航栏隐藏/出现,浏览器的高度会动态变化
    【解决方案2】:

    从 css 部分中的每个 .bg 中删除 height 属性(我总共数了 3 个)。 同时从 css 中的 .outer-box 中删除 min-height: 507px;

    将您的 htmlbody css 更改为如下所示。这将确保您的元素包含在您的 body 标记中,并且 body 包含在 html 标记中:

    html,body{
      margin: 0;
      padding: 0;
    }
    

    我用我提到的修改尝试了你的代码,有和没有你的 JS,它似乎没有任何区别。如果您使用对 css 的修改并且想要删除页面底部的空白,那么您的 JS 似乎并不是真正需要的。见 JSFiddle https://jsfiddle.net/s97htk0p/

    您修改后的 CSS 代码:

    html,body{
    
      margin: 0;
      padding: 0;
    }
    /* Navbar */
    
    .actives {
      color: #ff4060 !important;
    }
    
    .active {
      color: #ff4060 !important;
    }
    
    nav.bg-dark {
      background-color: var(--main-bg1-color) !important;
      height: 53px !important;
    }
    
    nav.shadow {
      -webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
      -moz-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.5) !important;
    }
    
    nav .nav-color {
      color: var(--main-text-color) !important;
    }
    
    nav .navbar-nav .nav-link {
      font-family: ProximaNovaA;
      font-size: 14px;
      font-weight: bold;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 0.35px;
      margin: 0rem 0.6rem;
    }
    
    /* Introduction */
    
    .bg {
    
      width: 100%;
      background-color: var(--main-bg2-color);
      display: flex;
      justify-content: center;
      align-items: center;
    }
    
    .fixedHeight {
      height: 507px;
    }
    
    .autoHeightBody {
      height: auto;
    }
    
    .autoHeightBg {
      height: auto;
    }
    
    .outer-box {
      max-width: 700px;
      width: 100%;
      border-radius: 4px;
      background-color: var(--main-bg1-color);
      padding: 12px;
      margin: 20px;
    }
    
    .inner-box {
      width: 100%;
      border-radius: 4px;
    }
    
    .dev-image {
      max-width: 96px;
      max-height: 96px;
      margin-top: 26px;
      margin-bottom: 12px;
      margin-left: auto;
      margin-right: auto;
    }
    
    .dev-image img {
      width: 100%;
      height: 100%;
    }
    
    .dev-name {
      font-family: Roboto;
      font-size: 30px;
      font-weight: bold;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 1.24px;
      color: #ffffff;
      text-align: center;
      margin-bottom: 12px;
    }
    
    .dev-profession {
      font-family: Roboto;
      font-size: 14px;
      font-weight: normal;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 0.58px;
      color: #ff4060;
      text-align: center;
      margin-bottom: 24px;
    }
    
    .dev-content {
      max-width: 545px;
      width: 100%;
      font-family: Roboto;
      font-size: 16px;
      font-weight: normal;
      font-stretch: normal;
      font-style: normal;
      line-height: 1.5;
      letter-spacing: 0.4px;
      text-align: center;
      color: #aeaeae;
      margin-left: auto;
      margin-right: auto;
      margin-bottom: 32px;
    }
    
    .reach {
      display: flex;
      justify-content: center;
      align-items: center;
      margin-bottom: 24px;
    }
    
    .reach img {
      max-width: 150px;
      width: 100%;
      height: 1px;
    }
    
    .reach img:nth-child(1) {
      margin-right: 15px;
    }
    
    .reach p {
      font-family: Roboto;
      font-size: 14px;
      font-weight: normal;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 0.35px;
      text-align: center;
      color: #ffffff;
      margin-bottom: 0;
      margin-right: 15px;
    }
    
    .social-icons {
      display: flex;
      justify-content: center;
      margin-bottom: 41px;
    }
    
    .social-icons img {
      width: 24px;
      height: 24px;
    }
    
    .social-icons img:nth-child(1),
    .social-icons img:nth-child(2),
    .social-icons img:nth-child(3) {
      margin-right: 32px;
    }
    
    .footer {
      background-color: #111111;
      height: 64px;
      display: flex;
      align-items: center;
    }
    
    .footer-adjust {
      display: flex;
      justify-content: space-between;
    }
    
    .footer-left-content p {
      font-family: Roboto;
      font-size: 14px;
      font-weight: 500;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 0.35px;
      color: #aeaeae;
      margin-bottom: 0;
      padding-top: 4px;
    }
    
    .footer-right-content {
      display: flex;
    }
    
    .footer-right-content div a {
      font-family: Roboto;
      font-size: 14px;
      font-weight: 500;
      font-stretch: normal;
      font-style: normal;
      line-height: normal;
      letter-spacing: 0.35px;
      color: #aeaeae;
      text-decoration: none;
    }
    
    .footer-right-content div:nth-child(1) a,
    .footer-right-content div:nth-child(2) a {
      margin-right: 40px;
    }
    
    @media (min-width: 576px) and (max-width: 767px) {
    
    
      .footer {
        height: 108px !important;
        padding-top: 24px;
        padding-bottom: 24px;
      }
    
      .footer,
      .footer-adjust {
        display: block !important;
      }
    
      .footer-left-content p {
        text-align: center;
        margin-bottom: 16px;
      }
    
      .footer-right-content {
        justify-content: center;
      }
    }
    
    @media (min-width: 0px) and (max-width: 575px) {
    
    
    
    
      .reach img {
        width: 50px;
        height: 1px;
      }
    
      .footer {
        height: 108px !important;
        padding-top: 24px;
        padding-bottom: 24px;
      }
    
      .footer-right-content div:nth-child(1) a,
      .footer-right-content div:nth-child(2) a {
        margin-right: 30px;
      }
    
      .footer,
      .footer-adjust {
        display: block !important;
      }
    
      .footer-left-content p {
        text-align: center;
        margin-bottom: 16px;
      }
    
      .footer-right-content {
        justify-content: center;
      }
    }
    

    【讨论】:

    • 因为从第一个答案开始 30 分钟后,答案几乎相同。几乎是副本。没有解决问题的新想法。
    • 我不同意。第一篇文章只讨论了 html 和 body 标签。这个答案讨论了 O.P. 代码的其他部分。如果您没有更改 html、body 标签但仍然更改了 css 中的 .bg 和 min-height,问题仍然会得到解决。不确定反过来。更正 html,body 标记是否确保内容在正文内,但不能解决空白问题。
    • 可能在某些时候你是对的。如果您编辑答案(无论如何)-我可以修复我的标记(因为除非编辑此答案,否则我的投票已锁定。)
    • @ArjunSethi 在大屏幕上,我希望内容在视口中可见,这意味着不应该引入滚动条,除非它在较小的设备中查看,然后我可以引入滚动条。我希望你明白我的意思