absolute与relative的爱恨情仇

absolute
第一种情况:
代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>absolute与relative的相爱相杀</title>
	    <style>
			
			.p{
				width: 200px;
				border: 2px solid burlywood;
				margin: 100px auto;
			}
			
			.box1{
				position: absolute;
				left: 100px;
				width: 300px;
				height: 300px;
				background-color: #DEB887;
			}
			
			.box2{
				position: absolute;
				width: 200px;
				height: 200px;
				background-color: darkcyan;
			}
			
			span{color: red;}
		</style>
	</head>
	<body>
		<p>1,相对于一个<span>已定位的包含它</span>的元素</p>
		<div class="box1">父类
			<div class="box2">子类</div>
		</div>
		<p class="p">菜鸟教程解释:位置设置为 absolute 的元素,可定位于相对于第一个已定位(非静态的)的包含它的元素的指定坐标。此元素的位置可通过 "left"、"top"、"right" 以及 "bottom" 属性来规定。</p>
	</body>
</html>

截图:
在这里插入图片描述
由结果可知,当父类为一个(已经定位)的元素时:子类(absolute)则以父类的左上角的原始基点进行定位(left,right,top,bottom,margin,padding);

第二种情况:
代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>absolute与relative的相爱相杀</title>
	    <style>
			
			.box1{
				margin-left: 100px;
				width: 300px;
				height: 300px;
				background-color: #DEB887;
			}
			
			.box2{
				position: absolute;
				width: 200px;
				height: 200px;
				background-color: darkcyan;
			}
			
			span{color: red;}
		</style>
	</head>
	<body>
		<p>2,相对于一个<span>未定位的包含它</span>的元素,且子类没有<span>top,left,right,bottom(不包括marginpadding)</span></p>
		<div class="box1">父类
			<div class="box2">子类</div>
		</div>
		</body>
</html>

截图
在这里插入图片描述
结果可知:默认基于父类左上角,且只能由margin以及padding调整位置

第三种:
代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>absolute与relative的相爱相杀</title>
	    <style>
			
			.box{
				position: absolute;
				left: 100px;
				width: 400px;
				height: 400px;
				background-color: red;
			}
			
			.box1{
				margin-left: 100px;
				width: 300px;
				height: 300px;
				background-color: #DEB887;
			}
			
			.box2{
				position:absolute;
				left: 0px;
				width: 200px;
				height: 200px;
				background-color: darkcyan;
			}
			
			span{color: red;}
		</style>
	</head>
	<body>
		<p>2,相对于一个<span>未定位的包含它</span>的元素,且子类存在<span>top,left,right,bottom(不包括marginpadding)</span>其中一项</p>
		<div class="box">
		<div class="box1">父类
			<div class="box2">子类</div>
		</div>
		</div>
		</body>
</html>

截图:
在这里插入图片描述
结果可知:如果子类定位为absolute,且存在TRBL其中一项,则以第一个的已定位的父类的左上角为基准,如没有,则以浏览器左上角为基准。

relative(相对的单纯,哈哈哈)
代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>absolute与relative的相爱相杀</title>
	    <style>
			
			.box{
				position: absolute;
				left: 100px;
				width: 400px;
				height: 400px;
				background-color: red;
			}
			
			.box1{
				margin-left: 100px;
				width: 300px;
				height: 300px;
				background-color: #DEB887;
			}
			
			.box2{
				position:relative;
				left: 0px;
				width: 200px;
				height: 200px;
				background-color: darkcyan;
			}
			p{width: 300px;border: 2px solid #DEB887;}
			span{color: red;}
		</style>
	</head>
	<body>
		<p>2,相对于一个<span>其正常位置</span>通过<span>top,left,right,bottom,margin,padding</span>进行定位</p>
		<div class="box">
		<div class="box1">父类
			<div class="box2">子类</div>
		</div>
		</div>
		<p style="position: relative;margin-top: 440px;">菜鸟解释:生成相对定位的元素,相对于其正常位置进行定位。
因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。</p>
		</body>
</html>

截图:
在这里插入图片描述
结果可知:relative定位相对简单,(但是如果一元素没有父类,且定位为relative则就要考滤,其在html中的层次关系处于那一层次了)(重要)。

猜你喜欢

转载自blog.csdn.net/h1234561234561/article/details/85707790