CSS盒子模型之元素的定位position

在CSS页面布局时,通过position属性定义来设置元素的定位模式。

语法格式:position:static|relative|absolute|fixed;

1、定位的使用方式

定位=定位模式+边偏移

1.1、定位模式

(1)静态定位static:是元素的默认定位方式,各个元素遵循着HTML文档流中默认的位置。

(2)相对定位relative:表示它相对的参照物就是它在static状态下的位置,即以默认的位置为参照物进行位置的移动。

不完全脱离标准文档流,覆盖在其他盒子之上,其他盒子依旧认为它在,保留它的空间。

(3)绝对定位absolute:使用最多的属性之一,表示它相对于其上一个已经定位的父元素进行定位。不设置宽度就没有宽度。完全脱离文档流,不占据位置,其他元素会占据此空间,即对象发生位移时,原先初始位置的内容如同被去除了一样,这个对象独立于其他页面的内容,而初始位置的空白被其他内容自然填补。

注:a、如果没有祖先元素或者祖先元素没有定位,则以浏览器为原点

        b、如果祖先元素有定位(相对、绝对、固定定位),则以最近一级的有定位祖先元素为原点移动位置(上级元素没有定位上上级有定位的话以上上级元素为原点)

使用口诀:子绝父相,即子级使用绝对定位,父级需要使用相对定位,因为父级需要占用位置,因此是相对定位,子级脱标浮在上面不需要占位置所以是绝对定位

(4)固定定位fixed:元素固定于浏览器中的某个位置,使用场景:浏览器页面滚动时位置不会改变。如某些广告。

特点:a、以浏览器可视窗口为原点移动元素

           b、固定定位不占有原先位置

1.2、边位移属性

top顶部偏移量,定义元素相对于其父元素上边线的距离
bottom底部偏移量,定义元素相对于其父元素下边线的距离
left左侧偏移量,定义元素相对于其父元素左边线的距离
right右侧偏移量,定义元素相对于其父元素右边线的距离

1.3、叠放次序z-index

  • 当多个元素同时设置定位时,定位元素之间有可能发生重叠
  • 要想调整重叠定位元素的堆叠顺序,可以对定位元素使用z-index层叠等级属性,其取值可为正整数、负整数、0.
  • 注意:定位元素才有z-index

同级:

(1)不加z-index 后来者居上
(2)加z-index 值越大越在上面 如果值相等 还是后来者居上


嵌套:

(1)不加z-index 默认子元素在上
(2)只给子元素加z-index值<0 可实现父元素为上
(3)如果给父元素也添加z-index 父元素无论怎样 子元素都将在父元素上

嵌套+同层级

(1)如果父元素有其他兄弟元素 如果两者都没加z-index 后来者居上
(2)两者父元素都没加z-index 若某一子元素z-index值大 那么该子元素将显示在上方 如果值相同 则后来者居上
(3)如果父级都加了z-index 那么在进行比较时 只比较父元素z-index值 值越大则父元素连同里面的子元素越靠上 如果值相等 后来者居上

注意:

数字后面不能加单位。

只有相对定位、绝对定位、固定定位有此属性,其余标准流、浮动、静态定位都无此属性。

flex盒子的子元素也可以设置z-index属性(可以自己了解)

2、元素定位使用讲解

2.1、静态定位(static)

HTML代码:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>静态定位</title>
		<link rel="stylesheet" href="../CSS/静态定位.css">
	</head>
	<body>
		<div id="father">
			<div class="box1">区块一</div>
			<div class="box2">区块二</div>
			<div class="box3">区块三</div>
		</div>
	</body>
</html>

CSS代码:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
	/* static:静态定位,没有定位,默认值,元素按照标准文档流进行显示 */
	position: static;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
	position: static;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	position: static;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
	position: static;
}

效果图:

 我们对四个盒子father、box1、box2、box3都设置了静态定位,但效果图与不设置静态定位时的效果图一样。注意:在静态定位状态下,无法通过边位移属性(top、right、bottom和left)来改变元素的位置。

