首页 > 代码库 > html 的边距合并问题
html 的边距合并问题
1.假设有元素A,其父容器为Father 垂直间距的合并
当父容器Father没有定义边框和padding时,元素A设置margin-top时不会出现A对Father的margin现象,反而是出现了Father对Father的父容器的margin-top,这就是边距的合并,相当于Father没有界限,而其儿子A又要margin-top一下,所以就变成了A的Father对A Father的Father的margin-top.
同样的可以扩展到多级的嵌套上,最低层的元素希望有margin-top ,就需要直到其父类容器有边界(padding or border)为止(最顶层就是body的窗口了),所以表现是一级一级的往上合并.
看例子:
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <title> New Document </title> 5 <style> 6 *{ 7 margin:0px; 8 padding:0px; 9 }10 #d1{11 width:800px;12 height:800px;13 background-color:red;14 }15 #d2{16 width:400px;17 height:400px;18 background:gray;19 }20 #d3{21 width:100px;22 height:100px;23 margin:100px;24 background-color:green;25 }26 </style>27 </head>28 <body> 29 <div id="d1">30 <div id="d2">31 <div id="d3"></div>32 </div>33 </div>34 </body>35 </html>
這里d3设置了margin-top:100px
所以显示效果如下,蓝色块d3本来是要对于灰色块d2的margin-top的,但是d1,d2都没有border和padding,所长直接变成了d1对于的窗口的margin-top了.
下面稍微在d2的样式上加个padding的效果后者?碐边框 border:1px dotted;
1 #d2{2 width:400px;3 height:400px;4 background:gray;5 padding:1px;6 }
在d1块中加padding或者border也能,只是变成了d2对d1的margin-top了
2.同级元素中的垂直间距合并
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 2 <html> 3 <head> 4 <title> New Document </title> 5 <style> 6 *{ 7 margin:0px; 8 padding:0px; 9 }10 #d1{11 width:200px;12 height:200px;13 background-color:red;14 margin:20px;15 }16 #d2{17 width:200px;18 height:200px;19 margin-top:20px;20 background:gray;21 }22 </style>23 </head>24 <body> 25 <div id="d1"></div>26 <div id="d2"></div>27 </body>28 </html>
本来是想d2块是margin-top:20px的,同时d1块有margin-bottom:20px,这样算起来d1,d2之间应该是有40px的,但是‘它‘把他们部分间距吃了..只取其中边距大的作为两个实际的间距.事实上p标签就是这样工作的,每个段落之间的间距不会很大的...
3.没有设置border或者padding的空容器,其上下margin也会合并在一起....和第1中类似
参考文章 http://www.w3school.com.cn/css/css_margin_collapsing.asp
html 的边距合并问题