使用页脚和侧边栏创建100vh页面时遇到问题

时间:2017-03-04 13:06:43

标签: html css html5 css3 flexbox

我正在尝试创建一个内容滑块,其中一个聊天框放在一边,一个页脚粘在底部。

这是我想要实现的图表:

enter image description here

以下代码的问题是聊天框是页面的高度。我希望聊天框停在页脚,这样它就是页面的高度-60px。

这是我到目前为止所做的:

body {
  margin: 0;
}

.wrapper {
  background: #95a5a6;
  display: table;
  height: 100vh;
  width: 100%;
}

.wrapper-inner {
  display: table-cell;
  padding-left: 300px;
  padding-bottom: 60px;
  vertical-align: middle;
  text-align: center;
}

.chatbox {
  background: #bdc3c7;
  min-height: 100%;
  position: absolute;
  overflow-x: hidden;
  overflow-y: auto;
  width: 300px;
  z-index: 2;
}

.footer {
  background: #2c3e50;
  bottom: 0px;
  height: 60px;
  position: absolute;
  width: 100%;
  z-index: 1;
}
<div class="wrapper">
  <div class="chatbox"></div>
  <div class="wrapper-inner">Content</div>
</div>
<div class="footer"></div>

https://jsfiddle.net/bjxsyve7/4/

3 个答案:

答案 0 :(得分:2)

您可以使用CSS calc()来实现此目的。将此最小高度:calc(100% - 60px)添加到.chatbox。有关calc()

的详细信息

body {
  margin: 0;
  overflow-x:hidden;
}

.wrapper {
  background: #95a5a6;
  display: table;
  height: 100vh;
  width: 100%;
}

.wrapper-inner {
  display: table-cell;
  min-height: 100%;
  padding-left:300px;
  padding-bottom: 60px;
}

.chatbox {
  background: #bdc3c7;
  min-height: calc(100% - 60px);
  position: absolute;
  overflow-x: hidden;
  overflow-y: auto;
  top:0;
  width: 300px;
  z-index: 2;
}

.footer {
  background: #2c3e50;
  bottom: 0px;
  height: 60px;
  position: absolute;
  width: 100%;
  z-index: 1;
}
<div class="wrapper">
  <div class="chatbox"></div>
  <div class="wrapper-inner"></div>
</div>
<div class="footer"></div>

答案 1 :(得分:2)

这是仅使用flex和calc()的简化版本:

body {
  display: flex;
  flex-wrap: wrap;
  margin: 0;
}

.chatbox {
  flex: 0 0 300px;
  height: calc(100vh - 60px);
  overflow-y: auto;
  background-color: #bdc3c7;
}

.content {
  flex: 1;
  background-color: #95a5a6;
}

.footer {
  flex-basis: 100%;
  height: 60px;
  background: #2c3e50;
}
<div class="chatbox"></div>
<div class="content">Content</div>
<div class="footer"></div>

jsFiddle

答案 2 :(得分:1)

您只需添加以下内容:

.wrapper{
  position: relative;
}

在您的代码中,chatbox div的高度为正文的100%。但是如果你将position: relative;设置为它的父级(.wrapper),它的高度将是它的父级的100%。

这是使用flex执行此操作的简单方法:

body {
  display: flex;
  flex-direction:column;
  min-height: 100vh;
}

.wrapper {
  background: #95a5a6;
  display: flex;
  flex: 1;  
}

.chatbox {
  background: #bdc3c7; 
  overflow-x: hidden;
  overflow-y: auto;
  width: 200px;
}

.footer {
  background: #2c3e50;
  height: 60px;
}
<div class="wrapper">
    <div class="chatbox"></div>
    <div class="wrapper-inner">Content</div>
</div>
<div class="footer"></div>