風雲作弊: 我正在處理一個包含典型HTML/CSS組合的響應式設計。除了div內有iframe的情況之外,一切都很好。 iframe應自動調整爲父div的大小。一個純CSS的解決方案沒有出現,所以我要用JQuery方法。除了在一種情況下,從較小寬度調整爲較大寬度的屏幕時,它可以很好地工作。動態調整iframe的大小
HTML:
<div class="container">
<iframe class="iframe-class" src="http://www.cnn.com/"></iframe>
</div>
CSS:
.container {
width: 100%;
height: 250px;
}
.iframe-class {
width: 100%;
height: 100%;
border: 1px solid red;
overflow: auto;
}
的Javascript:
$(function() {
setIFrameSize();
$(window).resize(function() {
setIFrameSize();
});
});
function setIFrameSize() {
var ogWidth = 700;
var ogHeight = 600;
var ogRatio = ogWidth/ogHeight;
var windowWidth = $(window).width();
if (windowWidth < 480) {
var parentDivWidth = $(".iframe-class").parent().width();
var newHeight = (parentDivWidth/ogRatio);
$(".iframe-class").addClass("iframe-class-resize");
$(".iframe-class-resize").css("width", parentDivWidth);
$(".iframe-class-resize").css("height", newHeight);
} else {
// $(".iframe-class-resize").removeAttr("width");
// $(".iframe-class-resize").removeAttr("height");
$(".iframe-class").removeClass("iframe-class-resize");
}
}
問題: 由於窗口被調整大小時,它持續的檢查窗口寬度,並且一旦它擊中< 480像素,所述代碼添加一個名爲iframe-class-resize
類,並且設置的寬度和高度,以該類。由於窗口的大小調整得較大,一旦尺寸達到480像素,它就會刪除該類。問題是設置寬度和高度屬性直接將它們添加到元素而不是類本身。因此,刪除類不會刪除新的寬度和高度。我試圖強制使用removeAttr()
(上面註釋)去除這些屬性,但那不起作用。
任何人都可以看到上面的代碼出錯了嗎?或者有關如何更有效地完成響應式iframe的建議?需要的主要事情是iframe必須在<div></div>
之內,並且div可能不一定具有定義的寬度或高度。理想情況下,父div應該明確定義寬度和高度,但是該網站目前的設置方式並不總是可行。
附加: 如果上面是不夠清楚,請嘗試以下操作重現該問題:
- 打開一個桌面計算機上的瀏覽器。我在Windows機器上使用Chrome。不要最大化瀏覽器。
- 打開上面的jsfiddle(http://jsfiddle.net/TBJ83/)。您會注意到,iframe內容跨越了「預覽」面板的整個寬度。
- 手動調整寬度的大小,直到整個窗口爲< 480px。此時,iframe內容將會非常小。
- 手動調整寬度的大小,直到整個窗口爲>> 480px。目標是讓該iframe內容重新獲得「預覽」面板的整個寬度。相反,內容保留了調整後的寬度和高度,因爲
.css()
函數直接將css更改應用於元素而不是類。
在此先感謝!
這對我的情況最有效。謝謝! – jiminy
@jiminy很高興幫助。老實說,你的代碼很好。你可以鏈接一些調用,並通過傳入一個對象來組合'.css()'調用。您也可以計算一次比率,而不是每次調整大小,以及調整您的調整大小事件處理程序。除此之外,它看起來不錯。您可以簡化操作,但需要花費更改整個方法,而且節省的費用很小。 – Jasper
我不知道,看看那個代碼中有多少個jQuery選擇器,比如5個。這是通過DOM解析5次以找到這些項目。我更新了我的,它只有1個選擇器,然後重新使用該對象。 – gfrobenius