【问题标题】:Why is the vertical scrollbar not working in HTML/CSS?为什么垂直滚动条在 HTML/CSS 中不起作用?
【发布时间】:2021-01-09 02:29:36
【问题描述】:

我目前正在学习 FreeCodeCamp 课程,我正在尝试复制这个网站:https://codepen.io/freeCodeCamp/full/NdrKKL。左侧的导航栏有一个垂直滚动条。在其他帖子中,我读到将父母的高度元素设置为 100% 可以解决它。不知何故,我似乎无法在我的代码中解决这个问题。这是我网站的当前状态:https://codepen.io/otapadar/full/VwKBvXB

任何帮助将不胜感激。请参阅下面的代码:

PS:我在每个列表元素周围添加了边框。它们重叠,这使得边界是我想要的两倍厚。如果有人也知道如何解决这个问题,那也将不胜感激!感谢您的宝贵时间!

HTML(仅重要的东西):

<script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script>

<nav id="navbar">
  <header>
    <h1>JS Documentation</h1>
  </header>
  <ul>
    <li><a class="nav-link" href=#introduction>Introduction</a></li>
    <li><a class="nav-link" href=#what_you_should_know>What You Should Know</a></li>
    <li><a class="nav-link" href=#javascript_and_java>JavaScript and Java</a></li>
    <li><a class="nav-link" href=#hello_world>Hello World</a></li>
    <li><a class="nav-link" href=#variables>Variables</a></li>
    <li><a class="nav-link" href=#declaring_variables>Declaring Variables</a></li>
    <li><a class="nav-link" href=#variable_scope>Variable Scope</a></li>
    <li><a class="nav-link" href=#global_variables>Global Variables</a></li>
    <li><a class="nav-link" href=#constants>Constants</a></li>
    <li><a class="nav-link" href=#data_types>Data Types</a></li>
    <li><a class="nav-link" href=#if/else_statements>If/Else Statements</a></li>
    <li><a class="nav-link" href=#while_statements>While Statements</a></li>
  </ul>
</nav>

CSS(一切):

@import url('https://fonts.googleapis.com/css2?family=Open+Sans&display=swap');

* { 
  margin: 0;
  padding: 0;
}

body {
  font-family: 'Open Sans', Arial;
  line-height: 1.5;
  height: 100%;
}

code {
  display: block;
  white-space: pre-wrap;
}

nav {
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  border-right: 2px solid #a9a9a9;
  min-width: 290px;
  min-height: 100%;
}

nav > header {
  margin: 1rem 0;
  text-align: center;
}

nav > ul {
  list-style-type: none;
  width: 100%;
  height: 100%;
  overflow-y: auto;
  overflow-x: hidden;
}

nav > ul > li {
  border-top: 1px solid #a9a9a9;
  border-bottom: 1px solid #a9a9a9;
  padding: 0.5rem 1rem;
}

.nav-link {
  text-decoration: none;
}

main {
  margin-left: 310px;
  padding: 0 20px;
}


【问题讨论】:

  • height: 100% 将使用完整的内容高度。您需要将确定的高度作为 viewheight 以使导航栏具有确定的高度并允许其溢出滚动条。

标签: javascript html css flexbox grid


【解决方案1】:

我将ul 的高度更改为:calc(100vh - 4em);。导航栏的标题高度为2em (h1),顶部和底部的填充为1em,每个等于4em。这样列表就有了确定的高度,并且实际上可以使用滚动条来溢出。使用 height: 100% 时,它将以内容高度的 100% 作为高度,因此实际上不可能溢出。

* { 
  margin: 0;
  padding: 0;
}

body {
  font-family: 'Open Sans', Arial;
  line-height: 1.5;
}

code {
  display: block;
  white-space: pre-wrap;
}

nav {
  box-sizing: border-box;
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  border-right: 2px solid #a9a9a9;
  min-width: 290px;
  height: 100vh;
}

nav > header {
  margin: 1rem 0;
  text-align: center;
}

nav > ul {
  list-style-type: none;
  width: 100%;
  overflow-y: auto;
  height: calc(100vh - 4em);
}

nav > ul > li {
  border-top: 1px solid #a9a9a9;
  border-bottom: 1px solid #a9a9a9;
  padding: 0.5rem 1rem;
}

.nav-link {
  text-decoration: none;
}

main {
  margin-left: 310px;
  padding: 0 20px;
}
<script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script>

<nav id="navbar">
  <header>
    <h1>JS Documentation</h1>
  </header>
  <ul>
    <li><a class="nav-link" href=#introduction>Introduction</a></li>
    <li><a class="nav-link" href=#what_you_should_know>What You Should Know</a></li>
    <li><a class="nav-link" href=#javascript_and_java>JavaScript and Java</a></li>
    <li><a class="nav-link" href=#hello_world>Hello World</a></li>
    <li><a class="nav-link" href=#variables>Variables</a></li>
    <li><a class="nav-link" href=#declaring_variables>Declaring Variables</a></li>
    <li><a class="nav-link" href=#variable_scope>Variable Scope</a></li>
    <li><a class="nav-link" href=#global_variables>Global Variables</a></li>
    <li><a class="nav-link" href=#constants>Constants</a></li>
    <li><a class="nav-link" href=#data_types>Data Types</a></li>
    <li><a class="nav-link" href=#if/else_statements>If/Else Statements</a></li>
    <li><a class="nav-link" href=#while_statements>While Statements</a></li>
  </ul>
</nav>

【讨论】:

  • 很好的答案,非常感谢!欣赏它。请问您为什么将 box-sizing 属性更改为 border-box ?我看不出输出有什么不同。再次感谢!你真的帮了我大忙。
  • @user1371018 这只是一个好习惯。这样,将确保调用函数的计算正常工作。如果添加了孩子的边距或港口的填充物,则会导致调用函数不正确。使用border-box,可以在不影响计算的情况下添加passng的边距
【解决方案2】:

将高度设置为 100% 并为 li 移除边框底部。请检查以下代码。

nav {
  display: block;
  position: fixed;
  top: 0;
  left: 0;
  border-right: 2px solid #a9a9a9;
  min-width: 290px;
  min-height: 100%;
  height: 100%;
}
nav > ul > li{
    border-top: 1px solid #a9a9a9;
    padding: 0.5rem 1rem;
}

【讨论】:

  • 你自己检查过代码行吗?不会按预期工作。如果您使用可运行的代码 sn-p,您可以自己查看。问题是,height: 100% 会根据内容高度调整高度,因此在技术上不会溢出。您需要使用明确的高度值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-04
  • 2013-06-29
  • 2019-06-30
  • 2013-07-18
  • 2011-10-08
  • 1970-01-01
相关资源
最近更新 更多