Выровнять текст по вертикали внутри элемента div - PullRequest
12 голосов
/ 13 июля 2011

Я знаю, что этот вопрос был задан до смерти, но ничего из поиска мне не помогло.

Вы знаете сделку, у меня есть элемент div, в котором мне нужно выровнять текст по вертикали, но ничего не получилось (позиция: абсолютная; верх: 50%; margin-top: -x; отображение: ячейка таблицы; вертикальная- выровнять: посередине; и т. д. и т. п.)

Вот то, с чем я работаю (извините за встроенный CSS). В любом случае, я бы использовал высоту строки, но текст может быть одной или двумя строками. Он должен быть выровнен по вертикали с изображением, которое всегда имеет максимальную высоту 30 пикселей (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>

Ответы [ 6 ]

9 голосов
/ 13 июля 2011

Еще одна вещь, которую вы можете сделать. Если в div есть только одна строка текста, вы можете использовать line-height

пример

div {
    line-height:40px;
}
6 голосов
/ 13 июля 2011

Идея от здесь и должна работать для всех браузеров.

<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>
3 голосов
/ 13 июля 2011

Вам нужно сделать так:

http://jsfiddle.net/rathoreahsan/5u9HY/

Используйте fixed height вместо padding в главном div.и используйте высоту строки для левого и правого Div

2 голосов
/ 28 марта 2013

Вот чистая версия решения

<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 голосов
/ 30 октября 2015

Если вам нужно показать только несколько строк очень длинного текста, вот это Fiddle .Отрегулируйте высоту в соответствии с необходимостью.

    .container-text {
    height:40px;
    width:180px;
    overflow-y:hidden;    
    display:table-cell;
    vertical-align:middle;
    text-align: center;
}
0 голосов
/ 13 июля 2011

Похоже на обычную проблему с плавающей точкой, которую можно исправить с помощью clearfix или, как я делал в следующем фрагменте кода, с фиксированной высотой обертки.

Я также уселся 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/

...