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
相关问题