十分钟轻松搞懂CSS的五大定位方式!(建议收藏)

一、CSS之position定位方式

position 属性规定元素的定位类型,有以下五种:

  • static
  • relative
  • absolute(脱离文档流)
  • fixed(脱离文档流)
  • sticky(新属性)

两种脱离正常文档流的定位方法,会把元素的宽高设置成内容的宽高

常用 top/bottom/left/right 属性进行偏移

1.static

静态定位,是position的默认值,可不设置。
默认布局方式,从上到下,从左到右,正常文档流。
position: static;
在这里插入图片描述

2.relative

相对定位
在确定元素的默认位置之后,通过top/bottom/left/right设置偏移
偏移后,元素所占的空间保留原位,其他元素不会挤占原来空间


有三个并列在一行的盒子,将中间的一个盒子position设为relative
“left: 50px; top: 15px;” 意为在原位置的基础上,距左边再偏移50px,距顶部再偏移15px

<style>
.box {
    width: 150px;
    height: 150px;
    background-color: rgb(69, 172, 0);
    margin: 10px;
    display: inline-block;
  }
  
  .box2 {
    background-color:rgb(47, 64, 160);
    position: relative;
    left: 50px;
    top: 15px;
}
</style>
  
<div class="container">
    <div class="box">box1</div>
    <div class="box box2">box2</div>
    <div class="box">box3</div>
</div>

偏移前:
在这里插入图片描述
偏移后结果图:(黑框为蓝色box2原位置)
在这里插入图片描述

3.absolute(脱离正常文档流)

绝对定位,把元素移出正常的文档流。
后面的元素会挤占它的空间,自己则会覆盖在挤占他空间的元素上方。

可以使用top/bottom/left/right偏移,但这些属性是相对于包含它的元素来偏移的。

包含元素

  • 如果这个元素的所有父级元素都没有设置position/transform/perspective属性,那么包含元素就是包含HTML元素的容器,即浏览器的窗口,这时相对浏览器左上角进行偏移;例如:

示例: box2设置绝对元素,但任意父级元素都没有设置position/transform/perspective属性,这时就会相对浏览器左上角进行位移:

<style>
.box {
 width: 150px;
 height: 150px;
 background-color: rgb(69, 172, 0);
 margin: 10px;
 display: inline-block;
}

.box2 {
 background-color: rgb(47, 64, 160);
 position: absolute;
 left: 50px;
 top: 15px;
}
</style>  

<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<div class="container">
	<div class="box">box1</div>
    <div class="box box2">box2</div>
 	<div class="box">box3</div>
</div>

偏移结果如图:可以看到box2的原位置已经被挤占,且以浏览器左上角进行偏移
在这里插入图片描述

  • 如果父级元素中包含position/transform/perspective属性,那么包含元素就是离他最近的设置了的元素,是相对父级元素的判定盒子边界进行位置偏移的

盒子边界:内边距与边框的交界处
通常使用relative来设置包含元素,不会影响正常的文档流


示例:在.container加上transform属性,此时box2设置absolute,最近的包含元素就是container,故box2所以相对container进行偏移

<style>
.container_ {
  transform: translateX(0);
  /*为方便观察,加上边框*/
  border:gray 1px solid;
}

.box_ {
  width: 150px;
  height: 150px;
  background-color: rgb(69, 172, 0);
  margin: 10px;
  display: inline-block;
}

.box2_ {
  background-color: rgb(47, 64, 160);
  /*.container有transform,所以相对.container进行偏移*/
  position: absolute;
  left: 50px;
  top: 15px;
}
</style>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<div class="container_">
  <div class="box_">box1</div>
  <div class="box_ box2_">box2</div>
  <div class="box_">box3</div>
</div>

偏移结果如下:
在这里插入图片描述

4.fixed(脱离正常文档流)

固定定位,无论页面怎么滚动都会固定在同一个位置,适用固定浮窗、导航条

left:0;right:0; 宽度占满容器,若设置top:0则在最顶,bottom:0最底部
bottom:0;top:0; 高度占满容器,若设置left:0则在最左边,right:0最右

<style>
#bottom {
  background-color: green;
  position: fixed;
  /*left、right为0,占满容器宽度*/
  bottom: 0;
  left:0;
  right:0;
}

#right {
  background-color: rgb(168, 255, 168);
  position: fixed;
  /*top、bottom为0,占满容器高度*/
  right:0;
  top: 0;
  bottom: 0;
  opacity: 0.5;
}
</style>

<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<footer id = "bottom">浮动在最下侧</footer>
<footer id = "right">浮动在最右侧</footer>

在这里插入图片描述

5.sticky

新属性,relative和fixed结合体。
top:0 滚动时元素离窗口一定位置时,把它变成固定在顶部,其他元素还在正常的文档流中

<style>
nav {
  background-color: blue;
  position: sticky;
  top: 0;
}
</style>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<nav>导航栏</nav>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>
<p>这是一段占位文本</p>

固定前:
在这里插入图片描述
固定后:
在这里插入图片描述

二、z-index

设置z轴方向的偏移,默认值为0。
z-index:0
可设置正/负数,数值越大,显示在越前。
在这里插入图片描述

  1. 若在一个包含元素中有两个absolute元素交叠,那么后定义的元素会覆盖先定义的元素。
    若要先定义的元素在前,可设置z-index数值实现,示例:
<style>
.container {
  transform: translateX(0);
}
.box {
  width: 150px;
  height: 150px;
  background-color: rgb(69, 172, 0);
  margin: 10px;
  display: inline-block;
}
.box1 {
  position: relative;
  z-index: 10;//显示在前
}
.box2 {
  background-color: rgb(47, 64, 160);
  position: absolute;
  left: 50px;
  top: 15px;
}
</style>

<div class="container">
    <div class="box box1">box1</div>
    <div class="box box2">box2</div>
</div>

默认情况:
在这里插入图片描述

z-index后:
在这里插入图片描述

若两个包含元素,且那么堆叠顺序是按照包含元素的z-index显示

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你脸上有BUG

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

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

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

打赏作者

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

抵扣说明:

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

余额充值