是否有指定CSS中的寬高比(例如4:3或16:9),然後讓div(容器)塊適合當前窗口的寬度和高度?確保元素保留指定的高寬比
一個非常簡單的問題,希望它有一個相對簡單的答案。
編輯:那些仍然有興趣實現這一目標只用樣式將是引導的responsive helpers類的一個很好的例子。
是否有指定CSS中的寬高比(例如4:3或16:9),然後讓div(容器)塊適合當前窗口的寬度和高度?確保元素保留指定的高寬比
一個非常簡單的問題,希望它有一個相對簡單的答案。
編輯:那些仍然有興趣實現這一目標只用樣式將是引導的responsive helpers類的一個很好的例子。
爲此,我擔心你會需要一些JS。我用jQuery的位置:
function preserveAspect() {
var scaled = $("#scaled");
scaled.height("100%");
scaled.width("100%");
scaled.css("box-sizing", "border-box");
var ratio = 16/9;
var w = scaled.outerWidth();
var h = scaled.outerHeight();
if (w > ratio*h) {
scaled.width(ratio*h);
// horizontal centering is done using margin:auto in CSS
} else if (h > w/ratio) {
var newHeight = w/ratio;
scaled.height(newHeight);
// for vertical centering:
scaled.css({marginTop: ($("body").height()-newHeight)/2});
}
}
$(document).ready(function() {
preserveAspect();
$(window).resize(preserveAspect);
});
說明:
完整的代碼和工作示例這裏: http://jsbin.com/efaRuXE/5/
乾杯這正是我想要的非常感謝你。 –
替換「scaled.height(」100%「); scaled.width(」100%「);」通過scaled.css({'height':'100%','width':'100%'});否則它將無法通過盒子尺寸進行分區:border-box –
@JohnLee我剛剛使用Firefox 44進行了測試,即使使用邊框,它也適用於我。你使用了什麼瀏覽器? –
找到了一種方法。這可能很難,但它應該讓你去。將元素的高度設置爲零,然後使用填充百分比。
例如,4:3:
div {
height: 0;
padding-bottom: 75%;
background: #999;
}
例如,16:9
div {
height: 0;
padding-bottom: 56%;
background: #999;
}
只適用於窗口寬度,一旦你調整窗口的高度超過它所剪裁的方面。此外,如果我想調整子元素相對於百分比的大小,它將無法工作,因爲高度爲0. [圖片](http://i.imgur.com/Ij505tT.png)無論如何,謝謝。 –
那麼,如果比例是固定的,但窗口不能包含它,你會期望什麼?該比例應該奇蹟般地改變? – j08691
它可以縮小到適合窗口,在其兩側留下空白。 –
不幸的是沒有。
我在WWW上的樣式提出一次WG @ W3C建設這樣的:
div {
width: 50%;
height: width(56.25%); /* 16:9 ratio */
}
但是從瀏覽器廠商沒有一個人表示在那一刻任何利息。
無論如何,上述解決方案只允許定義箱子的比例。但CSS使用的佈局模型不允許以聲明方式定義刻寫。
這將是完美的我不知道爲什麼它沒有抓住。 –
這個問題現在是幾個星期了,但有是純CSS的方式來做到這一點。感謝Danield使用它來回答this question。它使用大衆和VH單位,像這樣:
#wrapper {
height:75vw;
max-height:100vh; /* max-height/height = aspect ratio */
width:100vw;
max-width:133.3333vh; /* max-width/width = aspect ratio */
position:absolute;
}
的壞消息是,support is iffy in current mobile browsers and in IE before version 11。
這是純粹的天才,對我來說非常完美,我猜瀏覽器被抓住了,並且很容易成爲最好的解決方案! – TeeJaay
答案是否定的。絕對是 –
如何結合一點JS? –
@EL - 再試一次。 – j08691