多级水平/垂直"堆叠面板"在HTML中

时间:2013-03-27 14:55:49

标签: css layout html

我需要在HTML中呈现任意内容(表单元素,文本,图像)。布局方面,XAML的“堆栈面板”的概念接近我正在寻找的。我希望垂直布局的一些内容,以及一些水平放置的内容。所以,我希望HTML看起来像这样:

<div class="stack-vert">
    <div class="stack-vert">
        <div class="content">Vert 1</div>
        <div class="content">Vert 2</div>
    </div>
    <div class="stack-horz">
        <div class="content" style="width: 50px; height: 75px;">Horz 1</div>
        <div class="content" style="width: 50px; height: 50px;">Horz 2</div>
        <div class="content" style="width: 100px; height: 200px;">Horz 3</div>
        <div class="stack-vert">
            <div class="content">Horz 4, Vert 1</div>
            <div class="content">Horz 4, Vert 2</div>
        </div>
    </div>          
    <div class="stack-vert">
        <div class="content">Vert 3</div>
        <div class="content">Vert 4</div>
    </div>
</div>

硬编码的宽度和高度就是模拟不同尺寸的内容。我有正确布局一级水平,垂直的CSS:

DIV.stack-vert
{
    border: solid thick red;
}

DIV.stack-horz
{
    border: solid thick blue;
}

DIV.content
{
    padding: 5px;
    background-color: grey;
    margin: 5px;

}

DIV.stack-horz DIV.content
{
    display: inline-block;
}

此HTML和CSS呈现如下:

enter image description here

正如你所看到的,我希望实现的是“Horz 4,Vert 1”和“Horz 4,Vert 2”渲染到“Horz 3”的右侧,但是在垂直堆叠中。但是,这不会发生,因为块的堆栈顶部显示。

如何使用HTML / CSS以及任意深度的容器实现“堆栈面板”,例如任意内容部分的布局?

注意:理想情况下,我想使用“原始”HTML / CSS来解决这个问题,但我会考虑基于框架的解决方案,例如使用jQuery。

编辑#1:@ Aequanox的答案很接近,但它不支持IE 9. IE 9支持是必不可少的,因为我的大多数用户都在浏览器上(它是一个内部应用程序)。

1 个答案:

答案 0 :(得分:5)

你可以用这种方式改变CSS

DIV.stack-vert
{
    border: solid thick red;
    overflow:hidden;
}

DIV.stack-horz
{
    border: solid thick blue;
    overflow:hidden;
}

DIV.content
{
    padding: 5px;
    background-color: grey;
    margin: 5px;

}

DIV.stack-horz > DIV.content
{
    float:left;
}

请在此处查看示例:http://jsfiddle.net/3e6AY/