html css JavaScript 前端 css定位 子绝父相 相对定位 绝对定位 固定定位 粘贴定位 叠放层次

定位

如果说浮动, 关键在一个 "浮" 字上面, 那么 我们的定位,关键在于一个 "位" 上。

元素的定位属性

元素的定位属性主要包括定位模式边偏移两部分。

1、边偏移

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

也就说,以后定位要和这边偏移搭配使用了, 比如 top: 100px; left: 30px; 等等。

2、定位模式(定位的分类)

在CSS中,position属性用于定义元素的定位模式,其基本语法格式如下:

选择器{
    position:属性值;
}

position属性的常用值

描述
static自动定位(默认定位方式)
relative相对定位,相对于其原文档流的位置进行定位
absolute绝对定位,相对于其上一个已经定位的父元素进行定位
fixed固定定位,相对于浏览器窗口进行定位
sticky粘性定位,相对于浏览器窗口上下边缘距离定位

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

<head>
    <meta charset="utf-8">
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: orange;
            top: 100px; /* 顶边向下偏移100px */
            left: 100px;/* 左边向右偏移100px */
            position: absolute;   /* 定位模式(绝对定位) */
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

 

静态定位(static)

静态定位是所有元素的默认定位方式,当position属性的取值为static时,可以将元素定位于静态位置。 所谓静态位置就是各个元素在HTML文档流中默认的位置。

上面的话翻译成白话: 就是网页中所有元素都默认的是静态定位哦! 其实就是标准流的特性。

在静态定位状态下,无法通过边偏移属性(top、bottom、left或right)来改变元素的位置。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: static; /* 定位模式 -- 静态定位,默认值 */
            left: 100px;      /* 边偏移对于静态定位无效 */
            top: 100px;       /* 边偏移对于静态定位无效 */
        }
    </style>
</head>
<body>
    <div></div>
</body>
</html>

 

 

相对定位relative

相对定位是将元素相对于它在标准流中的位置进行定位,当position属性的取值为relative时,可以将元素定位于相对位置。

对元素设置相对定位后,可以通过边偏移属性改变元素的位置,但是它在文档流中的位置仍然保留。

相对定位:

  1. 未脱标,原来的位置依然占有

  2. 边偏移参考点:自己的左上角

下图是相对定位的示意图:

 

child-02原来在红色框里,它向右测偏移了150px,向下偏移了100px,但是它原来的位置还被自己占用着。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <style>
        div {
            width: 100px;
            height: 100px;
            background-color: orange;
        }
        div:nth-child(2) {
            background-color: purple;
            position: relative; /*  相对定位 */
            left: 110px;        /*  向右侧偏移110px */
            top: 110px;         /*  向右下面偏移110px */
        }
    </style>
</head>
<body>
    <div></div>
    <div>2</div>
    <div></div>
</body>
</html>

 

绝对定位absolute

绝对定位:

  • 脱标,原来的位置会让出来。

  • 边偏移参考点

    • 若所有的父元素都没有定位,就以浏览器左上角为参考点

    • 若父级元素有定位,就以最近的父级元素左上角为参考点

示例:绝对定位脱标

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <style>
        div:first-child {
            width: 100px;
            height: 100px;
            background-color: pink;
            position: absolute; /* 定位模式 绝对定位,绝对定位完全脱标的,它不占有位置 */
            top: 20px;
            left: 20px;
        }
        div:nth-child(2) {
            width: 200px;
            height: 150px;
            background-color: purple;
        }
    </style>
</head>
<body>
    <div></div>
    <div></div>
</body>
</html>

 

 

子绝父相

这个"子绝父相"太重要了,是我们学习定位的口诀,时时刻刻记住的。

这句话的意思是 子标签是绝对定位的话, 父标签要用相对定位。

首先,我们说下,绝对定位是将元素依据最近的已经定位(绝对、固定或相对定位)的父元素(祖先)进行定位。

就是说, 子级是绝对定位,父亲只要是定位即可(不管父亲是绝对定位还是相对定位,甚至是固定定位都可以),就是说, 子绝父绝,子绝父相都是正确的。

绝对定位的盒子水平/垂直居中

普通的盒子是左右margin 改为 auto就可, 但是对于绝对定位就无效了

