CSS中的边距和填充有什么区别?在何种情况下:

两者都有效。只有保证金是合适的。只有填充是合适的。


当前回答

边缘

边距通常用于在元素本身及其周围之间创建空间。

例如,我在构建导航条时使用它,使其紧贴屏幕边缘,不会出现空白。

衬料

当我有一个元素在边框内时,我通常使用<div>或类似的东西,我想减小它的大小,但同时我想保持它周围其他元素之间的距离或边距。

简单地说,这是情境性的;这取决于你想做什么。

其他回答

高级边距与填充说明

使用填充来分隔元素中的内容是不合适的;您必须在子元素上使用margin。较旧的浏览器(如Internet Explorer)误解了框模型,除非它使用了在Internet Explorer 4中完美工作的边距。

使用填充时有两个例外:

它应用于不能包含任何子元素(如输入元素)的内联元素。您正在补偿一个非常复杂的浏览器错误,供应商*咳嗽*Mozilla*咳嗽*拒绝修复该错误,并且确信(在一定程度上,您与W3C和WHATWG编辑保持定期交流)您必须有一个有效的解决方案,该解决方案不会影响除您正在补偿的错误之外的任何其他问题的样式。

当你有一个带有填充的100%宽度元素时:50px;您可以有效地获得width:calc(100%+100px);。由于未将边距添加到宽度中,因此在子元素上使用边距而不是直接在元素上填充时,不会导致意外的布局问题。

因此,如果您不执行这两项操作之一,请不要向元素添加填充,而是向它的直接子/子元素添加填充以确保在所有浏览器中都能获得预期的行为。

边缘

边距通常用于在元素本身及其周围之间创建空间。

例如,我在构建导航条时使用它,使其紧贴屏幕边缘,不会出现空白。

衬料

当我有一个元素在边框内时,我通常使用<div>或类似的东西,我想减小它的大小,但同时我想保持它周围其他元素之间的距离或边距。

简单地说,这是情境性的;这取决于你想做什么。

了解边距和填充之间的区别很好。以下是一些区别:

边距是元素的外部空间,而填充是元素的内部空间。边距是元素边界外的空间,而填充是元素边界内的空间。Margin接受auto:bmargin:auto的值,但不能将padding设置为auto。提示:您可以使用此技巧使元素在其父对象内部居中(甚至垂直)。例如,请参见我的另一个答案。边距可以设置为任何数字,但填充必须为非负数。设置元素样式时,填充也会受到影响(例如背景色),但不会影响边距。

我总是使用这个原则:

这是Firefox中inspect元素特性的方框模型。它像洋葱一样工作:

你的内容在在中间。填充是指内容和标签边缘之间的空间在…内边界及其规格边距是标记周围的空格。

因此,更大的边距将在包含内容的框周围腾出更多空间。

较大的填充将增加内容和其所在的框之间的空间。

如果将框设置为特定值,则它们都不会增加或减小框的大小。

我所见过的最好的例子、图表,甚至是“自己试试看”的观点都在这里。

我认为下面的图表可以立即直观地理解两者的区别。

需要记住的一点是,符合标准的浏览器(IE怪癖是一个例外)只将内容部分渲染为给定的宽度,因此在布局计算中要注意这一点。还要注意的是,随着Bootstrap 3的支持,border box有点卷土重来。