【问题标题】:CSS: two floating div columns with equal height, with vertically split right divCSS:两个高度相等的浮动 div 列,垂直拆分右 div
【发布时间】:2011-04-16 00:17:11
【问题描述】:

我正在尝试完成如下布局:

两个 float:left div 并排放置,每个 div 的宽度为 45%。在右侧,div 包含两个子部分 - 一个与 div 的底部对齐,一个与顶部对齐。

如果右边的部分足够长,它们当然会在中间相遇,然后开始推出包含 div 的高度:

我一直在玩假列、clear:all、overflow:hidden、bottom:0 以及我能想到的任何其他技巧,但我无法让这种行为发挥作用。

真正的问题似乎源于左右 div 中较小的一个没有扩展到容器的高度,容器的高度使用溢出:隐藏来占据两者中较大的高度。有什么想法吗?

到目前为止我所拥有的:

<div style="overflow:hidden; clear:both">
    <div id="column1" style="float: left; width:45%">
    <div id="column2" style="float: left; width:45%">
        <div style="float: left; top: 0">Content Here should sit up top</div>
        <div style="float: left; bottom: 0">Content Here should sit on bottom</div>
    </div>
</div>

结果就是这样,如果不在某处使用固定高度,我无法将顶部和底部分开:

感谢大家观看!

【问题讨论】:

    标签: css css-float


    【解决方案1】:

    我有 CSS 解决方案,因为 JS 不可行..

    示例:here

    所有“列”都被inline blocks强制不换行,这样您就可以将它们全部垂直对齐,然后第三个“列”(右下角)通过负边距插入到位

    【讨论】:

    • 哦,如此接近,只是当右侧列表的高度总和大于左侧列表时,内容会丢失,而不是两列都变高。我想这是因为最后一个以负边距插入的方式。
    • 是的。你猜对了 ;).. 我现在正在看,内容的最小高度可能会有所帮助,这两个右框的高度可能非常稳定还是高于内容?
    • 两者都是自动生成的属于特定类别的文章列表。我预计这两者的增长速度与左边的增长速度大致相同,但我也预计每个列表长度会不时超过另一个。
    • 好吧,把它留给我吧..去做其他事情,希望有一个奇迹般的解决方案,呵呵..正如其他人所说,这不是一个容易的问题,但我需要为那个缺失的部分绞尽脑汁,如果有的话 ;) 对 IE 而言,它是非表格单元支持,对 css 而言,因为尚未准备好网格布局模块!
    • 即使右侧 div 的组合高度超过左侧 div 的高度会破坏布局,但它与正确答案非常接近,我将对其进行检查。至少在找到修复之前。
    【解决方案2】:

    您可以放弃浮动并尝试使用 display:table-cell(和 tabletable-row...),但这会限制 IE8 及更高版本的浏览器支持。

    但如果你确实让它像那样工作,你可以只使用 javascript 来让 IE6 / IE7 玩得很好(如果你需要它们......)。

    【讨论】:

    • 很遗憾,很大一部分 wiki 用户仍在使用 IE6 和 IE7,而且这是一个主索引页面,所以我将无法使用这个高级功能。 Javascript 在这个 wiki 上也是不行的。我可能不得不放弃 div(在手机的薄屏幕上很好地分解为单个文件)并使用简单的表格布局。
    • @Alain 如果 IE6 是必需品,而 javascript 是不行的话,恐怕 css 能为你做的不多。
    【解决方案3】:

    如果你试图用 CSS 自己来完成这件事,你会发疯的。

    如果您只需要支持现代浏览器,您可以使用display: table,它将为您提供传统表格的垂直对齐控制。

    否则,这对于 JS 来说确实是一项工作,如果您使用的是 jQuery 之类的东西,那么完成它是相当简单的。

    【讨论】:

    • 我疯了 :) 不幸的是,大部分 wiki 用户仍在使用 IE6 和 IE7,而且这是一个主索引页面,所以我将无法使用这个高级功能.
    • 这就是我推荐JS的原因。如果您必须处理 IE,这是更好的方法
    【解决方案4】:

    您需要使用 JavaScript,在 $(document).ready 中您可以设置 3 个变量,每个高度一个。在两个右边的之间添加一个额外的 div(让我们称之为扩展器),并根据其他三个的高度,更改这个 div(扩展器)的高度。

    请记住,var dos = $("#one").height(); 会为您提供 id ="one" 的 div 的高度

    要更改 div 高度,只需使用 $("#expansor").height(newHeight) ;

    'newHeight' 是第一个 div 高度减去右侧 2 个 div 的结果。

    【讨论】:

    • 太糟糕了。我会对这样一个简单的解决方案感到满意,但我正在一个 wiki 上生成一个页面,其中 Javascript 不可行。
    • 鉴于 Wiki 的限制,你不能使用 JavaScript,而且你必须支持 IE6,我强烈建议重新设计页面布局。不要与你的约束作斗争。适应他们。
    【解决方案5】:

    如前所述,在不使用大量 JavaScript 的情况下尝试在所有浏览器上全面运行此功能会发疯。

    我的解决方案是结合使用绝对定位和相对定位以及最小/最大高度方案。您还将使用更多嵌套的 DIV,确保使用虚拟的“clear:both”DIV 来确保正确推送内容。

    例子:

    <!-- Clear CSS -->
    .clear {
        clear:both;
        height:0;
        line-height:0;
        margin:0;
        padding:0;
        font-size:0;
        border:none;
    }
    <!-- End CSS -->
    
    <div id="container" style="width:400px;position:relative;">
        <div id="column-right" style="height:300px;width:195px;float:right;">
            <div id="block-top" style="position:absolute;top:0;height:145px;">
                <div class="content">
                    ...
                </div>
                <div class="clear">&nbsp;</div>
            </div>
            <div id="block-bottom" style="position:absolute;bottom:0;height:145px;">
                <div class="content">
                    ...
                </div>
                <div class="clear">&nbsp;</div>
            </div>
            <div class="clear">&nbsp;</div>
        </div>
        <div id="column-left" style="position:relative;height:300px;width:195px;float:left;">
            <div class="content">
                ...
            </div>
            <div class="clear">&nbsp;</div>
        </div>
        <div class="clear">&nbsp;</div>
    </div>
    

    【讨论】:

    • 如果你能把一个解决方案放在一起,我很想测试这样一个解决方案。我已经尝试了很多嵌套 div 和不同定位的组合,但还没有成功。
    • 您不需要大量的 javascript。几行 jQuery 就可以处理逻辑。
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多