CSS position absolute定位

1 什么是absolute定位

absolute定位:翻译为"绝对定位",不要从它的字面意思进行理解。除static一切定位都是相对的。

absolute定位:相对于非static的父级容器进行定位。如果所有父级元素都是static,则会相对于body定位。


问题:偏移之后,原有位置是否会被其它元素占用?

答:会。它会脱离原有页面流,不会保留原有占位。


2 示例

例1:相对于上一级div定位。

<body style="margin: 0;">
    <div style="height:40px;"></div>

    <div style="position:relative; border:2px solid #f00; width: 300px;height: 160px;">
        <span>span1</span>
        <span style="position: absolute;; right: 5px;top:5px;">span2</span>
        <span>span3</span>
        <div>div1</div>
        <div>div2</div>
    </div>
</body>

span2的父级div设置为relative定位,span2是absolute定位,所以span就是相对于absolute。

img

注意:span2原有页面流的占位已经被别人给占了,不会保留原有位置。


例2:相对于上上一级div定位。

<body style="margin: 0;">
    <div style="height:40px;"></div>

    <div style="position:relative; border:2px solid #f00; width: 300px;height: 160px;">
        <div style="margin-top:50px;margin-left: 50px; border:2px solid #0F0; width: 200px;height: 80px;">
            <span>span1</span>
            <span style="position: absolute;; right: 5px;top:5px;">span2</span>
            <span>span3</span>
            <div>div1</div>
            <div>div2</div>
        </div>
    </div>
</body>

因为span2的上一级元素的position是static(没有设置,采用默认值),会继续找上一级,找到非static定位的父元素,它的爷爷是relative,所以相对于它定位。

img


例3:相对于body定位。

<body style="margin: 0;">
    <div style="height:40px;"></div>

    <div style="border:2px solid #f00; width: 300px;height: 160px;">
        <div style="margin-top:50px;margin-left: 50px; border:2px solid #0F0; width: 200px;height: 80px;">
            <span>span1</span>
            <span style="position: absolute;; right: 5px;top:5px;">span2</span>
            <span>span3</span>
            <div>div1</div>
            <div>div2</div>
        </div>
    </div>
</body>

span2的父元素与爷元素都是static定位(默认),所以最终相对于body定位。

img


3 实际常用场景

1)将元素定位在边缘位置,例如:

右上角的关闭按钮;

img

轮播图两侧的上一个/下一个链接;

img


2)部分覆盖已有元素,例如:

购物车图标右上角的数字。

img

以下各例不实现细节,仅实现关键布局。


例1:模拟关闭按钮。

img

<body style="margin: 0;">
    

    <div style="position: relative;;border:2px solid #f00; width: 300px;height: 160px;">
        
            <span>span1</span>
            <span style="position: absolute;; right: 2px;top:2px;background-color: #ccc;padding:4px;">X</span>
            <span>span3</span>
            <div>div1</div>
            <div>div2</div>
        </div>
    </div>
</body>

例2:购物车右上角的数字。

img

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8" >
    <title>CSS 绝对定位 购物车数字 | 关关教程</title>
    <style>
        .number{
            position: absolute;
            top: 2px;
            left: 58px;
            background-color: #f00;
            width: 20px;
            height: 20px;
            font-style: normal;
            border-radius: 20px;
            padding-left: 5px;
            box-sizing: border-box;
            color: #fff;
        }
    </style>
</head>

<body style="margin: 0;">
    

    <div style="position: relative;;border:2px solid #f00; width: 150px;height: 36px;padding-top:6px;">       
        <div>车的图标</div>
        <i class="number">6</i>             
    </div>
</body>

</html>

absolute的标签放在父元素里的任意位置都是相同效果。

        <i class="number">6</i>
        <div>车的图标</div>

完全等价。


4 小结

1)不需要设置坐标,就使用static;


2)想要相对于自己设置坐标,就使用relative;

如果它的内部有absolute元素并相对于它定位,就使用relative;


  1. 想要相对于非static父元素设置坐标,就使用absolute。