Почему вы не используете Flexbox? В наши дни это стандарт defacto.
Вот jsfiddle, что я имею в виду: JSFiddle example
По сути, то, что вы хотите сделать, это ваш <h>
элемент должен быть на самом деле ребенок другого DIV в ваш <header>
:
<header>
<div class="backimage">
<h1>
Hello World!
</h1>
</div>
</header>
Ваш <header>
div, как гибкий «контейнер», отображает дочерние элементы в виде столбца, без обертки, выровнен по центру с пространством вокруг и с выравниванием по центру:
header {
display: flex;
flex-flow: column nowrap;
justify-content: space-around;
align-items: center;
align-content: space-around;
}
Детальные элементы в контейнере Flex должны быть заказаны для номера внешнего вида либо в виде строки или столбца, в этом случае «контейнер» отображает элементы в макете столбца, поэтому вы хотите, чтобы ваш заголовок отображался как первый пункт. flex
- сокращенно обозначение flex-grow
, flex-shrink
и flex-basis
; этот третий является тем, какой размер должен быть элемент, первые два, контролирующие, какой приоритет или часть элемента контейнера этот дочерний элемент будет рассматриваться по сравнению с другими дочерними элементами. В этом случае обработайте его автоматически. Мы хотим переместить заголовок, который будет вертикально центрирован в содержащем div, поэтому position: relative;
, добавьте 50% высоты контейнера к исходной точке начала элемента (который всегда начинается с левого верхнего угла объекта), и поскольку текст по умолчанию установлен на 1em, логически следует, что .5em будет центром, поэтому вычитаем из 50%. Дайте центру выравнивания текста для горизонтального центрирования:
header h1 {
position: relative;
top: 50%;
margin-top: -.5em;
text-align: center;
order: 1;
flex: 1 0 auto;
}
Тогда вам просто нужно беспокоиться о вашем фоне.Фон, не повторяйте, определите высоту изображения (которое в этом случае будет применено к самому div), оставьте здесь, например, только так, чтобы вы могли видеть границу div, а не забыть, что это должно появляются вторые по сравнению с заголовком:
.backimage {
background-image: url('http://upload.wikimedia.org/wikipedia/ \
commons/4/47/PNG_transparency_demonstration_1.png');
background-repeat: no-repeat;
border: 1px solid blue;
width: 500px;
height: 300px;
order:2;
}
Вот что вы в конечном итоге с:
Здесь большое руководство по использованию Flexbox: Flexbox guide
Да. Точно так же, как это естественно (не растягивается). –
Если вам известна высота изображения, установите для этого свойства font-size значение. Кроме того, убедитесь, что вертикальное отступы и край элемента h1 установлены в 0 и вертикально-выровнены: в центре. С наилучшими пожеланиями, –
Я хотел бы достичь аналогичного результата: 'img {width: 100%; height: auto;} ' –