Эквивалент valign = центр для <p>с css - PullRequest
5 голосов
/ 19 марта 2010

У меня на странице есть следующий код:

<p align="justify" 
   style="font-size:10pt;display:block;height:200px;vertical-align:middle;"> 
  Content
</p> 

Я хочу, чтобы текст располагался вертикально в центре тега p

Использование vertical-align:middle не похоже на работу.

Есть ли способ сделать это?

Ответы [ 8 ]

15 голосов
/ 18 июня 2012

Вот решение, которое избегает использования тегов <table>.

Он работает в Internet Explorer 8 и 9, Chrome, Firefox и Safari (но не в IE7, но в прошлый раз, когда я проверял, они занимают около 2% рынка по всему миру).

Во-первых, избавьтесь от попытки попытаться выровнять текст по вертикали внутри тега абзаца - вместо этого подумайте с точки зрения выравнивания абзаца внутри контейнера.

Использованиеразметка ...

<div class="container">
    <p>The text that you'd wish to have vertically aligned in the middle of the
       container...which might be like an article column, or whatever</p>
</div>

и CSS

.container{
     border: 1px solid red; /*to see the example*/
     display: table-cell;
     height: /* insert whatever height you want*/;
     vertical-align: middle;
 }

Это позволит выровнять абзац по вертикали по центру элемента контейнера.

Теперь действительно забавное решение - это когда у вас есть родительский контейнер, полный контента, который вы хотите, чтобы все дочерние элементы были расположены рядом друг с другом, а также идеально выровнены по вертикали к середине.

Конечно, используйте эту версию, если у вас есть определенный размер, который вы хотите, чтобы родительский контейнер был:

Разметка:

<div class="containerTwo">
     <p>here's some text and stuffs, make this whatever the heck 
     you want it to be</p>
     <p>these can be any height and, really any element, the magic
     is in the display property of the elements so this still 
     looks pretty semantic</p>
     <p>more stuff and this could be like an image or something</p>
</div>

CSS:

.containerTwo{
     border: 1px solid green; /* for sake of the example */
     display: table-cell;
     height: /* what you want it to be */;
     vertical-align: middle;
}
.containerTwo p{
     border: 1px solid blue; /* for sake of example */
     display: inline-block;
     width: 30%; /* all of the child elems shouldn't go over 100% */
     vertical-align: middle;
}

Это создаст родительский элемент любой высоты по вашему выбору со всеми его дочерними элементами, идеально выровненными посередине.Четное решение COOLER, которое даже не требует display: table-cell, возможно, когда у вас есть куча элементов разной высоты, которые вы все хотите выровнять по центру друг с другом, и вы не хотите указывать высоту для родительского элементано просто хочу, чтобы он растянулся до высоты самого большого дочернего элемента: (о, это работает в IE7)

Разметка:

<div class="containerThree">
    <p>this is more text that you might want to have 
       vertically aligned in the middle with the others</p>
    <p>so here's a sibling paragraph you might want to 
       have aligned next to the other.</p>
    <div title="a really big element!"></div>
    <p>like the last one, the width can't add up to more
       than 100% of the parent element, otherwise they just
       wrap.  But atleast no table-cell!</p>
</div>

CSS:

.containerThree{
     border: 1px solid purple; /* for the example */
     /* and that's it!!! */
}

.containerThree p, .containerThree div{
     border: 1px solid blue;
     width: 20%; /* can't add beyond total width of parent */
     display: inline-block;
     *display: inline; /* ie7 hack */
     zoom: 1; /* ie7 hack */
     vertical-align: middle;

}

.containerThree div{  /* to simulate a big element */
     height: 400px; 
}

Для этого все будет вертикально выровняться друг с другом.

Вот пример на js fiddle для вас:

http://jsfiddle.net/NJqMp/1/

5 голосов
/ 19 марта 2010

Если у вас есть контент, который умещается в одну строку, вы можете использовать обходной путь установки высоты строки равной высоте элемента

line-height:200px;

3 голосов
/ 20 июня 2012

Изменение отображения на ячейка таблицы позволит вам действовать так, как если бы абзац, ну, в общем, ячейка таблицы.

Вот скрипка, с которой можно поиграть (http://jsfiddle.net/stillb4llin/RxpFF/). Я поставил рамку вокруг, чтобы вы могли видеть за пределами абзаца.

3 голосов
/ 19 июня 2012

Просто измените атрибут display вашего абзаца на table-cell, затем примените display: table; width: 100%; к контейнеру вашего абзаца.

<div style="display:table; width:100%">
  <p align="justify" style="font-size:10pt;display:table-cell; height:200px;vertical-align:middle; background-color:rgba(255,0,0,0.3)"> 
    Content
  </p> 
</div>

jsFiddle

Осторожно,вам может потребоваться использовать какой-либо тип модернизатора, поскольку IE7 не поддерживает это свойство CSS.

3 голосов
/ 19 марта 2010

Это не так просто, как просто присвоить vertical-align:middle. Этот стиль для таблиц. Чтобы выровнять по вертикали без таблиц, вы можете использовать один из методов, показанных здесь:

http://blog.themeforest.net/tutorials/vertical-centering-with-css/

2 голосов
/ 19 марта 2010

я думаю, что самый простой способ сделать это - использовать верхний отступ, и объем этого заполнения зависит от размера текста.

так, например, для div высотой 30px, который содержит шрифт 10px, тогда верхний отступ равен 10px. Кроме того, вы должны помнить, что нужно добавить сумму, которую вы добавляете как padding-top, для удаления с высоты.

То есть, если вы упомянули высоту в CSS как фиксированную 30px, то после применения отступа 10px вы должны сделать эту фиксированную высоту 20px.

свойство вертикального выравнивания предназначено для установки вертикального выравнивания контейнера, а не содержимого.

0 голосов
/ 19 июня 2012

Как и в аналогичном вопросе , используйте display: inline-block с элементом-заполнителем для вертикального центрирования текста внутри элемента блока:

<!doctype html>
<html lang="en">
<head>
 <style type="text/css">
 #blockbox { height: 500px; border: 1px solid black;}
 #container, #placeholder { height: 100%; }

 #content, #placeholder { display:inline-block; vertical-align: middle; }
 </style>
</head>

<body>
 <div id="blockbox">
  <p id="container">
    <span id="content">
    Content
    </span>
    <span id="placeholder"></span>
  </p>
 </div>
</body>
</html>

Вертикальное выравнивание применяется только к встроенным элементам или ячейкам таблицы , поэтому используйте его вместе с display:inline-block или display:table-cell с родительским элементом display:table при вертикальном центрировании элементов блока.

Ссылка:

CSS Горизонтальное и вертикальное центрирование

0 голосов
/ 19 марта 2010

Самый простой способ - обернуть его в таблицу следующим образом:

<table><tr><td style='vertical-align: middle; height:200px;'>
  <p align="justify" style="font-size:10pt;display:block;"> 
    Content
  </p> 
</td></tr></table>

Ох и align = "justify" следует переместить в CSS как text-align: justify

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...