要求
听起来很难描述。演示中的粉红色框是我想要的外观。绿色框已经很好了,只是我不知道如何处理多个子元素。
我认为解决方案可能是以下的组合,但我无法做到。
align-items: center;
flex-direction: column;
body {
margin: 1em .5em;
}
article {
display: flex;
align-items: center;
flex-wrap: wrap;
}
section {
height: 18em;
background: #ccc;
margin: 0 .5em;
position: relative;
display: flex;
align-items: center;
}
section:after {
font-size: smaller;
color: blue;
position: absolute;
bottom: 0;
}
section.big {
width: 20%;
height: 5em;
}
section.small {
width: 10%;
flex: 1;
}
section div {
outline: 1px dotted green;
}
section.want {
background-color: pink;
}
section.want:after {
content: "1) want to do like this: vertically middle, horizontally left, while section will contain one or several child elements";
}
section.only1 {
background-color: lightgreen;
}
section.only1:after {
content: "2) all good except one point:the number of child element must be one.";
}
section.row:after {
content: "3) by default flex-diraction is row";
}
section.col {
flex-direction: column;
}
section.col:after {
content: "4) this can vertically stack multiple stacks, but they no longer horizontally left-align";
}
section.col.justify {
justify-content: center;
align-items: flex-start;
background-color: lightblue;
}
section.col.justify:after {
content: "6) this is good! Solved.";
}
section.colmar {
flex-direction: column;
}
section.colmar:after {
content: "5) this can vertically stack multiple stacks, and left-align divs, but divs are not vertically center";
}
section.colmar div {
margin-right: auto;
}
<article>
<section class="small want">
line1
<br/>line2
</section>
<section class="small only1">
<div>only 1 div</div>
</section>
<section class="small row">
<div>div1</div>
<div>div2</div>
</section>
<section class="small col">
<div>div1</div>
<div>div2</div>
</section>
<section class="small colmar">
<div>div1</div>
<div>div2</div>
</section>
<section class="small col justify">
<div>div1</div>
<div>div2</div>
</section>
</article>
答案 0 :(得分:48)
justify-content
沿着主轴对齐弹性项目。
align-items
沿着横轴对齐柔性项目,横轴始终垂直于主轴。
根据flex-direction
,主轴可以是水平轴或垂直轴。
由于flex-direction:column
表示主轴是垂直的,因此您需要使用justify-content
而非align-items
来固定灵活项目。
以下是一个例子:
#container {
display: flex;
flex-direction: column;
justify-content: center;
height: 200px;
background-color: lightpink;
}
&#13;
<div id="container">
<div class="box">div 1</div>
<div class="box">div 2</div>
<div class="box">div 3</div>
<div class="box">div 4</div>
<div class="box">div 5</div>
</div>
&#13;
在此处了解有关主轴的柔性对齐的更多信息:
在此处了解有关十字轴的柔性对齐的更多信息:
答案 1 :(得分:0)
我认为,如果您将列div垂直放置在包装div的中心(我们称其为行div),则使用以下方法:
align-self: center;
并将div列的内容放在中间:
text-align: center;
它将按照您想要的方式工作。
答案 2 :(得分:0)
设置高度为我解决了问题。