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

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


当前回答

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

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

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

其他回答

关于边距的问题是,您不必担心元素的宽度。

就像当你给出一些{padding:10px;}时,你必须将元素的宽度减少20px,以保持“适合”,而不干扰周围的其他元素。

因此,我通常从使用填充来“填充”所有内容开始,然后使用边距进行微调。

另一点需要注意的是,不同浏览器上的填充更为一致,IE对负边距的处理也不太好。

TL;DR:默认情况下,我在任何地方都使用边距,除非我有边框或背景,并且希望增加可见框内的空间。

对我来说,填充和边距之间的最大区别是垂直边距会自动折叠,而填充不会。

考虑两个元素,一个在另一个之上,每个元素的填充为1米。此填充被视为元素的一部分,并始终保留。

因此,您将以第一个元素的内容结尾,然后是第一个元素填充,然后是第二个元素的填充,最后是第二元素的内容。

因此,这两种元素的含量最终将相距2米。

现在用1毫米的边距替换填充。边距被认为在元素之外,相邻项目的边距将重叠。

因此,在本例中,您将得到第一个元素的内容,然后是1em的组合边距,然后是第二个元素的属性。因此,这两种元素的含量仅相差1米。

当你知道你想说一个元素周围有1em的间距,而不管它旁边是什么元素时,这会非常有用。

另外两个大的区别是,填充包括在点击区域和背景色/图像中,但不包括边距。

div.box>div{height:50px;width:50px,border:1px纯黑;text-align:center;}div.padding>div{padding-top:20px;}div.margin>div{margin-top:20px;}<h3>默认值</h3><div class=“box”><div>A</div><div>B</div><div>C</div></div><h3>顶部填充:20px</h3><div class=“box padding”><div>A</div><div>B</div><div>C</div></div><h3>页边空白:20px</h3><div class=“box margin”><div>A</div><div>B</div><div>C</div></div>

保证金与衬垫:

元素中使用边距来创建该元素和页面其他元素之间的距离。其中填充用于在元素的内容和边框之间创建距离。边距不是元素的一部分,而填充是元素的一。

请参阅下面从边距与填充-CSS财产中提取的图像

边缘

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

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

衬料

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

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

高级边距与填充说明

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

使用填充时有两个例外:

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

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

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