Высота равна динамической ширине (CSS fluid layout) [дубликат]
этот вопрос уже есть ответ здесь:
Поддерживайте соотношение сторон div с помощью CSS
19 ответов
можно ли установить ту же высоту, что и ширина (соотношение 1:1)?
пример
+----------+
| body |
| 1:3 |
| |
| +------+ |
| | div | |
| | 1:1 | |
| +------+ |
| |
| |
| |
| |
| |
+----------+
CSS
div {
width: 80%;
height: same-as-width
}
9 ответов:
С помощью jQuery вы можете достичь этого, сделав
var cw = $('.child').width(); $('.child').css({'height':cw+'px'});Проверьте рабочий пример на http://jsfiddle.net/n6DAu/1/
[обновление: хотя я обнаружил этот трюк самостоятельно, я с тех пор узнал, что И Thierry Koblentz опереди меня. Вы можете найти его статья 2009 в списке отдельно. Кредит, где кредит должен.]
Я знаю, это старый вопрос, но я столкнулся с подобной проблемой, что я сделал решить только с помощью CSS. Вот мой блоге это обсуждает решение. Включено в пост это видео. Код Перепечатано ниже.
HTML:
<div id="container"> <div id="dummy"></div> <div id="element"> some text </div> </div>CSS:
#container { display: inline-block; position: relative; width: 50%; } #dummy { margin-top: 75%; /* 4:3 aspect ratio */ } #element { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: silver /* show me! */ }#container { display: inline-block; position: relative; width: 50%; } #dummy { margin-top: 75%; /* 4:3 aspect ratio */ } #element { position: absolute; top: 0; bottom: 0; left: 0; right: 0; background-color: silver/* show me! */ }<div id="container"> <div id="dummy"></div> <div id="element"> some text </div> </div>
есть способ с помощью CSS!
Если вы устанавливаете свою ширину в зависимости от родительского контейнера, вы можете установить высоту в 0 и установить padding-bottom на процент, который будет рассчитываться в зависимости от текущей ширины:
.some_element { position: relative; width: 20%; height: 0; padding-bottom: 20%; }Это хорошо работает во всех основных браузерах.
JSFiddle: https://jsfiddle.net/ayb9nzj3/
это возможно без какого-либо Javascript:)
эта статья описывает его отлично -http://www.mademyday.de/css-height-equals-width-with-pure-css.html
HTML:
<div class='box'> <div class='content'>Aspect ratio of 1:1</div> </div>CSS:
.box { position: relative; width: 50%; /* desired width */ } .box:before { content: ""; display: block; padding-top: 100%; /* initial ratio of 1:1*/ } .content { position: absolute; top: 0; left: 0; bottom: 0; right: 0; } /* Other ratios - just apply the desired class to the "box" element */ .ratio2_1:before{ padding-top: 50%; } .ratio1_2:before{ padding-top: 200%; } .ratio4_3:before{ padding-top: 75%; } .ratio16_9:before{ padding-top: 56.25%; }
простой и neet: использовать
vwблоки для отзывчивых высоты / ширины согласно ширине видового экрана.vw: 1/100 ширины видового экрана. (источник MDN)
HTML:
<div></div>CSS для соотношения сторон 1:1:
div{ width:80vw; height:80vw; /* same as width */ }
таблица для расчета высоты в соответствии до нужного соотношения сторон и ширины элемента.
aspect ratio | multiply width by ----------------------------------- 1:1 | 1 1:3 | 3 4:3 | 0.75 16:9 | 0.5625
эта техника позволяет :
- вставьте любое содержимое внутри элемента без использования
position:absolute;- нет ненужной разметки HTML (только один элемент)
- адаптировать соотношение сторон элементов в соответствии с высотой видового экрана с помощью vh единиц
- вы можете сделать отзывчивый квадрат или другое соотношение сторон, которое всегда вписывается в видовой экран в соответствии с высота и ширина окна просмотра (см. Этот ответ:отзывчивый квадрат согласно ширине и высоте вьюпорта или это демо)
эти устройства поддерживаются IE9 + см. canIuse для получения дополнительной информации
очень простой способ jsfiddle
HTML
<div id="container"> <div id="element"> some text </div> </div>CSS
#container { width: 50%; /* desired width */ } #element { height: 0; padding-bottom: 100%; }
расширяя технику заполнения сверху / снизу, можно использовать псевдо-элемент для установки высоты элемента. Используйте переполнение, плавающие и отрицательные поля, чтобы удалить псевдо-элемент из представления и потока.
Это позволяет размещать содержимое внутри коробки без использования дополнительного div и / или CSS позиционирования.
.fixed-ar { overflow: hidden; } .fixed-ar:before { content: ""; float: left; margin-left: -10px; width: 10px; padding-top: 100%; } .fixed-ar-4-3:before { /* 100 * 3 / 4 = 75 */ padding-top: 75%; } .fixed-ar-16-9:before { /* 100 * 9 / 16 = 56.25 */ padding-top: 56.25%; } /* examples */ .fixed-ar { margin: 1em 0; max-width: 400px; color: #999; background: #EEE url(http://lorempixel.com/640/480/food/5/) center no-repeat; background-size: contain; }<div class="fixed-ar fixed-ar-4-3">4:3 Aspect Ratio</div> <div class="fixed-ar fixed-ar-16-9">16:9 Aspect Ratio</div>
на самом деле это относится как комментарий к ответу Натана, но мне пока не разрешено это делать...
Я хотел сохранить соотношение сторон, даже если есть слишком много вещей, чтобы поместиться в коробке. Его пример расширяет высоту, изменяя соотношение сторон. Я нашел добавлениеoverflow: hidden; overflow-x: auto; overflow-y: auto;на .стихия помогла. См.http://jsfiddle.net/B8FU8/3111/
Comments