margin-top:自动将最后一个列表项目发送到底部,但项目已被切断

时间:2018-07-15 18:41:36

标签: html css

我有一个100%高的侧边栏,其中包含div和ul。 div将用于侧边栏顶部的图像,而ul将被用于所有侧边栏菜单项。不能将div项目添加到ul,这里需要将其分开。

ul的最后一项必须始终在侧栏的底部。 我正在尝试使用margin-top:auto来实现这一点。当ul是侧边栏中的唯一项时,它可以完美工作,但是由于div在ul之上,因此列表中的最后一项被推出了屏幕。

如何防止这种情况?以下是我的HTML和CSS。目的是使标记图标始终显示在侧边栏的底部,同时在侧边栏中仍同时包含div和ul。

我不想使用绝对定位作为解决方案,因为当屏幕尺寸较小时,底部项目将与其他项目重叠。

body {
      margin: 0px;
      background-color: #F7F7F7;
    }

    .container {
      height: 100vh;
      display: flex;
      flex-direction: row;
      overflow: hidden;
    }

    .sidebar {
      height: 100%;
      flex: 0;
      background-color: #464F57;
    }

    .main {
      display: flex;
      flex-direction: column;
      flex: 1;
      margin-left: 20px;
    }

    .header {
      flex: 0;
      margin-bottom: 20px;
      border-bottom: solid 2px #eaeaea;
    }

    .content {
      overflow-y: auto;
      flex: 1;
    }

    .menu {
      display: flex;
      flex-direction: column;
      list-style: none;
      text-align: center;
      height: 100%;
      margin: 20px 0 0 0;
      padding: 0;
    }

    .menu li:last-child {
      margin-top: auto;
    }
<link href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" rel="stylesheet"/>
  <div class="container">
    <div class="sidebar">
      <div>
        <i class="fa fa-home fa-3x"></i>
      </div>
      <ul class="menu">
        <li><i class="fa fa-camera-retro fa-3x"></i></li>
        <li><i class="fa fa-camera-retro fa-3x"></i></li>
        <li><i class="fa fa-camera-retro fa-3x"></i></li>
        <li><i class="fa fa-camera-retro fa-3x"></i></li>
        <li><i class="fa fa-flag fa-3x"></i></li>
      </ul>
    </div>

    <div class="main">
      <div class="header">
        header
      </div>
      <div class="content">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer maximus aliquam accumsan. Aenean vel dui tellus.
          Nulla porttitor ante augue, et posuere ex consequat ac. Nulla eget vestibulum leo. Aliquam </p>
      </div>
    </div>
  </div>

2 个答案:

答案 0 :(得分:1)

您可以使用bottom: 0position: absolute解决您的问题。在这种情况下,侧边栏应具有position: relative。查看Absolute Positioning Inside Relative Positioning的链接,以了解有关此样式的详细信息。

这是工作代码(JSFiddle):

body {
  margin: 0px;
  background-color: #F7F7F7;
}

.container {
  height: 100vh;
  display: flex;
  flex-direction: row;
  overflow: hidden;
}

.sidebar {
  height: 100%;
  flex: 0;
  background-color: #464F57;
  position: relative;
}

.main {
  display: flex;
  flex-direction: column;
  flex: 1;
  margin-left: 20px;
}

.header {
  flex: 0;
  margin-bottom: 20px;
  border-bottom: solid 2px #eaeaea;
}

.content {
  overflow-y: auto;
  flex: 1;
}

.menu {
  display: flex;
  flex-direction: column;
  list-style: none;
  text-align: center;
  height: 100%;
  margin: 20px 0 0 0;
  padding: 0;
}

.menu li:last-child {
  bottom: 0;
  position: absolute;
}
<link href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" rel="stylesheet" />
<div class="container">
  <div class="sidebar">
    <div>
      <i class="fa fa-home fa-3x"></i>
    </div>
    <ul class="menu">
      <li><i class="fa fa-camera-retro fa-3x"></i></li>
      <li><i class="fa fa-camera-retro fa-3x"></i></li>
      <li><i class="fa fa-camera-retro fa-3x"></i></li>
      <li><i class="fa fa-camera-retro fa-3x"></i></li>
      <li><i class="fa fa-flag fa-3x"></i></li>
    </ul>
  </div>

  <div class="main">
    <div class="header">
      header
    </div>
    <div class="content">
      <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer maximus aliquam accumsan. Aenean vel dui tellus. Nulla porttitor ante augue, et posuere ex consequat ac. Nulla eget vestibulum leo. Aliquam </p>
    </div>
  </div>
</div>

答案 1 :(得分:0)

    <style type="text/css">
body {
      margin: 0px;
      background-color: #F7F7F7;
    }

    .container {
      height: 100vh;
      display: flex;
      flex-direction: row;
      overflow: hidden;
    }

    .sidebar {
      height: 100%;
      flex: 0;
      background-color: #464F57;
      position:relative;
    }

    .main {
      display: flex;
      flex-direction: column;
      flex: 1;
      margin-left: 20px;
    }

    .header {
      flex: 0;
      margin-bottom: 20px;
      border-bottom: solid 2px #eaeaea;
    }

    .content {
      overflow-y: auto;
      flex: 1;
    }

    .menu {
      display: flex;
      flex-direction: column;
      list-style: none;
      text-align: center;
      height: 100%;
      margin: 20px 0 0 0;
      padding: 0;
    }

    .menu li:last-child {
      position:absolute; bottom:0;
    }
</style>

这是边栏底部的标志 这是您要找的东西吗?