我有以下HTML结构:
<div id="page-wrapper">
<div>#banner</div>
<div>#left-panel</div>
<div>#content</div>
<div>#footer</div>
</div>
我对flex很新,并且想知道我可以达到以下结果:
如果有人可以请我指导或了解我可以遵循的任何教程,以实现这一目标。
答案 0 :(得分:1)
这将有助于: https://jsfiddle.net/wbncm2j4/1/
#page-wrapper {
display: flex;
flex-flow: column wrap;
height: 100vh;
}
#left-panel {
background: #BBB;
min-height: 100%;
width: 150px;
order: -1;
flex: 0 0 auto;
}
#banner, #footer, #content {
width: calc(100% - 150px);
}
#banner {
background: #99C;
height: 40px;
}
#footer {
background: #C9C;
height: 25px;
}
#content {
background: #9C9;
flex: 1 1 auto;
}
body { margin: 0; }
<div id="page-wrapper">
<div id="banner">banner</div>
<div id="left-panel">left-panel</div>
<div id="content">content</div>
<div id="footer">footer</div>
</div>
左侧面板
flex-flow: column wrap;
和高度100%
然后设置标题的高度&amp;页脚。
使用order
更改元素的显示顺序。
答案 1 :(得分:0)
您只需在父元素上使用flex-direction: column
,并使left-panel
元素占据100%的高度。
#page-wrapper {
display: flex;
height: 100vh;
flex-direction: column;
flex-wrap: wrap;
}
#page-wrapper > div {
border: 1px solid black;
flex: 1;
width: 80%;
}
#page-wrapper > div:nth-child(2) {
flex: 0 0 100%;
width: 20%;
order: -1;
}
<div id="page-wrapper">
<div>#banner</div>
<div>#left-panel</div>
<div>#content</div>
<div>#footer</div>
</div>
答案 2 :(得分:0)
您可以使用flex-grow
和flex-wrap
来实现此目的:
* {
margin: 0;
box-sizing: border-box;
}
#page-wrapper {
display: flex;
flex-flow: column wrap;
width: 100vw;
height: 100vh;
}
div div {
/* basic CSS and see them */
width: 80vw;
box-shadow: inset 0 0 0 1px;
padding: 1em;
}
div:nth-child(2) {
order: -1;
/* reorder place in the flow defaut is 0; -1 put the element in front all */
width: 20vw;
height: 100%;
/* next element will show in next column */
background:turquoise
}
div:nth-child(3) {
flex: 1;/* or flex-grow:1; the short hand propertie works fine through the different browsers */
/* will take whole space avalaible*/
background:tomato
}
<div id="page-wrapper">
<div>#banner</div>
<div>#left-panel</div>
<div>#content</div>
<div>#footer</div>
</div>