我有一个用 jQuery 编写的函数,可以自动执行表的margin-bottom
or padding-bottom
(有条件地)。基本上,它消除了表格单元格边框向下推动页面的效果,保持垂直节奏完整。我相信我应该能够使用 Less 和 CSS,而不是使用 JS 来做到这一点。
条件(if 语句)基于表中的行数(因此边框,再加一个)。由于我的“幻数”是 24(24px 是垂直节奏单位),如果表格有 (0,11)∪(24,35)∪… 边框,函数会做margin-bottom
负数并将页面的其余部分向上拉. 但是,如果表格有 (12,23)∪(36,47)∪… 边界,它将添加到padding-bottom
,将页面的其余部分向下推到下一个垂直节奏单元。这一切都是在假设表格中每个水平边框为 1px 的情况下运行的。如果您可以概括该模式以适用于较厚的边框,则可以加分。
这是我在 jQuery 中的函数:
/*
Algorithm:
for each table:
take the number of rows (x)
add 12
mod 24
subtract 12
negate.
function notation: g(x) = -(f(x+12)-12) where f(x) = MOD(x,24)
function transformation: MOD(x,24) translated left 12 and down 12, then flipped over the x-axis.
if g(x) <= 0, then margin-bottom that number
else, padding-bottom that number.
*/
$('table').each(function () {
var n_rows = 0;
$(this).find('tr').each(function () {
n_rows++;
});
n_rows++; // once more for the last border
var btm = -(((n_rows + 12) % 24) - 12);
if (btm <= 0) {$(this).css('margin-bottom',btm);}
else {$(this).css('padding-bottom',btm);}
});
到目前为止,这是我的 Less 中的内容:
table {
counter-reset: nrows;
tr {
counter-increment: nrows;
}
counter-increment: nrows; // once more for the last border
// @btm: -(((nrows + 12) % 24) - 12);
// if (@btm <= 0) {
// margin-bottom: @btm;
// } else {
// padding-bottom: @btm;
// }
}
帮帮我?