我有一个设计使用两个外部列,并在标题部分的一个外部列和下面的两个列,如下所示:
**************************
* header *
**************************
| | |
| | |
| out1 | out2 |
| | |
| | |
| | |
**************************
* footer *
**************************
**************************
* header *
**************************
| title | |
|________________| |
| | | |
| | | |
| in1 | in2 | |
| | | |
| | | |
| | | |
**************************
* footer *
**************************
现在,一些列具有边框,因此out2具有左侧边框,而in1具有右侧边框.整个页面都有一个微弱的大背景拼贴图像.
我正在尝试使用jquery使列具有相同的高度,因此列边框看起来相同.
我的方法是让外柱的高度相同,然后尝试使内柱的高度相同,并尝试使它们一直伸展到它们的in1容器的底部(在out2高于out1的情况下)
如果它变得棘手,那么out1中的标题部分需要在计算中加以考虑.
out1& out2包含在一个div中,它有一个布局类,便于选择查询和in1,in2& title包含在带有类布局和嵌套的div中(为了便于选择和嵌套和外部之间的区分).
每个布局容器也有一个div.clear来抵消浮动列对高度的影响.
这是我在就绪处理程序上运行的代码:
var layouts = $('.layout').get();
// sort to have .nested last
layouts.sort(function(a,b){
return $(a).hasClass('nested');
});
$(layouts).each(function(){
var $this = $(this);
var container_height = $this.height();
if ($this.hasClass('nested'))
{
var parent = $this.parent();
var heading = $this.siblings('h1');
var parent_h = parent.innerHeight();
container_height = parent_h-heading.innerHeight() - 9; // (i'm not sure why I need -9 here, just go with it, it's not critical to the problem)
}
var columns = $this.find('> div').not('.clear');
columns.each(function(){
var padding = $(this).innerHeight() - $(this).height();
$(this).height(container_height - padding);
});
});
它主要是有效的.在safari(mac * ipad)上,我发现在运行该代码之前设置延迟是有帮助的(即使它在就绪事件中触发)但是存在随机不一致的情况,其中列高度计算错误太小,并导致布局流动在页脚上方.
我想过使用Faux Columns,但是文档上的边框和背景图像的组合使得它不可能因为内部标题部分(人造列背景不应该在该区域内显示,但我仍然应该看到页面背景)
您是否有任何聪明的想法可以使这更简单,或者您是否可以提供一些有关偶然错误计算的原因的见解?
谢谢
最佳答案 一个appraoch可能是将三列包含在包含元素中并忽略外部列.您的标题将位于三列之上,您可以指定宽度以匹配三个列的前两列.
然后,您可以对thrid列应用负边距,使其与页面标题对齐.这将允许您使用背景图像作为边框,而不必使用jquery排序.