2.2、相对定位

对于HTML代码不变,改变CSS代码,CSS代码如下:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	/* 设置相对定位 */
	position: relative;
	left: 1.25rem;
	top: 1.25rem;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
}

效果图如下:

在CSS代码中,我对box2设置了相对定位,并且设置了相应的边位移属性,导致区块二以默认的位置为参照物进行相应的移动,但区块二默认的位置一直存在着,并没有因为本身的移动而消失,因此区块三并没有占据区块二的位置。

2.3、绝对定位

对于HTML代码不变,改变CSS代码,CSS代码如下:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
	position: relative;
	top: 1.25rem;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	/* 设置绝对定位 */
	position: absolute;
	top: 1.5625rem;
	left: 1.5625rem;
	clear: both;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
}

效果图如下:

 在这里,我们按照规范对盒子father设置了相对定位,盒子box2设置了绝对定位,若不对盒子father设置相对定位,则区块二会依据浏览器窗口进行定位。

区块二原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样,会被其他内容所占据。box2定位后生成一个块级框,而不论原来它在正常文档流中生成何种类型的框。普通文档流中其它元素的布局就像绝对定位的元素不存在一样。

在这里我们会发现box2设置绝对定位后,其大小和原来相比发生了变化,这是因为box2并未设置宽度和高度,在原来正常文档流中,在不设置宽度、边距的情况下,块元素默认宽度为父级元素的100%,使用绝对定位后,使其完全脱离了原来正常的文档流,盒子宽度默认被内容所撑开,与浮动的效果一样。

2.4、固定定位

HTML代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>固定定位</title>
		<link rel="stylesheet" href="../CSS/固定定位.css">
	</head>
	<body>
		<div id="father">
			<div class="box1">区块一</div><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>
			<div class="box2">区块二</div>
			<div class="box3">区块三</div>
		</div>
	</body>
</html>

CSS代码如下:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	/* 设置固定定位 */
	position: fixed;
	top: 1.25rem;
	left: 1.25rem;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
}

效果图如下:

 如图所示,随着滚动条的滚动,区块二一直处于浏览器窗口的固定位置,并不会随着滚动条的滚动改变其位置。

3、叠放次序z-index的使用

HTML代码如下:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>叠放次序z-index</title>
		<link rel="stylesheet" href="../CSS/叠放次序z-index.css">
	</head>
	<body>
		<div id="father">
			<div class="box1">区块一</div>
			<div class="box2">区块二</div>
			<div class="box3">区块三</div>
		</div>
	</body>
</html>

CSS代码如下:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
	position: relative;
	top: 1.25rem;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	/* 设置绝对定位 */
	position: absolute;
	top: 1.5625rem;
	left: 1.5625rem;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
	/* 设置绝对定位 */
	position: absolute;
	top: 1.5625rem;
	left: 1.25rem;
}

效果图如下:

对box2和box3同时使用了绝对定位,导致其发生了重叠,由于box3为“后来者”,所以区块三在最上面。

设置属性叠放次序z-index。

CSS代码如下:

div {
	margin: 10px;
	padding: 5px;
	font-size: 12px;
	line-height: 25px;
}

#father {
	background-color: aqua;
	border: 1px #666 solid;
	padding: 0;
	position: relative;
	top: 1.25rem;
}

.box1 {
	background-color: #f2bb6f;
	border: 1px #B55A00 dashed;
}

.box2 {
	background-color: #003580;
	border: 1px #0000A8 dashed;
	/* 设置绝对定位 */
	position: absolute;
	top: 1.5625rem;
	left: 1.5625rem;
	z-index: 1;
}

.box3 {
	background-color: #f3f3f3;
	border: 1px #395E4F dashed;
	/* 设置绝对定位 */
	position: absolute;
	top: 1.5625rem;
	left: 1.25rem;
	z-index: 0;
}

 效果图如下:

 对box2和box3设置了z-index属性,box2的值为1,box3的值为0,谁的值大谁在上面,因此区块二在最上面。其他情况类似分析即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值