定位的盒子也可以水平或者垂直居中,有一个算法。

  1. 首先left 50% 父盒子的一半大小

  2. 然后走自己外边距负的一半值就可以了 margin-left。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            .father {
                width: 800px;
                height: 400px;
                background-color: pink;
                margin: 40px auto;
                position: relative; /*父容器相对定位 */
            }
            .son {
                width: 100px;
                height: 40px;
                background-color: purple;
                position: absolute;/* 加了绝对定位的盒子,margin 0 auto 就无效了 */
                left: 50%;         /* left 父盒子宽度的一半 */
                margin-left: -50px;/* 自己宽度的一半      */
                top: 50%;          /* top 父盒子高度的一半 */
                margin-top: -20px; /* 自己高度的一半      */
            }
        </style>
    </head>
    <body>
        <div class="father">
            <div class="son"></div>
        </div>
    </body>
    </html>

 

 

固定定位fixed

固定定位是绝对定位的一种特殊形式。它以浏览器窗口作为参照物来定义网页元素。当position属性的取值为fixed时,即可将元素的定位模式设置为固定定位。

固定定位:

  1. 脱标,原来的位置会让出来。

  2. 参考点:浏览器

当对元素设置固定定位后,它将脱离标准文档流的控制,始终依据浏览器窗口来定义自己的显示位置。不管浏览器滚动条如何滚动也不管浏览器窗口的大小如何变化,该元素都会始终显示在浏览器窗口的固定位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <style>
        body {
            height: 3000px;
        }
        .father {
            width: 200px;
            height: 200px;
            background-color: orange;
            margin: 100px auto;
        }
        img {
            position: fixed;/* 固定定位 */
            top: 0;
            right: 0;
        }
    </style>
</head>
<body>
    <div class="father">
        <img src="images/cat.png" width="100" alt="">
    </div>
</body>
</html>

 

粘性定位sticky

粘性定位是基于用户滚动的位置来确定元素位置。

粘性定位:

  1. 不脱标,原来的位置还占用着。

  2. 参考点:浏览器

  3. 必须配合 top 、left、right、bottom 其中一个才有效。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <style>
        body {
            height: 3000px;
        }
        .search {
            width: 1118px;
            height: 72px;
            position: sticky; /* 粘性定位 */
            top: 20px;        /* 当前元素距离浏览器顶端20px时,粘住当前元素,不让它向浏览器上方滚动 */
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div style="height:200px;"></div>
    <div class="search">
        <img src="images/search.png" width="1118" alt="">
    </div>
</body>
</html>

 

叠放次序(z-index)

当对多个元素同时设置定位时,定位元素之间有可能会发生重叠。

在CSS中,要想调整重叠定位元素的堆叠顺序,可以对定位元素应用z-index层叠等级属性,其取值可为正整数、负整数和0。

比如: z-index: 2;

注意:

  1. z-index的默认属性值是0,取值越大,定位元素在层叠元素中越居上。

  2. 如果取值相同,则根据书写顺序,后来居上。

  3. 后面数字一定不能加单位。

  4. 只有相对定位,绝对定位,固定定位有此属性,其余标准流,浮动,静态定位都无此属性,亦不可指定此属性。

示例:

<!DOCTYPE html>
<html lang="en">
​
<head>
    <meta charset="utf-8">
    <style>
        div {
            width: 200px;
            height: 200px;
            background-color: orange;
            position: absolute;  /* 绝对定位 */
            top: 0;
            left: 0;
        }
        div:first-child {
            z-index: 1;  /* 设置堆叠显示顺序 */
        }
        div:nth-child(2) {
            background-color: purple;
            top: 30px;
            left: 30px;
            z-index: 2;  /* 设置堆叠显示顺序 */
        }
        div:nth-child(3) {
            background-color: skyblue;
            top: 60px;
            left: 60px;
            z-index: 3;  /* 设置堆叠显示顺序 */
        }
    </style>
</head>
<body>
    <div></div>
    <div></div>
    <div></div>
</body>
</html>


 

 

五种定位总结

定位模式是否脱标占有位置是否可以使用边偏移移动位置基准
静态static不脱标,正常模式不可以正常模式
相对定位relative不脱标,占有位置可以相对自身位置移动(自恋型)
绝对定位absolute完全脱标,不占有位置可以相对于定位父级移动位置(拼爹型)
固定定位fixed完全脱标,不占有位置可以相对于浏览器移动位置(认死理型)
粘性定位sticky不脱标,占有位置可以相对于浏览器移动位置

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值