所有其他答案(截至 2020 年 10 月)都集中在将填充添加到 .content DIV使其大于所需的 70% 导致它被推到 .sidebar DIV下然后尝试使DIV大小为70% 包括填充物。最简单的答案是不填充 .content DIV(因此它保持在 .container DIV的 70% ),而是填充其中的P。如果没有宽度规范,内部P是DIV的 100%,包括填充,因此P的文本将相应地压缩(到 .content DIV的 100% - 每边 10px)。所以改变
.content {
background-color: YELLOW;
float: left;
width: 70%;
padding: 10px;}
到
.content {
background-color: YELLOW;
float: left;
width: 70%;}
.content p {
padding: 10px;}
或者,添加box-sizing: border-box
到 .content 样式会更改大小计算以包括填充,但这是 CSS3,而在早期版本中将填充移动到P作品中。(有人还在用吗?)
经过测试,我只有一个(修辞)问题。为什么浮动两个DIV?如果您只浮动 .sidebar DIV,则 .content DIV中的额外文本将在其下方流动(宽度现在从 .container DIV的左边缘开始)。通过浮动两者, .content DIV中的额外文本保持在右侧,在 .sidebar DIV下留下一个空白区域(如果它比 .content DIV少)。我认为这是意图,但这与使用 2 列表所产生的效果完全相同,
<html>
<head>
<style>
.table_container {
width: 100%;
max-width: 960px;
background-color: RED;}
.table_sidebar {
background-color: GREEN;
width: 30%;}
.table_content {
background-color: YELLOW;
width: 70%; /* unnecessary */
padding : 10px;}
</style>
</head>
<body>
<table class="table_container">
<tr>
<td class="table_sidebar">text in sidebar</td>
<td class="table_content">text in content</td>
</tr>
</table>
</body>
</html>
这确实与原始(浮动DIV)解决方案略有不同。
- 每个单元格周围都有一个微小的间隙。
- 侧边栏与内容高度相同。
- 该表格仅与其内容一样高(可能小于指定的 200 像素)。
- TD的内容没有上边距或下边距(DIV中P的默认 CSS )。
这些可以固定如下:
- 添加
border-spacing:0
到.table_container
and (对于旧版浏览器)cellspacing="0"
作为TABLE的属性。
- 添加
rowspan="2"
到内容TD ,在侧边栏TD下方添加一个空的TD并通过添加到强制侧边栏TD尽可能低。height:1px
.table_sidebar
- 将表格包含在所需高度的DIV中。
- 在TD中添加具有明确定义的上下边距的P元素( TD中P的默认 CSS显然没有边距)。
<html>
<head>
<style>
.container {
max-width: 960px;
background-color: RED;
height: 200px;}
.table_container {
width: 100%;
background-color: RED;
border-spacing: 0;}
.table_sidebar {
background-color: GREEN;
width: 30%;
height: 1px;}
.table_content {
background-color: YELLOW;
/* width: 70%; still unnecessary */
padding : 10px;}
td p {
margin: 1em 0;}
</style>
</head>
<body>
<div class="container">
<table class="table_container" cellspacing="0">
<tr>
<td class="table_sidebar"><p>text in sidebar</p></td>
<td rowspan="2" class="table_content"><p>text in content</p></td>
</tr>
<tr><td></td></tr>
</table>
</div>
</body>
</html>
虽然这两种方法产生相同的输出,但TABLE方法不太依赖于获得恰到好处的大小。