我有一些绝对定位的div,有两行文字,一个h2和一个p。我试图让文本成为:在绝对定位的div中垂直居中,右对齐,并且在h2和p标签之间存在换行符。
绝对定位的div包含在父级中,所以我认为我可以使用flexbox来解决这个问题,但事实证明它比预期更难。我已经给出了父显示:flex和align-items:center,它们垂直居中。但是后来我的h2和p在同一条线上,没有换行符。
然后我使用flex-direction:列创建了一个换行符,但随后文本不再垂直居中。如果我使用align-items:flex-end和flex-direction:列,文本将右对齐,并且在h2和p之间会有换行符,但是它们不会垂直居中。
margin-right:auto可以正确对齐项目,但与align-items:center和flex-direction:列结合使用,它不起作用。 float:右边也行不通。
我的标记看起来像这样:
<div class = "col-sm-12">
<div class = "row overlay-container">
<img src = "_img/top-right@4x.png" class = "img-responsive grid-image" alt = "top-right@4x image" />
<div class = "overlay overlay-2">
<h2>Recent Work</h2>
<p>Lorem ipsum dolor</p>
</div> <!-- /overlay -->
</div> <!-- /row -->
</div> <!-- /top right -->
其中overlay是覆盖容器内绝对定位的div。覆盖图是位于图像的一部分上方的框。显示:上面提到的flex和其他属性都在overlay类上。
似乎无论我尝试什么,我只能从三个条件中获得两个工作。使用flexbox不是必需的,但我认为它可以很容易地使文本垂直居中。有人可以帮忙吗?
答案 0 :(得分:5)
以下是使用display: flex
Stack snippet
body {
margin: 0;
}
.overlay {
width: 300px;
margin-top: 5vh;
height: 90vh;
border: 1px solid;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
&#13;
<div class = "overlay overlay-2">
<h2>Recent Work</h2>
<p>Lorem ipsum dolor</p>
</div> <!-- /overlay -->
&#13;
更新
在某些情况下,可能需要使用自动保证金,因为当使用justify-content
(使用flex-direction: column
时)时居中的默认行为是,当内容不适合时,它会在顶部和底部溢出。
Stack snippet
body {
margin: 0;
}
.overlay {
width: 300px;
margin-top: 5vh;
height: 90vh;
border: 1px solid;
display: flex;
flex-direction: column;
/*justify-content: center; removed */
align-items: center;
overflow: auto; /* scroll when overflowed */
}
.overlay h2 {
margin-top: auto; /* push to the bottom */
}
.overlay p {
margin-bottom: auto; /* push to the top */
}
&#13;
<div class = "overlay overlay-2">
<h2>Recent Work</h2>
<p>Lorem ipsum dolor</p>
</div> <!-- /overlay -->
&#13;
更新了2
这里有一个中间的第3个项目,当不合适时会滚动什么。
Stack snippet
body {
margin: 0;
}
.overlay {
width: 300px;
margin-top: 5vh;
height: 90vh;
border: 1px solid;
display: flex;
flex-direction: column;
align-items: center;
}
.overlay p:first-of-type {
overflow: auto; /* scroll when overflowed */
}
.overlay h2 {
margin-top: auto; /* push to the bottom */
}
.overlay p:last-of-type {
margin-bottom: auto; /* push to the top */
}
&#13;
<div class = "overlay overlay-2">
<h2>Recent Work</h2>
<p>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
Lorem ipsum dolor<br>
</p>
<p>Maybe a link for more</p>
</div> <!-- /overlay -->
&#13;
另一个样本: