我正在尝试创建一个嵌套的弹性框布局,可以正确地(垂直地)拉伸所有列.它似乎工作得很好,除了在嵌套布局中拉伸一个项目. |---------------------------------------------||Header ||--------------------
|---------------------------------------------| |Header | |---------------------------------------------| ||--------------------------------|----------|| ||TITLE IS THE ISSUE! |Right || ||--------------------------------|Aside || ||Left |Content | || ||Aside | | || || | | || || | | || || | | || ||--------|-----------------------|----------|| |---------------------------------------------| |Footer | |---------------------------------------------|
我遇到的问题是,如果Right Aside比其他内容更长,则Header会垂直延伸.如果我试图覆盖Title align-self属性来阻止它拉伸没有任何反应.
一个清楚地显示问题的plunker.看看灰色区域(标题 – 不得长大):http://plnkr.co/edit/9VBSOKi0ipAy1QDpNAKb?p=preview
谢谢…
从头开始 – 从内到外构建布局此布局中有3个嵌套的Flex容器.
#1 – 两个内部列
这些列包含在它们自己的名为.flex-inner-columns的flex父级中. < main>元素可能是这个父母的一个很好的选择.
HTML
<main class="flex-inner-columns"> <div class="column-left"> column-left </div> <div class="column-right"> column-right </div> </main>
CSS
.flex-inner-columns { display: flex; } .column-left { flex: 1; } .column-right { flex: 2; }
#2 – 添加标题
标题和内部列父包含在另一个名为.flex-inner的flex父级中. <节>元素可能是这个父母的一个很好的选择.
HTML
<section class="flex-inner"> <header class="inner-title"> <h1>inner-title</h1> </header> <main class="flex-inner-columns"> <!-- columns are here --> </main> </section>
CSS
此flex父级的flex方向设置为column.标题是flex:0 1 150px并且不会增长,但如果需要,它将从它的默认高度150px缩小.列flex容器给出flex:1,因此它将增长和收缩.
.flex-inner { display: flex; flex: 2; flex-direction: column; } .inner-title { flex: 0 1 150px; width: 100%; } .flex-inner-columns { display: flex; flex: 1; /* the inner columns flex parent is now given flex 1*/ }
#3 – 最终布局 – 添加外部flex父级
所有东西都包裹在一个最终的外部容器中,该容器控制着右边的列. .flex-inner给出flex:2并且.outer-right旁边给出flex:1.
完整的例子
body { margin: 0; } .top-header, footer { height: 10vh; background: #E91E63; } .flex-outer { display: flex; height: 80vh; } .outer-right { flex: 1; background: #F48FB1; } .flex-inner { display: flex; flex: 2; background: #333; flex-direction: column; } .inner-title { background: #9C27B0; flex: 0 1 150px; align-self: center; width: 100%; } .flex-inner-columns { display: flex; flex: 1; } .column-left { flex: 1; background: #CE93D8; } .column-right { flex: 2; background: #AB47BC; }
<header class="top-header">Header</header> <div class="flex-outer"> <section class="flex-inner"> <header class="inner-title"> <h1>inner-title</h1> </header> <main class="flex-inner-columns"> <div class="column-left"> column-left </div> <div class="column-right"> column-right </div> </main> </section> <aside class="outer-right"> right outer </aside> </div> <footer>Footer</footer>