外边距折叠

1.问题

外边距折叠的概念?具体的两种情况(父子,同级兄弟)

2.介绍

参考链接:margin重叠--外边距折叠的出现场合及解决方法

margin重叠--外边距折叠的出现场合及解决方法

行为定义

外边距折叠:块的上外边距(margin-top)下外边距(margin-bottom)有时合并(折叠)为单个边距,其大小为单个边距的最大值(或如果它们相等,则仅为其中一个),这种行为称为边距折叠

出现外边距折叠的两种情况

1.同级别块级元素之间:

当对于上下垂直的两个块级元素之间未设置浮动( ‘ float ’ 以及 ‘ position:absolute ’ )时

上方块级元素的margin-bottom与下方块级元素的margin-top就会发生合并:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="{CHARSET}">
		<title></title>
		<style type="text/css">
			/*上方的块级元素*/
			#box_one 
			{
				width: 200px;
				height: 200px;
				background-color: red;
				margin-bottom:200px ;
			}
			/*下方的块级元素*/
			#box_two
			{
				width: 200px;
				height: 200px;
				background-color: green;
				margin-top: 100px;
			}
		</style>
	</head>
	<body>
		<div id="box_one"></div>
		<div id="box_two"></div>
	</body>
</html>

代码执行效果如下:

对于这个例子理解为边界回合并的话,根据代码距离应该是300px,但由于外边距合并的行为,距离为200px,取margin的最大值,即id值为box_one的盒子的margin-bottom值

解决方法:

1.设置浮动, ‘ float ’ 以及 ‘ position:absolute ’

2.父子级别元素之间

块级元素的父子元素之间,对于子元素设置margin-top值,父元素不进行设置,会出现子元素的margin-top值击穿父元素的现象

<!DOCTYPE html>
<html>
	<head>
		<meta charset="{CHARSET}">
		<title></title>
		<style type="text/css">
			/*父元素的块级元素*/
			#box_one 
			{
				width: 200px;
				height: 200px;
				background-color: red;
			}
			/*子元素块级元素*/
			#box_two
			{
				width: 100px;
				height: 100px;
				background-color: green;
				margin-top: 100px;
			}
		</style>
	</head>
	<body>
		<div id="box_one">
			<div id="box_two"></div>
		</div>
	</body>
</html>

代码执行效果见下:

按照一般理解,子元素的margin-top会基于父元素出现外边距,但结果并不是这样,子元素的外边距margin-top会击穿父元素。

解决方法:

1.设置border边框 (例:border: 1px solid black)

2.设置padding,内边距

3.设置浮动

4.父元素加入(overflow: hidden);

总结

以上这些内容都是发生在Block-Level的元素,设定floating和absolutely positioned的元素完全不用担心边界重叠的问题。

posted @ 2024-02-26 11:50  DawnTraveler  阅读(16)  评论(0编辑  收藏  举报