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

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


当前回答

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

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

其他回答

从…起https://www.w3schools.com/css/css_boxmodel.asp

不同部分的说明:内容-框的内容,其中显示文本和图像填充-清除内容周围的区域。填充物是透明的边框-围绕填充和内容的边框边距-清除边界外的区域。边距是透明的

实时示例(通过更改值进行模拟):https://www.w3schools.com/css/tryit.asp?filename=trycss_boxmodel

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

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

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>

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

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

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

这里有一些HTML演示了填充和边距如何影响可点击性和背景填充。一个对象会收到对其填充的点击,但对对象空白区域的点击会转到其父对象。

$(“.other”).click(函数(e){console.log(“外部”);e.停止传播();});$(“.intern”).click(函数(e){console.log(“内部”);e.停止传播();});.外部{填充:10px;背景:红色;}.内部{边距:10px;填充:10px;背景:蓝色;边框:纯白1px;}<script src=“http://code.jquery.com/jquery-latest.js“></script><div class=“outer”><div class=“inner”style=“位置:相对;高度:0px;宽度:0px”></div></div>