Ответ 1
У меня есть решение, которое работает также с IE8 (с использованием Pure CSS 2.1), но не идеально. потому что мне нужно, чтобы браузер пересчитывал вещи, когда он менялся, и, по-видимому, он этого не делает, если только он не должен (и я не могу найти способ заставить его думать, что он должен), поэтому вам придется обновить страницу после изменение размера.
насколько я знаю, единственный элемент, который может масштабировать свое отношение, равен <img>
, поэтому мы будем использовать <img>
в наших интересах.
SO, мы собираемся использовать изображение с требуемым соотношением (используя сервисы placehold.it), скажем, мы хотим соотношение 13X10
(как в вашем примере), поэтому мы будем использовать <img src="http://placehold.it/13x10" />
.
это изображение будет иметь фиксированную высоту 100%
тела, и теперь ширина изображения масштабируется относительно отношения. поэтому ширина изображения равна 130%
высоте тела.
это изображение заключено в div, а div имеет inline-block
отображение, поэтому он берет точно размер своего контента. ведьма - это нужный размер.
мы удаляем изображение с экрана с помощью visibility: hidden;
(не display:none;
, потому что нам нужно, чтобы изображение занимало пробел), и мы создаем еще один абсолютный div, который будет содержать фактический контент, который будет находиться прямо над изображение (100% ширина и 100% высота общего контейнера).
Это отлично работает при первом запуске страницы, но при изменении размера страницы браузер не всегда снова измеряет правильную ширину и высоту, поэтому вам нужно обновиться, чтобы это произошло.
Вот полный HTML:
<div class="Scalable">
<img class="Scaler" src="http://placehold.it/13x10" />
<div class="Content"></div>
</div>
и этот простой CSS:
html, body, .Content
{
width: 100%;
height: 100%;
margin: 0;
padding: 0;
}
body
{
text-align: center;
}
.Scalable
{
position: relative;
display: inline-block;
height: 100%;
}
.Scaler
{
width: auto;
height: 100%;
margin-bottom: -5px;
visibility: hidden;
}
.Content
{
position: absolute;
top: 0;
background-color: black;
}
Здесь Fiddle (не забудьте обновить после изменения размера) Я рекомендую вам скопировать этот код на свой локальный компьютер и попробовать его там, а не внутри скрипта.