请看看this jsFiddle并按下唯一的按钮来填充列表。正如你所看到的,DIV
列表中的元素被调整大小以填充包含的父元素。这段代码完全符合我想要做的事情,但我认为,对于这样一个看似简单的任务,我实现这个方法太复杂了。这里是算法的代码分配高度内部元素:使用CSS实现加权灵活布局
fill = function() {
//Loop through all elements once to get total weight
var totalWeight = 0;
var totalHeight = $("#container").height() - 15; //need a little extra empty space at the buttom
$(".list").each(function(i) {
totalWeight += parseInt($(this).attr('weight'));
totalHeight -= parseInt($(this).css('margin'));
});
//Loop though the element a second time to set the relative height
$(".list").each(function(i) {
var element = $(this);
element.css("height", (element.attr("weight")/totalWeight) * totalHeight);
});
}
我的问题是,我们可以做的最好?有没有其他的 - 希望更快或更优雅 - 通过合理的跨浏览器兼容性来实现此功能的方式?我只需要支持较新的Firefox,Chrome和Safari。我正在阅读关于弹性盒here并查看它的promising specs,但它看起来不像弹性盒可以在浏览器中一致地加权灵活布局。如果我错了,请给我一个简单的例子,说明如何实现这一点。
这种类型的加权灵活线性布局并不少见,例如它在Android SDK中可用作布局选项之一。相对于赋予它们的权重值,调整元素大小以填充其父容器的建议方法是什么?如果可能的话,纯粹的CSS解决方案将会非常棒。
Flexbox将是可用的。您可能必须为新旧样式编写一些重复规则,但它可行。 – Blender
我无法找到一个很好的例子,说明如何用flebox做到这一点。你能提供一个基于我上面的jsFiddle的flexbox解决方案吗? – Aras