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

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


当前回答

高级边距与填充说明

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

使用填充时有两个例外:

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

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

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

其他回答

高级边距与填充说明

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

使用填充时有两个例外:

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

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

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

边距会清除元素周围的区域(边界外),但填充会清除元素内容周围(边界内)的区域。

这意味着您的元素不知道其外部边距,因此如果您正在开发动态web控件,我建议您尽可能使用填充与边距。

请注意,有时您必须使用保证金。

边距位于块元素的外侧,而填充位于内侧。

使用边距将块与块外的东西分开使用填充将内容移离块的边缘。

首先,让我们看看有什么不同,以及每个责任是什么:

1) 保证金CSS边距财产用于在元素周围生成空间。边距财产设置了边境使用CSS,您可以完全控制边距。有用于设置元素每边边距的CSS财产(顶部、右侧、底部和左侧)。


2) 衬垫CSS填充财产用于在内容周围生成空间。填充将清除内容(边框内)周围的区域元素。使用CSS,您可以完全控制填充。那里是CSS财产,用于设置元素每一侧的填充(顶部、右侧、底部和左侧)。

所以简单地说,边距是元素周围的空间,而填充是元素内容周围的空间。

这张来自codemancers的图片显示了边距和边框是如何结合的,以及边框和内容框是如何使其不同的。

此外,他们对每个部分的定义如下:

内容-这定义了文本、图像或其他元素等实际内容所在的框的内容区域。填充-这将清除其包含框中的主要内容。边框-它包围内容和填充。边距-此区域定义一个透明空间,将其与其他元素分隔开。

需要注意的一点是,当自动折叠的边距让你烦恼时(并且你没有在元素上使用背景色),使用填充更容易。