几乎总是box-sizing: border-box
可以替换诸如calc(100% - 500px)
用于布局的计算规则。
例如:
如果我有以下标记:
<div class="sideBar">sideBar</div>
<div class="content">content</div>
而不是这样做:(假设侧边栏是 300px 宽)
.content {
width: calc(100% - 300px);
}
做这个:
.sideBar {
position: absolute;
top:0;
left:0;
width: 300px;
}
.content {
padding-left: 300px;
width: 100%;
-moz-box-sizing: border-box;
box-sizing: border-box;
}
* {
margin: 0;
padding: 0;
}
html,
body,
div {
height: 100%;
}
.sideBar {
position: absolute;
top: 0;
left: 0;
width: 300px;
background: orange;
}
.content {
padding-left: 300px;
width: 100%;
-moz-box-sizing: border-box;
box-sizing: border-box;
background: wheat;
}
<div class="sideBar">sideBar</div>
<div class="content">content</div>
PS:我不会在 IE 5.5 中工作(哈哈哈),但它可以在 IE8+、所有移动设备和所有现代浏览器(caniuse)中工作
宽度演示
高度演示
我刚刚从 Paul Irish 的博客中找到了这篇文章,他还展示了 box-sizing 作为简单 calc() 表达式的可能替代方案:(粗体是我的)
我最喜欢的边界框很好解决的用例之一是列。我可能想用 50% 或 20% 的列来划分我的网格,但想通过 px 或 em 添加填充。如果没有 CSS 即将推出的 calc() ,这是不可能的……除非你使用 border-box。
注意:上述技术确实看起来与相应的 calc() 语句相同。不过还是有区别的。当使用 calc() 规则时,内容 div 的宽度值实际上是100% - width of fixed div
,但是使用上述技术,内容 div 的实际宽度是完整的 100% 宽度,但它具有“填充”的外观剩余的宽度。(这可能足以满足大多数人的需求)
也就是说,如果内容 div 的宽度实际上很重要100% - fixed div width
, 那么可以使用一种不同的技术 - 它利用块格式化上下文 - 可以使用(有关血腥细节,请参见此处和此处):
1)浮动固定宽度的div
2)设置overflow:hidden
或overflow:auto
在内容div上