HTML学习之路-10定位布局

目录

一、定位

a.文档流

b.相关设置

c.定位元素的偏移  

d.定位元素层级

e.定位元素特性

案例1- 相对定位relative

1>没有设置relative

2>设置relative

 3>总结

案例2-绝对定位absolute

1>父级设置相对定位作为子级的参照点

2>父级没有设置则层层向上找,如果没有最后以body为定位

3>总结

 案例3-固定定位fixed

 案例4-定位的层级z-index

二、综合案例

案例1

a.讲解

案例2

a.解析

 案例3-系统弹框

 a.解析


一、定位

a.文档流

文档流,是指盒子按照html标签编写的顺序依次从上到下,从左到右排列,块元素占一行,行内元素在一行之内从左到右排列,先写的先排列,后写的排在后面,每个盒子都占据自己的位置。即简单来说-->文档流:先写的先排序,后写的后排。如果向突破文档流则需要使用定位。

b.相关设置

我们可以使用css的position属性来设置元素的定位类型,postion的设置项如下:

  • relative 生成相对定位元素,元素所占据的文档流的位置保留,元素本身相对自身原位置进行偏移,偏移后的是以脱离文档流的形式出现的,而他后面的元素保留为其脱离文档流之前的位置,相当于脱离文档流的元素依然在其前面占了一个位置。

  • absolute 生成绝对定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于上一个设置了定位的父级元素来进行定位,如果找不到,则相对于body元素进行定位。

  • fixed 生成固定定位元素,元素脱离文档流,不占据文档流的位置,可以理解为漂浮在文档流的上方,相对于浏览器窗口进行定位。

  • static 默认值,没有定位,元素出现在正常的文档流中,相当于取消定位属性或者不设置定位属性。

  • inherit 从父元素继承 position 属性的值。

c.定位元素的偏移  

定位的元素还需要用left、right、top或者bottom来设置相对于参照元素的偏移值。

d.定位元素层级

定位元素是浮动的正常的文档流之上的,可以用z-index属性来设置元素的层级。

e.定位元素特性

绝对定位和固定定位的块元素和行内元素会自动转化为行内块元素

案例1- 相对定位relative

相对定位:文档流位置保留 相对于本身的位置进行偏移

1>没有设置relative

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
			}
			/* 使用组选择器进行一样的样式整理 */
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 相对定位:文档流位置保留 相对于本身的位置进行偏移 */
				/* position: relative;
				left:50px;/* 设置left指的是以左边为基准向右偏移 */ */
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

2>设置relative

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
			}
			/* 使用组选择器进行一样的样式整理 */
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 相对定位:文档流位置保留 相对于本身的位置进行偏移 */
				position: relative;
				left:50px;/* 设置left指的是以左边为基准向右偏移 */
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

 

 3>总结

以上两端代码的区别在于box01的第二段代码设置了position: relative;同时设置了left=50px;最后的结果是:相对于没有设置的位置进行了一个向右的偏移50px.

案例2-绝对定位absolute

绝对定位:元素脱离文档流(使其他元素忽视该元素的存在)  找父级的元素定位找不到则相对于body进行元素定位

1>父级设置相对定位作为子级的参照点

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
				position: relative;/* 父级一般设置相对的作为子级的参照点 */
			}
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 绝对定位:元素脱离文档流(使其他元素忽视该元素的存在)  找父级的元素定位找不到则相对于body进行元素定位*/
				position: absolute;/* 设置元素的定位属性 */
				left:50px;
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
			}
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 绝对定位:元素脱离文档流(使其他元素忽视该元素的存在)  找父级的元素定位找不到则相对于body进行元素定位*/
				position: absolute;/* 设置元素的定位属性 */
				/* left: 0; */
				
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

2>父级没有设置则层层向上找,如果没有最后以body为定位

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
			}
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 绝对定位:元素脱离文档流(使其他元素忽视该元素的存在)  找父级的元素定位找不到则相对于body进行元素定位*/
				position: absolute;/* 设置元素的定位属性 */
				/* left: 0; */
				
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
			}
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 绝对定位:元素脱离文档流(使其他元素忽视该元素的存在)  找父级的元素定位找不到则相对于body进行元素定位*/
				position: absolute;/* 设置元素的定位属性 */
				left: 0;
				top: 0;
				
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->

3>总结

 通过以上代码分析,绝对定位忽视其它元素(可能造成覆盖),

绝对定位的参照点先找各父级有无设置,

如果没有则以body为父级进行偏移。

当然如果没有设置left、top诸如此类的偏移它会依然向普通元素一样排列(以文档流方式只不过忽视其它元素可能覆盖)

只有设置了top它才在垂直上相对于定位了的父级或body进行偏移,

同理只有设置了left才在水平方向上进行偏移

 案例3-固定定位fixed

 固定定位:直接找浏览器窗口进行定位  完全破除文档流

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
				position: relative;/* 父级一般设置相对的作为子级的参照点 */
			}
			.box02,.box01{
				width: 300px;
				height: 100px;
				margin:10px;
			}
			.box01{
				background-color: green;
				/* 固定定位:直接找浏览器窗口进行定位  完全破除文档流*/
				position: fixed;/* 设置元素的定位属性 */
				left:0px;
				top: 0px;
			}
			.box02{
				background-color: gold;
			}
		</style>
		<title>定位</title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
		</div>
	</body>
