Ответ 1
Для этого вам не нужен javascript. Вы можете использовать чистый CSS.
Процент верхнего поля интерпретируется относительно содержащего блока width. Объедините его с положением: абсолютным на дочернем элементе, и вы можете поместить почти что угодно в поле, которое сохраняет его соотношение сторон.
HTML:
<div class="aspectwrapper">
<div class="content">
</div>
</div>
CSS
.aspectwrapper {
display: inline-block; /* shrink to fit */
width: 100%; /* whatever width you like */
position: relative; /* so .content can use position: absolute */
}
.aspectwrapper::after {
padding-top: 56.25%; /* percentage of containing block _width_ */
display: block;
content: '';
}
.content {
position: absolute;
top: 0; bottom: 0; right: 0; left: 0; /* follow the parent edges */
outline: thin dashed green; /* just so you can see the box */
}
display: inline-block
оставляет дополнительное пространство ниже нижнего края поля .aspectwrapper
, поэтому другой элемент под ним не будет работать против него. Использование display: block
избавится от него.
Благодаря этот пост для подсказки!
Другой подход основан на том факте, что браузеры учитывают соотношение сторон изображения при изменении только его ширины или высоты. (Я разрешу Google генерировать прозрачное изображение 16x9 для демонстрационных целей, но на практике вы использовали бы свое статическое изображение.)
HTML:
<div class="aspectwrapper">
<img class="aspectspacer" src="http://chart.googleapis.com/chart?cht=p3&chs=160x90" />
<div class="content">
</div>
</div>
CSS
.aspectwrapper {
width: 100%;
position: relative;
}
.aspectspacer {
width: 100%; /* let the enlarged image height push .aspectwrapper bottom edge */
}
.content {
position: absolute;
top: 0; bottom: 0; right: 0; left: 0;
outline: thin dashed green;
}