0
我已閱讀所有關於此問題的stackoverflow帖子,但所有的寬度中都有固定數量的列或div(除非我錯過了它)。使用javascript將div設置爲相同高度
我在設計一家網上商店。每個產品都呈現在產品瓷磚上。每個產品瓷磚浮動(左側)。在瀏覽器窗口最寬處,每行有三個產品拼貼。將瀏覽器大小調整爲680px時,每行只有兩個產品拼貼,而每行只有一個400px。
如果一個圖塊包含佔用兩行的產品名稱,則會增加產品圖塊的高度。因此,它下面的瓷磚不會漂浮。他們會卡在上面的較高產品瓷磚的右下角。
我寫了一些javascript/jquery來檢查最高瓷磚,然後將所有瓷磚設置爲相同的高度。這適用於加載(eventlistener),但由於某種原因而不是調整大小。
有人可以解釋爲什麼這個功能不能調整大小?如果有人知道一種方法,只將所有產品拼塊設置爲與該行中的最高產品拼塊相同的高度,而將所有產品拼塊設置爲最高產品拼塊,那將真正成爲我的一天。 (不要忘記一排瓷磚的數量取決於窗口寬度)
這是產品圖塊的html。
<div class="productTile">
<!-- stuff goes here -->
</div>
這是產品圖塊的CSS。
.productTile
{
background:grey;
width:33%;
float:left;
}
@media only screen and (max-width:680px)
{
.productTile
{
width:50%;
}
}
@media only screen and (max-width:400px)
{
.productTile
{
width:100%;
}
}
這是jQuery的
function setProdTiles()
{
var prodTileH = 0; // set variable to catch largest height
$(".productTile").each(function(){
H = $(this).outerHeight(); // height current productTile
if (H > prodTileH) // get highest
{
prodTileH = H;
}
});
$(".productTile").outerHeight(prodTileH);
}
window.addEventListener("load", setProdTiles);
window.addEventListener("resize", setProdTiles);
預先感謝您。
我會在HTML中使用'table'。所有行都是相同的高度,自動調整到每個單元格中內容的最大高度。沒有JavaScript!與你正在做的事情相比,開銷要小得多。 – forrestmid
的金額不是每
你的意思是你不知道你會返回多少產品,但是你希望它有三個元素的長度? – forrestmid
回答
問題的癥結在於事實上,在您事先設定明確身高之後,您正試圖重新計算您的元素的外部高度。這意味着您的第一次執行
setProdTiles()
方法時,元素的高度將被固定並且不能被更改,因爲隨後所有相同方法的觸發將只讀取設置的高度。你想要的是讓瀏覽器重新計算每個產品牌的高度,通過設置
height: auto
,試圖獲取新的瀏覽器計算outerHeight前:來源
2017-09-02 18:31:26 Terry
特里現貨。非常感謝。我沒有探討這個,雖然我想過,因爲我不明白爲什麼它可能會有所不同,觸發負載或調整大小的功能。 – Kobbe
我建議你使用CSS網格帶有媒體查詢的系統在您縮放時更改佈局。
而在HTML:
該網格將自動調整每行相同的高度,它的最高的框,列也將自動調整。查看this fiddle查看互動演示。
來源
2017-09-02 18:32:21 forrestmid
謝謝forrestmid。你做了我的一天,因爲你有一個解決方案,只將一行中的每個div的大小設置爲該行中的最高div,而將所有div設置爲最高div的相同高度。我從你的回答以及特里的回答中學到了很多東西。謝謝一堆! – Kobbe
相關問題