在 div 元素内垂直对齐文本

13

我知道这个问题已经被问过很多次,但是在搜索过程中没有任何方法适用于我。

你知道的,我有一个div元素,需要垂直对齐文本,但是没有任何方法适用(例如:position:absolute;top:50%;margin-top:-x;display:table-cell;vertical-align:middle;等等)。

这是我正在使用的东西(对于内联CSS我很抱歉)。无论如何,我会使用行高,但文本可以为一行或两行。它应该与图像垂直对齐,图像始终具有最大高度为30px(30x50)。

 <div style="margin:0 0 10px 0;padding:10px;border:2px solid #606060;background-color:#2b2b2b;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;">
 <div style="float:left;width:55px;height:40px;">
 <a href="link"><img style="max-width:50px;border:1px solid #ffb92c;" src="image.jpg" alt="" /></a>
 </div>
 <div style="float:right;width:155px;font-size:0.7em;height:40px;">
 <a href="link">This is the text to vertically align</a>
 </div>
 </div>

你一定要使用内联CSS吗?这让回答变得很麻烦... - Phil
不,我打算在弄清楚之后将所有内容转换为常规CSS。 - Tom
可能是重复的问题:如何在DIV中垂直对齐文本? - user10958959
6个回答

9

还有一件事情可以做。如果 div 中只有一行文本,您可以使用 line-height 属性。

示例:

div {
    line-height:40px;
}

1
可能是一行或两行代码。 - Tom

8

这个想法来自这里,并且适用于所有浏览器。

<div style="margin: 0 0 10px 0; padding: 10px; border: 2px solid #606060; background-color: #2b2b2b;
    -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;">
    <div style="float: left; width: 55px; height: 40px;">
        <a href="link">
            <img style="max-width: 50px; border: 1px solid #ffb92c;" src="image.jpg"
                alt="" /></a>
    </div>
    <div style="float: right; width: 155px; font-size: 0.7em; height: 40px; display: table; #position: relative; overflow: hidden;">
        <div style="#position: absolute; #top: 50%; display: table-cell; vertical-align: middle;">
            <div style="#position: relative; #top: -50%;">
                <a href="link">This is the text to vertically align</a>
            </div>
        </div>
    </div>
    <div style="clear: both"></div>
</div>

图像和文本都没有垂直对齐。 - Ahsan Rathod
@Tom 这是由于你的 HTML 片段中存在其他边距或填充。无论如何,如果你有一些动态大小的 div 并希望垂直对齐内容,则该链接提供了唯一的跨浏览器解决方案。其他解决方案要么适用于静态高度,要么仅适用于某些浏览器和某些版本大于 bla bla... - Yiğit Yener
@Yigit 我成功让它工作了。 不是文本对齐不正确,而是图片。 如果我将图片与文本一样包装在相同的 div 标签中,它们就可以排成一行。 - Tom

3

行高只在一行文本时有效,这可以是一行或两行。 - Tom

2
这是一个干净的解决方案版本。
<div style="background: yellow">
<div style="width: 155px; font-size: 0.7em; height: 40px; display: table; overflow: hidden;">
    <div style="display: table-cell; vertical-align: middle;">
        <div style="">
            <a href="link">This is the text to vertically align</a>
        </div>
    </div>
</div>
<div style="clear: both"></div>

http://jsfiddle.net/5y4Nb/


0
如果你只需要显示一长段文字的几行,这里有一个Fiddle可以帮到你。根据需要调整高度即可。
    .container-text {
    height:40px;
    width:180px;
    overflow-y:hidden;    
    display:table-cell;
    vertical-align:middle;
    text-align: center;
}

0

看起来像是一个常见的浮点问题,可以通过 clearfix 来解决,或者像我在下面的代码片段中所做的那样,使用包装器的固定高度。

我还设置了浮动 div 的 line-height 并将其稍微加宽了一些。

看一下这个:

 <div style="margin:0 0 10px 0;padding:10px;border:2px solid #606060;background-color:#2b2b2b;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;height:40px">  <div style="float:left;width:55px;height:40px;">  <a href="link"><img style="max-width:50px;border:1px solid #ffb92c;" src="image.jpg" alt="" /></a>  </div>  <div style="float:right;width:185px;font-size:0.7em;height:40px;line-height:40px">  <a href="link">This is the text to vertically align</a>  </div>  </div> 

http://jsfiddle.net/YqxPZ/3/


你的修复有一些错误。图像和文本都没有正确地垂直对齐,甚至在一个 div 中也是如此。 - Ahsan Rathod
谢谢,但如果文本足够长超过两行,这种方法就不起作用了。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接