使列与高度相等 - 使用嵌套

时间:2011-06-09 01:16:03

标签: jquery css

我的设计使用了两个外部列,并且在标题部分的一个外部列中,以及下面的两个列中,如下所示:

**************************
*          header        *
**************************
|                |       |
|                |       |
|      out1      | out2  |
|                |       |
|                |       |
|                |       |
**************************
*          footer        *
**************************


**************************
*          header        *
**************************
|     title      |       |
|________________|       |
|          |     |       |
|          |     |       |
|    in1   | in2 |       |
|          |     |       |
|          |     |       |
|          |     |       |
**************************
*          footer        *
**************************

现在,有些列具有边框,因此out2具有左侧边框,而in1具有右侧边框。整个页面都有一个微弱的大背景拼贴图像。

我正在尝试使用jquery使列具有相同的高度,因此列边框看起来相同。

我采用的方法是使外柱的高度相同,然后尝试使内柱的高度相同,并尝试使它们一直伸展到它们的底部。 in1容器(在out2高于out1的情况下)

在棘手的情况下,out1中的标题部分需要在计算中计算。

out1& out2包含在一个带有layout类的div中,以便于选择器查询和in1,in2& title被包含在具有类layoutnested的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,但是文档中的边框和背景图像的组合使得它不可能因为内部标题部分(人造列背景不应该显示在该区域内,但我仍然应该看到到页面背景)

您是否有任何聪明的想法可以使这更简单,或者您是否可以提供一些有关偶然错误计算的原因的见解?

由于

1 个答案:

答案 0 :(得分:2)

一个appraoch可能是将三列包含在包含元素中并忽略外部列。您的标题将位于三列之上,您可以指定宽度以匹配三列中的前两列。

然后,您可以对thrid列应用负边距,使其与页面标题对齐。这将允许您使用背景图像作为边框,而不必使用jquery。