我需要在 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 呈现如下:
如您所见,我希望实现的是“Horz 4,Vert 1”和“Horz 4,Vert 2”渲染到“Horz 3”的右侧,但在垂直堆栈中。但是,这并没有发生,因为 block 的 stack-vert 显示。
如何使用 HTML / CSS 实现“堆栈面板”,例如任意内容部分的布局,以及任意深度的容器?
注意:理想情况下,我想使用“原始”HTML / CSS 来解决这个问题,但我会考虑使用基于框架的解决方案,例如使用 jQuery。
编辑#1:@Aequanox 的答案很接近,但它不支持 IE 9。IE 9 支持是必不可少的,因为我的大多数用户都在那个浏览器上(它是一个内部应用程序)。