</html>
<!-- 文档流:先写的先排序,后写的后排 -->
<!-- 突破文档流:定位 -->
<!-- static相当于取消定位属性或者不设置定位属性 inherit继承父级定位属性-->

 

1>总结

可以这样理解直接以body为参照进行偏移

 案例4-定位的层级z-index

默认层级:后写的排在前写的后面把其盖住了
人为干预层级:z-index,值越大越后面盖

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
				position: relative;/* 相对定位,做为子级的参照物 */
			}
			.con div{
				width: 200px;
				height: 200px;
				position: absolute;/* 全部设置绝对定位 */
			}
			.box01{
				background-color: green;
				left: 20px;
				top: 20px;
				/* z-index: 10;/* 层级越大相当于更后面盖 */ */
			}
			.box02{
				background-color: gold;
				left: 40px;
				top: 40px;
			}
			.box03{
				background-color: pink;
				left: 60px;
				top: 60px;
			}
			.box04{
				background-color: yellowgreen;
				left: 80px;
				top: 80px;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
			<div class="box03">box03</div>
			<div class="box04">box04</div>
			<!-- 默认层级:后写的排在前写的后面把其盖住了 -->
			<!-- 人为干预层级:z-index -->
		</div>
	</body>
</html>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 400px;
				height: 400px;
				border: 1px solid #000;
				margin: 50px auto 0px;
				position: relative;/* 相对定位,做为子级的参照物 */
			}
			.con div{
				width: 200px;
				height: 200px;
				position: absolute;/* 全部设置绝对定位 */
			}
			.box01{
				background-color: green;
				left: 20px;
				top: 20px;
				z-index: 10;/* 层级越大相当于更后面盖 */
			}
			.box02{
				background-color: gold;
				left: 40px;
				top: 40px;
			}
			.box03{
				background-color: pink;
				left: 60px;
				top: 60px;
			}
			.box04{
				background-color: yellowgreen;
				left: 80px;
				top: 80px;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div class="con">
			<div class="box01">box01</div>
			<div class="box02">box02</div>
			<div class="box03">box03</div>
			<div class="box04">box04</div>
			<!-- 默认层级:后写的排在前写的后面把其盖住了 -->
			<!-- 人为干预层级:z-index -->
		</div>
	</body>
</html>

二、综合案例

案例1


<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.con{
				width: 100px;
				height: 100px;
				background-color: gold;
				margin: 50px auto 0px;
				position: relative;/* 设置相对定位 */
				border-radius: 14px;/* 有偏角 */
			}
			.box{
				width: 28px;
				height: 28px;
				background-color: red;
				color: aliceblue;
				text-align: center;/* 文字水平居中 */
				line-height: 28px;/* 文字垂直居中 */
				position: absolute;/* 设置绝对定位 */
				left: 86px;
				top: -14px;
				border-radius: 14px;/* 正圆 */
			}
		</style>
		<title>案例</title>
	</head>
	<body>
		<div class="con">
			<div class="box">5</div>
		</div>
	</body>
</html>
<!--定位特性: 绝对定位和固定定位块元素和行内元素会自动装换为行内块元素 -->

 

a.讲解

 

案例2

fixed进行定位类似与参照物为body,事实上并非如此

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.menu{
				height: 80px;
				background-color: gold;
				position: fixed;/* 具有悬浮效果:滑动依然一直停留在页面上方 */
				width: 960px;
				top: 0px;
				/* margin: 0px auto; *//* 对于定位的元素使用margin用不了 */
				left:50%;/*仅仅是最左边的在50%地方 */
				margin-left:-480px;
			}
			p{
				text-align: center;
			}
		</style>
		<title></title>
	</head>
	<body>
		<div class="menu">菜单文字</div>
		<p>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
		</p>
	</body>
</html>

a.解析

 

 案例3-系统弹框

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			.menu{
				height: 80px;
				background-color: gold;
				position: fixed;/* 具有悬浮效果:滑动依然一直停留在页面上方 */
				width: 960px;
				top: 0px;
				/* margin: 0px auto; *//* 对于定位的元素使用margin用不了 */
				left:50%;/*仅仅是最左边的在50%地方 */
				margin-left:-480px;/* 在偏移一般即水平居中 */
			}
			p{
				text-align: center;
			}
			.popup{
				width: 500px;
				height: 300px;
				border: 1px solid #000;
				background-color: #fff;
				position: fixed;
				/* 设置垂直和水平居中 */
				left: 50%;
				margin-left: -251px;
				top: 50%;
				margin:-151px;
				z-index: 999;/* 设置层级最大 */
			}
			.popup h2{
				background-color: gold;
				margin: 10px;
				height: 40px;
				
			}
			.mask{
				position: fixed;
				width: 100%;
				height: 100%;
				background-color: #000;
				left: 0;
				top: 0;
				opacity: 0.5;/* 透明度 */
			}
			.pop-con{
				display: ;/* 藏东西 */
			}
		</style>
		<title></title>
	</head>
	<body>
		<div class="menu">菜单文字</div>
		<div class="pop-con">
			<div class="popup">
				<h2>
					弹框的标题
				</h2>
			</div>
			<div class="mask"></div>
		</div>
		
		<p>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
			网页文字
			<br><br><br><br><br><br><br><br>
		</p>
	</body>
</html>

 a.解析

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

『Knight』

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值