【问题标题】:CSS: Sidebar 100% display height without overlapping navigation bar. (individual nav height)CSS:侧边栏 100% 显示高度,不重叠导航栏。 (个人导航高度)
【发布时间】:2017-05-03 09:27:05
【问题描述】:

我想为设置视图构建特定布局。它应该是这样的:

左侧有一个固定导航栏,右侧的内容可以独立滚动。左侧的导航栏应始终填满整个页面,但导航栏除外。

我知道,我可以让左侧导航 position:fixed 并给它一个顶部导航高度的偏移量,但是导航的高度动态变化。

那么有什么动态解决方案吗?

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

h1 {
  margin: 0;
}

.lorem {
  background-color: Gainsboro;
  height: 100px;
  margin: 10px;
}

#nav-top {
  height: 100px;
  Background-color: SeaGreen;
}

#nav-sub {
  height: 30px;
  Background-color: YellowGreen;
}

.content {
  position: relative;
}

.left-nav {
  position: fixed;
  background-color: Teal;
  top: 0;
  margin: 0;
  bottom: 0;
  z-index: 2;
}
<div id="nav-top"> Navigation</div>
<div id="nav-sub"> Subnavigation</div>
<ul class="left-nav">
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
</ul>

<div class="content">
  <h1>Scrollable Content</h1>
  <div class="lorem">
  </div>
  <div class="lorem">
  </div>
  <div class="lorem">
  </div>
  <div class="lorem">
  </div>
  <div class="lorem">
  </div>
</div>

这是我的JSFiddle的链接: 感谢您的帮助!

【问题讨论】:

  • 这是你想要的吗? jsfiddle.net/webbm/rL3cjf9k/2
  • @webbm 几乎,我仍然无法使用此解决方案滚动内容。第一个ipsum div下面的内容是不可见的,不能滚动到视图中。
  • 是什么导致页眉高度动态变化?在用户对页面进行操作时?逐页内容?
  • @Jon P 在实际应用程序中,有一些媒体查询和用户操作会更改标题内的元素,这导致我无法确定动态高度。

标签: javascript jquery html css


【解决方案1】:

为什么不使用表格呢?

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

h1{
  margin:0;
}

.lorem{
  background-color: Gainsboro;
  height: 100px;
  margin:10px;
}

#nav-top{
  height:100px;
  Background-color:SeaGreen;
}
#nav-sub{
  height:30px;
  Background-color:YellowGreen;
}

.content{
  width:100%;
}

.left-nav {
  background-color: Teal;
  vertical-align: top;
}
<div id="nav-top"> Navigation</div>
<div id="nav-sub"> Subnavigation</div>

<table><tr class="left-nav">
<td>
  <ul>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  <li>Item</li>
  </ul>
</td>
<td class="content">
  <div >
      <h1>Scrollable Content</h1>
      <div class="lorem">
      </div>
          <div class="lorem">
      </div>
          <div class="lorem">
      </div>
          <div class="lorem">
      </div>
          <div class="lorem">
      </div>
  </div>
</td>
</tr>
</table>

【讨论】:

  • 我不知道您将如何处理表格。使 td 高度达到所需高度会再次导致相同的问题。您的代码会导致奇怪的行为。它看起来不像我画的模型。
  • @HelloWorld0815 我更新了代码,应该看起来更好。
  • 几乎,我希望左侧导航具有粘性,以便滚动时始终可见项目。
【解决方案2】:

对正文应用宽度和高度,对标题、侧边栏和主要内容应用固定尺寸。

body {
  width: 100vw;
  height: 100vh;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  overflow: hidden;
}

header {
  width: 100%;
  min-height: 100px;
  background-color: rgb(103, 194, 33);
  display: flex;
  align-items: center;
  box-sizing: border-box;
  padding: 5%;
}

aside {
  width: 20%;
  max-height: calc(100% - 100px);
  background-color: rgb(159, 159, 159);
}

ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction:  column;
  align-items: center;
}

li {
  padding: 5%;
}

main {
  width: 80%;
  max-height: calc(100% - 100px);
  overflow-x: hidden;
  overflow-y: scroll;
  box-sizing: border-box;
  padding: 2.5%;
}

.container {
  width: 100%;
  height: 25%;
  background-color: rgb(223, 223, 223);
  margin-bottom: 2.5%;
}
<header>Brand</header>
<aside>
  <ul>
    <li>item</li>
    <li>item</li>
    <li>item</li>
    <li>item</li>
  </ul>
</aside>
<main>
  <h1>Some Content</h1>
  <div class="container"></div>
  <div class="container"></div>
  <div class="container"></div>
  <div class="container"></div>
  <div class="container"></div>
  <div class="container"></div>
  <div class="container"></div>
</main>

【讨论】:

  • 我不知道标题高度,因为它会动态变化。我还希望标题具有静态高度,以确保它在移动设备和台式机上具有相同的高度。所以我不能使用 % 值,而是需要坚持绝对值。此外,这个解决方案很难应用于我的设置,因为元素被包装到更多标签中。为了让它 100% 工作,我还需要将每个父 div 设置为 100% 高度。 (破坏其他东西)
  • 如果不知道页眉高度,为什么要设置为 100px 呢?百分比值不是必需的。您可以将其设置为您想要的任何高度。我将更新代码以显示这一点。对于其他事情,如果您想将它们放入可滚动部分,则需要更新代码
  • 我将其设置为 100px 以使示例尽可能简单并将其减少到其核心“问题”。在实际应用程序中,有一些媒体查询和用户操作会更改标题内的元素,这会导致我无法确定的动态高度。 height: calc(100% - 100px); 还需要我知道偏移量是 100px。
  • 在这种情况下,将最小高度应用于标题,将最大高度应用于侧边栏和主栏。我已经更新了代码
猜你喜欢
  • 1970-01-01
  • 2014-02-04
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多