CSS的定位属性Position解析

position(定位)

position属性是最基础、最常用的页面布局属性之一,那么position属性都有哪些值呢?每个值都是什么意思呢?

position 定位属性有5个值,这五个值分别是:

  1. static
  2. relative
  3. fixed
  4. absolute
  5. sticky

static静态定位

默认值,即没有定位。正常文档流排列,不受top、bottom、left、right属性影响(也就是你设置了也不生效)。
页面布局:

<div class="static">我是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>

样式如下

.static {
/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(245, 232, 118);
background-color: lemonchiffon;
line-height: 100px;
}

静态定位

relative相对定位

在正常文档流排列的基础上,保持基本占位空间,可通过top、bottom、left、right属性来改变位置。会产生重叠。
页面布局

<div class="static">我是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="relative">我是相对定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="relative">我也是相对定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>

样式如下,设置了top=20px、left=20px,在正常占位的基础上产生了错位的效果。可是说是相对于自身正常文档流的基础上做了位置的改变

.relative {
position: relative;
top: 20px;
left: 20px;
/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(194, 243, 129);
background-color: rgb(233, 255, 205);
line-height: 100px;
}

相对定位

fixed固定定位

不受文档流的约束,不占用文档流空间,始终位于设定死的定位。会产生重叠。
页面布局

<div class="static">我是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="relative">我是相对定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="relative">我也是相对定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="fixed1">我是固定定位1号</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>

样式如下,设置位置为top=30px、right=50px。如果内容超过一屏,即使滚动页面位置也不会发生变化。

.fixed1 {
position: fixed;
top: 30px;
right: 50px;

/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(129, 243, 190);
background-color: rgb(205, 255, 255);
line-height: 100px;
}

固定定位

absolute绝对定位

不受文档流的约束,不占用文档流空间,在其最近的已定位的父元素基础上做relative相对定位。如果没有已定位的父元素,则基于html。会产生重叠。
页面布局

<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="absolute_dad">我是绝对定位的父元素
<div class="absolute1">我是绝对定位1号</div>
<div class="absolute2">我是绝对定位2号</div>
</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>
<div class="static">我也是没有定位的静态定位</div>

样式如下,首先当前绝对定位的父元素是有定位的,图中可以发现绝对定位是是脱离文档流的围绕父元素做的位置变化。

.absolute_dad {
position: relative;
/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(131, 129, 243);
background-color: rgb(218, 205, 255);
line-height: 100px;
}
.absolute1 {
position: absolute;
top: 80px;
left: 100px;
/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(216, 129, 243);
background-color: rgb(249, 205, 255);
line-height: 100px;
}
.absolute2 {
position: absolute;
top: -80px;
right: 100px;
/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(207, 129, 243);
background-color: rgb(241, 205, 255);
line-height: 100px;
}

绝对定位

sticky粘性定位

基于用户的滚动位置浏览,当目标元素正常在页面中显示的时候是relative定位,当目标元素超过页面的显示范围时是fixed固定定位在指定位置。会产生重叠。

样式如下,这里的top=0代表,当目标元素超过页面的显示范围时固定在页面显示的位置。

.sticky {
position: sticky;
top: 0;
z-index: 99;

/* 字体大小、边框、背景颜色、线高样式 */
font-size: 30px;
border: 2px solid rgb(243, 129, 144);
background-color: rgb(255, 205, 220);
line-height: 100px;
}

上动图
最终动态效果

z-index属性

当产生重叠时,可以通过z-index属性来设置堆叠顺序。这里将两个固定定位的z-index分别设置为100和98,将粘性定位的z-index设置为99。可以发现z-index的值越大层级越靠前。
全部代码

<!DOCTYPE html>
<html>

<body>
    <div class="static">我是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="relative">我是相对定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="relative">我也是相对定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="fixed1">我是固定定位1号</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="sticky">我“相对定位”和“固定定位”结合的粘性定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="absolute_dad">我是绝对定位的父元素
        <div class="absolute1">我是绝对定位1号</div>
        <div class="absolute2">我是绝对定位2号</div>
    </div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="fixed2">我是固定定位2号</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
    <div class="static">我也是没有定位的静态定位</div>
</body>

</html>

<style>
    .static {
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(245, 232, 118);
        background-color: lemonchiffon;
        line-height: 100px;
    }

    .relative {
        position: relative;
        top: 20px;
        left: 20px;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(194, 243, 129);
        background-color: rgb(233, 255, 205);
        line-height: 100px;
    }

    .fixed1 {
        position: fixed;
        top: 30px;
        right: 50px;
        z-index: 100;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(129, 243, 190);
        background-color: rgb(205, 255, 255);
        line-height: 100px;
    }

    .fixed2 {
        position: fixed;
        top: 220px;
        right: 250px;
        z-index: 98;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(129, 243, 190);
        background-color: rgb(205, 255, 255);
        line-height: 100px;
    }

    .absolute_dad {
        position: relative;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(131, 129, 243);
        background-color: rgb(218, 205, 255);
        line-height: 100px;

    }

    .absolute1 {
        position: absolute;
        top: 80px;
        left: 100px;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(216, 129, 243);
        background-color: rgb(249, 205, 255);
        line-height: 100px;
    }

    .absolute2 {
        position: absolute;
        top: -80px;
        right: 100px;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(207, 129, 243);
        background-color: rgb(241, 205, 255);
        line-height: 100px;
    }

    .sticky {
        position: sticky;
        top: 0;
        z-index: 99;
        /* 字体大小、边框、背景颜色、线高样式 */
        font-size: 30px;
        border: 2px solid rgb(243, 129, 144);
        background-color: rgb(255, 205, 220);
        line-height: 100px;
    }
</style>
<script>

</script>

戛然而止了。
更多前端知识欢迎扫码关注微信公众号:前端博学了没
ღ( ´・ᴗ・` )比心
前端博学了没

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值