2015-02-25 2 views
0

У меня есть позиционирован относительно figure с изображением в следующим образом:Вертикально центр содержания в DIV, где размеры устанавливаются изображения

<figure> 
    <img src="image.jpg" width="100%" /> 
</figure> 

figure { 
    position: relative; 
    display: block; } 

figure берет его высота от изображения. Теперь, скажем, я добавляю абсолютно позиционированный контент в figure, который будет сидеть поверх изображения. Содержимое не имеет установленной высоты и может быть многострочным. Я обычно делают такие вещи, как это:

<figure> 
    <img src="image.jpg" width="100%" /> 
    <figcaption> 
    <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span> 
    </figcaption> 
</figure> 

figure { 
    position: relative; 
    display: block; } 

figcaption { 
    position: absolute; 
    display: table; 
    top:0; right:0; 
    bottom:0; left:0; 
    width:100%; height:100%; } 

figcaption span { 
    display: table-cell; 
    vertical-align: middle; } 

Однако, несмотря на figcaption со 100% высоты и ширины, а также все 4 позиционирований установлено в 0, это еще не заполнит всю фигуру, то есть вертикальная центрирование не работает.

Есть ли способ сделать figcaption взять высоту 100%, когда figure занимает высоту от изображения внутри? Или есть другой способ вертикально сосредоточиться в этой ситуации?

+0

ли какие-либо из этих ответов помочь? http://stackoverflow.com/questions/5703552/css-center-text-horizontal-and-vertical-inside-a-div-block/25799339#25799339 –

+0

'Однако, несмотря на то, что figcaption имеет 100% высоту и ширину, плюс все 4 позиционируется в 0, он все равно не заполняет всю фигуру, что означает, что вертикальное центрирование не работает. «Потому что нет установленной высоты. – Ruddy

+0

@ Ruddy да, но если я изменю цифру на 'display: block', это более чем счастливо взять 100% высоту и ширину. – Coop

ответ

1

Вы просто должны установить margin: auto; на figcaption, вы были очень близки.

figure { 
 
    position: relative; 
 
    display: block; 
 
} 
 
figcaption { 
 
    position: absolute; 
 
    display: table; 
 
    top: 0; 
 
    right: 0; 
 
    bottom: 0; 
 
    left: 0; 
 
    margin: auto; /* Added */ 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
figcaption span { 
 
    display: table-cell; 
 
    vertical-align: middle; 
 
}
<figure> 
 
    <img src="image.jpg" width="100%" /> 
 
    <figcaption> <span>Lorem ipsum dolor sit amet, consectetur adipiscing elit</span> 
 

 
    </figcaption> 
 
</figure>

+0

Блестящий! Спасибо, очень простое решение. – Coop

1

Установка верхнего и нижнего уровня на 0 не автоматически центрирует его. Вот пример: http://jsfiddle.net/sgcdpert/

figcaption { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
    -webkit-transform: translateX(-50%) translateY(-50%); 
    -moz-transform: translateX(-50%) translateY(-50%); 
    -o-transform: translateX(-50%) translateY(-50%); 
    transform: translateX(-50%) translateY(-50%); 
    } 
+0

Я никогда не думал, что так делаю, это очень умно! Я знал «top: 0; bottom: 0; 'не будет центрировать его по вертикали, это просто для того, чтобы дать ему 100% высоты. Затем «display: table-cell» и vertical-align: middle должны были сделать центрирование. – Coop