Html 具有两个可变高度列的布局
我正在尝试在我的网页中创建以下两列布局:Html 具有两个可变高度列的布局,html,css,tabular,Html,Css,Tabular,我正在尝试在我的网页中创建以下两列布局: +-------+---+ | | | | | | | A | B | | | | | | | | | | | +---+ | | | | | C | | | | +-------+---+ 具有以下特点: 左栏和右栏的宽度都是固定的 C的含量是固定的,所以C有一个固定的高度 A和B中的内容量可能不同(最终用户
+-------+---+
| | |
| | |
| A | B |
| | |
| | |
| | |
| +---+
| | |
| | C |
| | |
+-------+---+
具有以下特点:
大多数情况下,这是可行的。但是,由于A包含嵌入的YouTube视频,C包含嵌入的Google Maps部分,因此有很多动态内容正在进行调整,这有时会导致我的javascript代码使用错误的高度值,并扰乱布局过程。
此外,当你看到内容单元格被拉伸到正确的高度时,它看起来相当难看,即使如果它一直工作的话,我也能忍受 另一种选择是,我尝试使用一个表来进行此布局,因为它们内置了“保持所有列的高度相等”的行为。
这种方法的问题是,我必须使用“td rowspan=2”表示A,一旦我这样做,IE和Chrome就会忽略我在C上指定的任何固定高度,反而会使C过高 所以基本上我完全被困在如何实现这个(看似简单的)布局上。谁能给我指出正确的方向吗
我的目标是Chrome、FireFox和IE7+,但在IE7和IE8中,理想布局的合理近似是可以接受的。试试这个混合div as table。 我在Mac上,但我不能在IE上测试它,但我认为它会在IE上很好地工作 HTML:
在这里查看演示:好的,我正在工作,所以我现在只能这样做了,但它在IE7上运行得很好 前面有几句话。对于这个解决方案,我使用了表。现在使用表格并没有什么错——当您将它用于表格数据或在类似这样的罕见情况下。在这种情况下,必须使用基本css来解决这个问题。唯一的另一种方法是使用可能会疏远某些用户的技术(高级CSS)——最终,由您决定是否使用在每个人的浏览器中都不起作用的技术。如果您使用CSS3+,我肯定无法正常查看您的网站,因为我现在被IE7卡住了 我在IE7上测试了这个,效果很好。正如您所看到的,它也不是很重的代码 HTML 结果:
如您所见,此代码适用于两种情况:左列更大;或者,右栏更大。请发布您尝试过的代码。如果您放弃IE支持,请发布flexbox(IE不值得支持);-)请注意使用方框C绝对定位时的优美优雅。由于方框C的高度是固定的,我们将其高度作为表格单元格的填充,然后将方框C绝对显示在其填充的确切区域上。简言之,这实际上只是一个有2个单元格的2列表。我们“欺骗”眼睛认为它是3,但它不是。一个嵌套的表将是一个非常肮脏的黑客:)是的,这为我解决了它!我不得不做一个小的调整,因为您在td.right上使用了position:relative,但FF忽略了这一点,并默认将表作为C框的定位上下文。因此,我从td.right中删除了position:relative,并将C框相对于表进行了定位,现在它工作得很好。再次感谢!
<div id="table">
<div id="table-cell-left">
<div id="aid" class="row">A ID</div>
</div>
<div id="table-cell-right">
<div id="bid" class="row">B ID content <br />B ID content <br />B ID content <br />B ID content <br />B ID content <br />B ID content <br /></div>
<div id="cid" class="row">C ID</div>
</div>
</div>
#table{display:table;}
#table-cell-right,
#table-cell-left{display:table-cell;}
#table-cell-left{background:blue;}
#aid,#bid,#cid{width:150px}
#aid{height:100%;border:1px solid #ccc;}
#bid{height:auto;border:1px solid #000;background:red;}
#cid{height:20px;float:right;background:yellow}
<div id="cols">
<table>
<tbody>
<tr>
<td class="left"">A Box</td>
<td class="right">
<div>B Box</div>
<div>C Box</div>
</td>
</tr>
</tbody>
</table>
</div>
#cols table td {
width: 250px;
}
#cols table td.left {
background: #f1f1f1;
}
#cols table td.right {
padding: 0 0 250px 0;
background: #ccc;
position: relative;
}
#cols table td.right div + div {
position: absolute;
bottom: 0;
width: 250px;
height: 250px;
background: #000;
color: #fff;
}