我希望有两列高度相等的内容,它们的内容应该是中间对齐的,所以在每个div的正中心。
问题:'相等的高度'和'中间对齐'似乎排除了自己,一个不适用于另一个。
问题:如何创建一个包含两列宽度相同,高度相等且内容集中在每列中间的行?
<!-- 'middle aligned' and 'equal height' don't like each other ? -->
<div class="ui equal height center aligned grid">
<div class="row">
<div class="twelve wide purple column">
<p>Text Text Text</p>
<p>Text Text Text</p>
<p>Text Text Text</p>
<p>Text Text Text</p>
</div>
<div class="four wide red column middle aligned">
<div class="row">Forward</div>
</div>
</div>
</div>
答案 0 :(得分:21)
此布局的关键是将相同的高度应用于主要Flex容器。
然后使flex项嵌套flex容器,这可以使flex项的内容居中。
因此,顶层创造了相同的高度。第二级是中心。
(有关详情,请参阅底部的说明。)
以下是基于代码结构的示例:
body {
height: 300px; /* for demo purposes */
color: white;
}
flex-container {
display: flex; /* primary flex container */
flex-direction: row; /* horizontal alignment of flex items
(default value; can be omitted) */
align-items: stretch; /* will apply equal heights to flex items
(default value; can be omitted) */
height: 100%;
}
flex-item {
display: flex; /* nested flex container */
flex-direction: column; /* vertical alignment of flex items */
justify-content: center; /* center flex items vertically */
align-items: center; /* center flex items horizontally */
}
flex-item:first-child {
flex: 3; /* consume 3x more free space than sibling */
background-color: #a333c8;
}
flex-item:last-child {
flex: 1;
background-color: #db2828;
}
<flex-container>
<flex-item><!-- also flex container -->
<p>Text Text Text</p>
<p>Text Text Text</p>
<p>Text Text Text</p>
<p>Text Text Text</p>
</flex-item>
<flex-item><!-- also flex container -->
<div>Forward</div>
</flex-item>
</flex-container>
人们有时会将flex项目及其内容视为一个元素。这是不正确的。
Flex容器的HTML结构有三个级别:
因此,项目内的内容不代表项目;它代表一个单独的元素。
如果项目内的内容是文本,则它将成为匿名元素。
来自flexbox规范:
Flex容器的每个in-flow子项都变为flex项,每个都是 连续运行的文本直接包含在flex中 容器包装在一个匿名的flex项目中。
这就是为什么在上面的解决方案中,flex项目变成了flex容器。它允许在flex项的子项(内容)上使用flex属性。
答案 1 :(得分:3)
您需要为元素赋予高度
.height {
height: 300px;
}
.row {
height: 100%;
}
.row > div {
height: 100%;
}
如果您希望它们居中垂直,请将.row > div
规则更新到此
.row > div {
height: 100%;
display: flex !important;
flex-direction: column;
justify-content: center;
}