我看到很多人提到在CSS中不应该在同一个元素上同时使用宽度、内边距和外边距。为什么呢?
我从未遇到过使用宽度、内边距和/或外边距同时使用会引起问题的情况。
只要你有一个有效的 DOCTYPE 并且不处于 Quirks 模式中,你将拥有可预测的盒模型,因此应该根据需要选择使用 margin/padding 来表示你想要做的事情。
注意: margin 应用于边框之外,padding 应用于边框之内。 Width 指容器的内部宽度,总宽度 = margin+border+padding+width(记住前三个是左右两侧都要加)。
#content {
width: 100%;
padding: 0 10px;
}
这在(明智但不正确的)IE模型中有效,但在符合标准的浏览器中,您的div将占用100%+ 20px的宽度,这是不好的。解决方案是使用另一个“内部”容器。
<div id="content">
<div class="inner">
content here.
</div>
</div>
#content {
width: 100%;
}
#content .inner {
padding: 0 10px;
}
虽然有额外的标记有点烦人,但从长远来看,它可以让很多事情变得更容易。
我可以想到两个原因:
1)IE的旧“盒子模型”非常薄弱,所以当您拥有一个样式为{width: 300px; padding: 30px; margin: 20px;}的元素时,它的轮廓可能实际上不符合预期的400px(300像素大小,加上2个30像素的填充,加上2个20像素的边距)。我认为它的实际宽度将是340,因为它会将填充项合并到宽度计算中。
这就带我们来到第二个原因...
2)有些人会觉得这些计算有点令人困惑。
话虽如此,我个人使用宽度以及填充和边距,并没有任何问题。如果您在使用填充/边距时限制自己不使用宽度,那意味着您的代码中会有很多非语义化的垃圾。这确实意味着您必须了解各种浏览器对元素的处理方式,但这就是为什么我们需要进行浏览器测试的原因。