Высота шкалы CSS для соответствия ширине - возможно, с помощью formfactor
Я реализовал карту GoogleMapsV3 на базовом адаптивном дизайн-сайте twitterBootstrap.
Но мой вопрос довольно прост: у меня есть:
<div id="map"></map>
а также
#map{ width: 100%; height: 200px }
Я хотел бы иметь возможность изменить высоту на форм-фактор. Как в этом "в моих снах CSS"
#map { width: 100%; height: width * 1.72 }
Я пытался не указывать высоту, настраивать на авто и всякие проценты - но только для того, чтобы div всегда падал на меня.
У меня нет проблем с написанием js-решения, но надеюсь на простое чистое решение CSS, возможно CSS3
Если это невозможно, каков был бы оптимальный способ избавиться от этого? (таймеры, события... или тому подобное)
Ответы
Ответ 1
Для этого вам нужно будет использовать JavaScript или полагаться на несколько поддерживаемое CSS-выражение calc()
.
window.addEventListener("resize", function(e) {
var mapElement = document.getElementById("map");
mapElement.style.height = mapElement.offsetWidth * 1.72;
});
Или используя CSS calc (см. Поддержку здесь: http://caniuse.com/calc)
#map {
width: 100%;
height: calc(width * 1.75)
}
Ответ 2
Вот. Чистый CSS. Вам нужен один дополнительный элемент "контейнер".
Скрипка
(на самом деле тинкербин): http://tinkerbin.com/rQ71nWDT (Тинкербин мертв.)
Решение.
Обратите внимание, что я использую 100% по всему примеру. Вы можете использовать любой процент, который хотите.
Так как процентное соотношение высоты относительно высоты родительского элемента, мы не можем полагаться на него. Мы должны полагаться на что-то еще. К счастью, отступы зависят от ширины - горизонтальной или вертикальной. В padding-xyz: 100%
, 100% соответствует 100% ширины окна.
К сожалению, отступы - это просто отступы. Высота поля содержимого равна 0. Нет проблем!
Вставьте абсолютно позиционированный элемент, задайте ему ширину 100%, высоту 100% и используйте его в качестве фактического поля содержимого. Высота 100% работает, потому что процентные высоты на абсолютно позиционированных элементах относятся к отступу поля, к которому они относятся относительно.
HTML:
<div id="map_container">
<div id="map">
</div>
</div>
CSS:
#map_container {
position: relative;
width: 100%;
padding-bottom: 100%;
}
#map {
position: absolute;
width: 100%;
height: 100%;
}
Ответ 3
Вы можете попробовать использовать vw
для высоты. https://developer.mozilla.org/en/docs/Web/CSS/length
Что-то вроде
div#map {
width: 100%;
height: 60vw;
}
Это установит ширину div на 60% ширины области просмотра. Вам, вероятно, понадобится использовать calc для настройки, чтобы учесть отступы...
Ответ 4
Мне нужно делать "флюидные" прямоугольники, а не квадраты.... так СПАСИБО JOPL.... не взяли, а минут...
#map_container {
position: relative;
width: 100%;
padding-bottom: 75%;
}
#map {
position:absolute;
width:100%;
height:100%;
}
Ответ 5
.video {
width: 100%;
position: relative;
padding-bottom: 56.25%; /* ratio 16/9 */
}
.video iframe {
border: none;
position: absolute;
width: 100%;
height: 100%;
}
16: 9
padding-bottom = 9/16 * 100
Ответ 6
Позвольте мне описать решение JS как отдельный ответ:
function handleResize()
{
var mapElement = document.getElementById("map");
mapElement.style.height = (mapElement.offsetWidth * 1.72) + "px";
}
<div id="map" onresize="handleResize()">...</div>
(или зарегистрировать прослушиватель событий динамически).
mapElement.style.width * 1.72
не будет работать, поскольку для этого требуется, чтобы ширина была явно задана элементом, либо с использованием атрибута width
DOM, либо в встроенном стиле CSS width
.
Ответ 7
Решение с Jquery
$(window).resize(function () {
var width = $("#map").width();
$("#map").height(width * 1.72);
});
Ответ 8
В JQuery
$('.img-responsive').each(function(){
$(this).height($(this).width());
});