我正在尝试在jquery mobile中使用内置的ui-grid进行3列布局。
问题是ui-blocks内部的ui-bars有不同的高度。我希望所有3列的高度与最高列的高度相同。
有谁知道这个问题的简单解决方案?我想用CSS解决它,但我没有管理它。 JS真的是解决这个问题的唯一方法吗?
的jsfiddle: http://jsfiddle.net/zHbuC/466/
代码:
<div data-role="page" id="station" class="type-home">
<div data-role="header"><h1>Header Page 1</h1></div>
<div data-role="content" data-theme="b">
<div class="ui-grid-b" style="text-align:center">
<div class="ui-block-a">
<div class="ui-bar ui-bar-c">A</div>
</div>
<div class="ui-block-b">
<div class="ui-bar ui-bar-c">B</div>
</div>
<div class="ui-block-c">
<div class="ui-bar ui-bar-c">
<p>B with alot of text</p>
<p>with lots of lines</p>
<p>another line</p>
</div>
</div>
</div>
</div>
<div data-role="footer"><h4>Footer</h4></div>
</div>
答案 0 :(得分:8)
根据我的经验,唯一的“可靠”解决方案是使用简单的jquery高度比较。它只需要几行。
var tallest = 0;
$('.ui-grid-b > div').each(function() {
var thisHeight = $(this).height();
if(thisHeight > tallest) {
tallest = thisHeight;
}
});
$('.ui-grid-b .ui-bar').height(tallest);
或者将其作为一项功能,请参阅http://www.cssnewbie.com/equal-height-columns-with-jquery/
另一方面,如果你不想使用CSS,那么使用盒子模型会有一个错误/不可行的方法。 请参阅:http://www.css3.info/introducing-the-flexible-box-layout-module/
否则有一些HTML / CSS黑客可以使用,但会产生“丑陋”的代码。 请参阅:http://buildinternet.com/2009/07/four-methods-to-create-equal-height-columns/
jQuery示例: http://jsfiddle.net/zHbuC/468/
一个缩小的例子(仅在内容始终位于.ui-bar
)
var tallest = 0;
$('.ui-grid-b .ui-bar').each(function() {
if($(this).height() > tallest) {tallest = $(this).height();}
}).height(tallest);
答案 1 :(得分:1)
我遇到了同样的问题 - 我的解决方案可能比上面的解决方案更通用 - 应该适用于任何网格。
http://jsfiddle.net/zHbuC/816/
网格中的网格存在问题 - 这是我的jsFiddle
您可以更改网格中的内容,高度会调整大小。
这是我的实用程序类来实现这一点 - 它可能有点过分:
var ekJqm = {};
ekJqm.utilities = {
fixGrids: function (container) {
$("[class^=ui-block-]").each(function () {
$(this).removeAttr("style");
$(">div", this).removeAttr("style");
});
var fixBlocks = function (blocks) {
blocks = $(blocks);
var heights = [];
blocks.each(function () {
if ($.inArray($(this).height(), heights) == -1)
heights.push($(this).height());
});
if (heights.length == 1)
return;
var maxHeight = 0;
blocks.each(function () {
if ($(this).height() > maxHeight)
maxHeight = $(this).height();
});
blocks.each(function () {
$(this).height(maxHeight);
var adjust = $(">div", this).outerHeight() - $(">div", this).height();
$(">div", this).height(maxHeight - adjust);
});
};
$("[class^=ui-grid-]", container).each(function () {
var maxHeight = 0;
var blocks = $(">[class^=ui-block-]", this);
var set = [];
var tempSet = [];
blocks.each(function (index) {
var _class = $(this).attr("class");
if ($.inArray(_class, tempSet) >= 0) {
fixBlocks(set);
tempSet = [];
set = [];
}
set.push(this);
tempSet.push(_class);
if (index == blocks.length - 1)
fixBlocks(set);
});
});
}
};