Масштаб div, чтобы соответствовать фону

У меня есть div с фоновым изображением, которое я хочу расширить на 100% ширину и автоматически масштабировать div, чтобы он соответствовал требуемой высоте изображения. На данный момент это не масштабирование высоты div, если я не установил высоту div на 100%, но затем он просто растягивается до полной высоты экрана, тогда как я хочу, чтобы он масштабировался до высоты изображения.

Вот html:

<div id="mainHeaderWrapper">


</div><!--end mainHeaderWrapper-->
<br class="clear" />;

Вот css:

    #mainHeaderWrapper{


     background: url(http://localhost/site/gallery/bg1.jpg);
     width: 100%;
     height: auto;
     -webkit-background-size: cover;
     -moz-background-size: cover;
     -o-background-size: cover;
     background-size: cover; 
     background-size: 100% 100%;

     background-repeat: no-repeat;
     background-position: center center; 

 }

 .clear { clear: both; }

Спасибо за любую помощь.

Ответы

Ответ 1

Пусть прозрачное изображение диктует ваши измерения DIV.

демонстрация jsBin

Внутри этого div поместить одно и то же изображение

<div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! yey!-->
</div>

установите это изображение в

#mainHeaderWrapper{
    background: no-repeat url(path/to/image.jpg) 50% / 100%;
}
#mainHeaderWrapper img{
    vertical-align: top;
    width: 100%; /* max width */
    opacity: 0;  /* make it transparent */
}

Таким образом, высота DIV будет определяться содержащим невидимым образом,
Если параметр background-image установлен в центр, полный (50% / 100%), он будет соответствовать этим пропорциям изображения.

Не уверен, что вы хотите манипулировать цветами фонового изображения или что (используя CSS3 filter), но теперь после прочтения снова того, что я написал...
Не проще ли просто поместить изображение внутри DIV?:)

Нужно ли содержимое внутри DIV?

jsBin demo Из-за содержащего изображения вам понадобится дополнительный дочерний элемент, который будет установлен до position:absolute и действовать как элемент наложения

<div id="mainHeaderWrapper">
   <img src="path/to/image.jpg"><!-- I'm invisible! yey!-->
   <div>
     Some content...
   </div>
</div>

#mainHeaderWrapper{
    position: relative;
    background: no-repeat url(path/to/image.jpg) 50% / 100%;
}
#mainHeaderWrapper > img{
    vertical-align: top;
    width: 100%; /* max width */
    opacity: 0;  /* make it transparent */
}
#mainHeaderWrapper > div{
    position: absolute;
    top: 0;
    width: 100%;
    height: 100%;
}

Ответ 2

Если вы знаете пропорции изображения, используйте процентное заполнение, чтобы определить высоту контейнера. Установите height:0 и установите вертикальное заполнение в процентах от ширины.

Ключи к этому методу заключаются в том, что вертикальное заполнение в процентах всегда связано с шириной.

В соответствии с box model (w3.org):

Процент рассчитывается по отношению к ширинесозданный блок, содержащий блок, даже для "padding-top" и 'Обивка дна'.

Ниже изображение составляет 400px X 200px, поэтому соотношение высоты к ширине равно 1: 2 и padding-top установлено на 50%;

#mainHeaderWrapper {
  width: 100%;
  height: 0;
  padding-top:50%;
  background-image: url(http://lorempixel.com/400/200/abstract/1/);
  background-size: 100% auto;
  background-repeat: no-repeat;
}
<div id="mainHeaderWrapper"></div>
stuff below the image

Ответ 3

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

Размеры моего изображения - 2880x1410. Упростите размеры → 96/47 (я использовал этот простой калькулятор отношения http://andrew.hedges.name/experiments/aspect_ratio/). Когда у вас есть упрощенное соотношение, подключите высоту и ширину к уравнению:

height: calc ((100vw * W)/H); Таким образом, мой мог бы прочитать: height: calc ((100vw * 47)/96);

Не нужно беспокоиться о содержимом div либо (если они не подходят)