CSS position:static\left\right\fixed使用

HTML的普通流

浏览器在读取HTML源代码的时候是根据元素在代码出现的顺序读取,最终元素的呈现方式是依据元素的盒子模型来决定的。行内元素是从左到右,块状元素是从上到下。

默认样式前提下,元素在HTML的普通流中会“占用”一个位置,而“占用”位置的大小、位置则是由元素的盒子模型来决定。因此,在后续讲的Position、Float属性是否会使元素脱离这个普通流是一个关键点。

position使用

position的属性值共有四个static、relative、absolute、fixed。

1、static

所有元素在默认的情况下position属性均为static,而我们在布局上经常会用到的相对定位和绝对定位常用的属性top、bottom、left、right在position为static的情况下无效。其用法为:在改变了元素的position属性后可以将元素重置为static让其回归到页面默认的普通流中。

2、fixed

由于兼容性问题没有被广泛应用;fixed固定为浏览器窗口,,元素脱离普通流,不占据空间。即当你滚动网页,其元素与浏览器窗口之间的距离是恒定不变的。例如:固定在窗口中的广告浮动框,无论窗口下拉、拖大拖小广告都在中间位置。

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title></title>
		<style type="text/css">
			body {
				height: 1000px;
				font-size: 12px;
			}

			#ads {
				width: 100px;
				height: 100px;
				background-color: aquamarine;
				/* 文本居中 */
				text-align: center;
				/* 居中固定显示 */
				position: fixed;
				left: 50%;
				top: 50%;
			}
		</style>
	</head>
	<body>
		<div id="ads">
			广告固定在窗口
		</div>
	</body>
</html>

3、absolute

绝对定位,绝对定位是相对而言的,怎么理解呢?应用了position: absolute的元素会循着节点树中的父(祖)元素来确定“根”,然后相对这个“根”元素来偏移。如果在其节点树中所有父(祖)元素都没有设置position属性值为relative或者absolute则该元素最终将对body进行位置偏移。    position: absolute的元素会脱离页面中的普通流,不占用原有位置,之后元素相当于没有它一样排版。

absolute 相当于立交桥,上层桥不占用位置,下层桥可在在下边,脱离原来自己位置,每一个都是新的层次。例如:div1 absolute不占用位置,div2排版的时候认为div1不存在从头开始排版。图一


 

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title></title>
		<style type="text/css">
			body {
				height: 1000px;
				font-size: 12px;
			}
			#div1{
				width: 100px;
				height: 100px;
				background-color:aqua;
				position: absolute;
			}
			#div2{
				width: 200px;
				height: 200px;
				background-color:gray;
			}

		</style>
	</head>
	<body>
		<div id="div1">
			div1
		</div>
		<div id="div2">
			div2
		</div>
	</body>
</html>

 应用了position: absolute之后,可能会覆盖其他非定位元素(即position为static的元素),如果不想覆盖到其他元素,可以通过设置z-index的大小来决定层次,越大优先级越高。 例如:让图1的div2显示在上边,通过设置div1的z-index:-1(放置在最下层)即可,z-index只有在position: absolute/relative时才生效。图二

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title></title>
		<style type="text/css">
			body {
				height: 1000px;
				font-size: 12px;
			}

			#div1 {
				width: 100px;
				height: 100px;
				background-color: aqua;
				position: absolute;
				z-index: -1;
			}

			#div2 {
				width: 200px;
				height: 200px;
				background-color: gray;
			}
		</style>
	</head>
	<body>
		<div id="div1">
			div1
		</div>
		<div id="div2">
			div2
		</div>
	</body>
</html>

 4、relative

相对定位。个元素在页面的普通流中会有“占用”一个位置,这个位置可以理解为默认位置,而相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认位置,并没有脱离普通流,只是视觉上发生的偏移。

relative vs absolute

A 、relative普通流中占用一个位置,不脱离普通流;absolute不占用位置,脱离了普通流

absolute不占用位置脱离了普通流

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <style type="text/css">
        body {
            height: 1000px;
            font-size: 12px;
        }

        #div1 {
            width: 100px;
            height: 100px;
            background-color: aqua;
            /* 相对文档定位,普通流中会有“占用”一个位置 */
            /* position: relative; */
            /* 绝对定位元素会脱离页面中的普通流,不占用原有位置,之后元素相当于没有它一样排版。*/
            position: absolute;
            left: 50%;
        }

        #div2 {
            width: 200px;
            height: 200px;
            background-color: gray;
        }
    </style>
</head>

<body>
    <div id="div1">
        div1
    </div>
    <div id="div2">
        div2
    </div>
</body>

</html>

relative占用位置

<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <style type="text/css">
        body {
            height: 1000px;
            font-size: 12px;
        }

        #div1 {
            width: 100px;
            height: 100px;
            background-color: aqua;
            /* 相对文档定位,普通流中会有“占用”一个位置 */
            position: relative;
            /* 绝对定位元素会脱离页面中的普通流,不占用原有位置,之后元素相当于没有它一样排版。
                position: absolute; */
            left: 50%;
        }

        #div2 {
            width: 200px;
            height: 200px;
            background-color: gray;
        }
    </style>
</head>

<body>
    <div id="div1">
        div1
    </div>
    <div id="div2">
        div2
    </div>
</body>

</html>

B、absolut相对于最近的有定位的父级进行定位,如果没有相对于文档进行定位
 relative相对自己原来的位置定位
C、relative做参考物,absolute做定位 例如:设置div1为参照物(设置relative),div2以div1为参照做具体的定位(设置absolute)

图一

<!DOCTYPE html>
<html lang="zh">
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta http-equiv="X-UA-Compatible" content="ie=edge">
		<title></title>
		<style type="text/css">
			/* absolute relative 定位差异 */
			body {
				margin: 0;
				padding: 0;
			}

			#div1 {
				width: 200px;
				height: 200px;
				background-color: sandybrown;
				/* 设置定位为相对定位 */
				position: relative;
				/* 设置左边移动10px right:-10px */
				left: 10px;
				top: 10px;
			}

			#div2 {
				width: 100px;
				height: 100px;
				background-color: red;
				/* 设置定位为绝对定位,相对于有定位的父元素定位,本例中,以div1为参照进行定位 */
				position: absolute;
				/* 设置左边移动100px right:-100px */
				left: 100px;
			}
		</style>
	</head>
	<body>
		<div id="div1">
			<div id="div2">
				div2
			</div>
			div1
		</div>
	</body>
</html>

 学习参照:position定位和float解析_躺赢啊-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小新空荡荡

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

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

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

打赏作者

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

抵扣说明:

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

余额充值