我有一个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>
答案 0 :(得分:1)
您可以使用bottom: 0
和position: 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>
这是边栏底部的标志 这是您要找的东西吗?