我正在寻找一些方法来在html和css中显示这种类型的网格。
我想伸出较小的列以匹配较高的列。这可能吗?我尝试过使用一些javascript的解决方案,但对解决方案并不满意。有一些复杂性,行数最多的列可能不是最高的。如果它们具有不同的内容量,那么这些框也可能是不同的高度。
我对这里使用的标记持开放态度,目前我并排使用两个列表,但是表或其他任何东西都没问题。但是,仅使用rowspan似乎不会起作用,因为这只会给一个比其他框大得多的框。这似乎是一个常见的问题,那里有一个很好的解决方案吗?
答案 0 :(得分:1)
我认为你在这里坚持使用JS。我的方法是在列表中的元素上使用percent-height。
答案 1 :(得分:1)
我花了一段时间,但这里是小提琴和JS代码:
我的解决方案将考虑元素的关系大小并按比例拉伸它们。例如:占据50%空间的div在拉伸ul后仍然会占用50%。
(添加填充和边框会有问题。如果有解决方法,我也会感兴趣!)
JS:
$(function() {
var $allUl = $('ul');
setNewPercentages($allUl);
function getTallestUl($uls) {
var max = 0;
var $ulTallest;
$uls.each(function(i,e) {
console.log( $(this).height() > max);
if( $(this).height() > max) {
$ulTallest = $(this);
max = $(this).height();
}
});
return $ulTallest;
};
function adjustPercentages($ul) {
$ul.find('li').each( function(i,e) {
var $this = $(this)
, ulHeight = $ul.height()
, liHeight = $this.height()
, percentage = (liHeight / ulHeight * 100);
$this.css('height', percentage + '%');
});
};
function setNewPercentages($uls) {
var $tallest = getTallestUl($allUl).addClass('tallest');
var heightTallest = $tallest.height();
$uls.not('.tallest').each(function(i,e) {
adjustPercentages($(this));
$(this).css('height', heightTallest);
});
};
});
答案 2 :(得分:1)
这是一个jQuery解决方案:http://jsfiddle.net/hunter/sG39d/
当您在li
$(function() {
var $tallest = null;
var $ul = $("ul");
$("ul").each(function() {
if ($tallest == null || $(this).height() > $tallest.height()) {
$tallest = $(this);
}
});
var height = $tallest.height();
$ul.not($tallest).each(function() {
var update = height / $(this).find("li").length;
$(this).find("li").css("height", update);
});
});
答案 3 :(得分:1)
基于你的小提琴:
var heights=[], cnt=0, cols=[];
$('ul').each(function () {
cols.push(this);
var h = 0;
$(this).find('li').each(function() {
h += $(this).innerHeight();
});
heights.push(h);
cnt++;
});
var max = Math.max.apply(null, heights);
for(var i=0; i<cols.length; i++) {
var delta = Math.floor((max - heights[i]) / $(cols[i]).find('li').length);
$(cols[i]).find('li').each(function() {
$(this).css('height', $(this).innerHeight() + delta);
});
}
答案 4 :(得分:0)
不幸的是,要取得成功并不容易...... 试试这个:faux columns
答案 5 :(得分:0)
这个怎么样:
<table>
<tr>
<td>
<div>Item1</div>
<div>Item2</div>
<div>Item3</div>
</td>
<td>
<div>Item1</div>
<div>Item2</div>
<div>Item3</div>
<div>Item4</div>
<div>Item5</div>
</td>
</tr>
</table>
这两个列的高度都是这样的。较短列中的项目不会拉伸以填充空白。我认为你必须自己使用Javascript。
答案 6 :(得分:0)
可能这可以工作
<table border="1" >
<tr>
<td>
<table border="0">
<tr><td>data</td></tr>
<tr><td>data</td></tr>
<tr><td>data</td></tr>
<tr><td>data</td></tr>
<tr><td>data</td></tr>
</table>
</td>
<td>
<table border="0" cellpadding="5">
<tr><td>data</td></tr>
<tr><td>data</td></tr>
<tr><td>data</td></tr>
<tr><td>data</td></tr>
</table>
</td>
</tr>
</table>