我想要在一个图片上垂直和水平居中文本,当页面变宽时图片会增长。
我最初将图片设置为固定高度的div的背景,这样可以相对容易地将其置中,但是因为背景图片不是结构性的,所以我不能将高度设置为宽度的自动函数,当我进行更加响应式的设计时,我不得不放弃这个选项。
所以现在我有一个包含两个元素的div,img和覆盖文本。图像宽度设置为其容器宽度的100%,高度随之而变化。然而,由于这个原因,我无法将覆盖文本设置为position:absolute和top:80px或类似的东西,因为从顶部的距离将必须变化。即使使用top:25%或其他任何百分比也不起作用,因为 a)如果页面宽度缩小以挤压文本,或者如果有更多文本,则当有更多/更少的行时,垂直居中会被打乱,b)百分比是任意的--它不是50或其他什么,因为那会把文本覆盖物的顶部放在图像的50%下面,而我想要将覆盖物的中心放在那里。
我已经查看了此帖子等其他内容,这确实很接近--但在两种解决方案中,图像高度无法调整大小,在前一种解决方案中,JS在页面加载时加载,但然后被冻结,所以如果我改变页面宽度/高度,则会出现问题。理想情况下,这个解决方案不需要JS,仅仅因为这个原因(即使它在每次调整大小时重新加载,这感觉不太理想),但如果这是唯一的解决方案,我会接受它。
还有,只是为了增加细节和乐趣,我对图片设置了最大高度,因为我不希望它在电影显示器上超过大约300px的高度。
当前尝试的基本小例子,下面是相同的代码。有什么想法吗?谢谢!
html
<div class='quotation_div'>
<img src='http://www.mountainprofessor.com/images/mount-ranier-mount-features-2.jpg'>
<div class='overlay'>
<p>Any reasonable amount of text should be able to go here. I want it to be able to center vertically even if it takes up 2 or 3 lines.</p>
</div>
</div>
css
.quotation_div {
position: relative;
display: table;
}
img {
width: 100%;
max-height: 300px;
}
.overlay {
z-index: 99;
width: 70%;
margin-left: 15%;
vertical-align: middle;
position: absolute;
top: 25%; /* Obvious problem, cause it's arbitrary */
}
p {
text-align: center;
color: red;
font-size: 165%;
font-weight: lighter;
line-height: 2;
}