2015-08-14 2 views
1

Я хочу вертикально выровнять текст внутри div, который является динамической высотой, например, 10% страницы, но без использования известного «метода таблицы». Можно ли это сделать с помощью чистого CSS?Вертикальный текст выравнивания внутри динамической высоты div

enter image description here

Кусок кода:

HTML:

<div class="post-details-wrapper"> 
    <div class="post-details-h"> 
     Post Details 
    </div> 
</div> 

CSS:

post-details-h { 
background-color: green; 
height:5%; 
width:100%; 
} 

В данном случае цель состоит в том, чтобы вертикально выровнять текст «пост -details-h "div.

ответ

1

Обычный подход - использовать дисплей: табличный материал. Но если вы не хотите использовать его, вы можете попробовать что-то вроде этого:

<div class="post-details-wrapper"> 
    <div class="post-details-h"> 
     <span>Post Details</span> 
    </div> 
</div> 

.post-details-wrapper { 
    height:350px; 
    background:red; 
} 
.post-details-h { 
    background-color: green; 
    height:10%; 
    width:100%; 
} 
.post-details-h:before { 
    content: ''; 
    display: inline-block; 
    height: 100%; 
    vertical-align: middle; 
} 
.post-details-h span { 
    display: inline-block; 
    vertical-align: middle; 
} 

Просто добавьте промежуток, так что вы можете центрирования Täht элемента внутри .POST-деталь-час.

Вы можете проверить в JSFiddle

Надеются, что это помогает.

+0

Этот подход работает отлично! – sarotnem

1

использование display: flex + align-items: center

*{ 
 
    padding: 0; 
 
    margin: 0; 
 
} 
 

 
.post-details-h{ 
 
    background-color: green; 
 
    height: 100px; 
 
    width: 100%; 
 
    display: flex; 
 
    align-items: center; 
 
}
<div class="post-details-wrapper"> 
 
    <div class="post-details-h"> 
 
     <span>Post Details</span> 
 
    </div> 
 
</div>

+0

Хорошее решение, красиво сделано. –

+0

Хорошее обходное решение, но проблема кросс-браузерной совместимости. Работает отлично с Chrome и Firefox, но в Safari это не – sarotnem

0

Заканчивать этот fiddle. Способ, которым я знаю, как это сделать, включает в себя два класса, например, как вы это сделали.

.post-details-h { 
    line-height: 200px; 
    width:100%; 
    vertical-align: center; 
} 

.post-details-wrapper { 
    background-color: red; 
    height: 200px; 
    position: relative; 
} 
+0

Но в этом случае высота фиксирована – sarotnem

+0

Да, это правда. Я знаю, что вы можете использовать 'line-height', как этот' line-height: 500%; ', но это ужасный взлом, и я бы не рекомендовал его. Возможно, если бы я поиграл со скрипкой, я мог бы кое-что понять. – UltraSonja