盒子的定位:绝对定位(脱离文档流)

一、概念

绝对定位会脱离文档流,相对于已经定位的上层元素(position)进行定位;若上层元素没有定位,则向更上层寻找已定位元素,直到根元素。

二、语法

选择器{position: absolute;}

与相对定位一致,

使用left、right改变其水平位置,使用top、bottom改变其垂直位置

left定位元素和定位元素的左边距离,right定位元素和定位元素的右边距离

top定位元素和定位元素的上边距离,bottom定位元素和定位元素的下边距离

三、绝对定位的使用

当我们为一个元素设置绝对定位时,这个元素就会脱离文档流。这意味着它不再占据文档流中的空间,其他元素会无视它的存在而进行布局。

这样说或许不太好理解,就如同排队一样,每个人都按照先来后到的顺序依次站立,这就如同网页中的元素在正常文档流中的排列。但突然有一个人被拎出了队伍,放到了一个特定的位置,不再受队伍顺序的影响,这个人就相当于被设置了绝对定位的元素。

(1)原代码如下:

<head>
    <style>
     div{
                width: 100px;
                height: 100px;
                margin: 3px;

            }
            #div1{
                background-color: red;

            }
            #div2{
                background-color: green;
            }
            #div3{
                background-color: blue;
            }
    </style>
   
    
</head>
<body>
    <p>窗口1</p>
    <div id="div1">A</div>
    <div id="div2">B</div>
    <div id="div3">C</div>
</body>
</html>

运行结果如下:

 

(2)为#div2元素设置绝对定位(position: absolute)也就是将上面的绿色盒子B拎出来

代码如下:

<head>
    <style>
     div{
                width: 100px;
                height: 100px;
                margin: 3px;

            }
            #div1{
                background-color: red;

            }
            #div2{
                background-color: green;
                position: absolute;
                left: 250px;
                top: 58px;
            }
            #div3{
                background-color: blue;
            }
            #p1{
                display: block;
                padding-left: 250px; 
            }
    </style>
</head>
<body>
    <b>窗口1</b> <b id="p1">窗口2</b>
    <div id="div1">A</div>
    <div id="div2">B</div>
    <div id="div3">C</div>
   
</body>
</html>

运行结果如下:

 

为B设置绝对定位后,B被拎出来,而此时原来在B下面的C则会占据B的位置。

四、浮层效果

 绝对定位常常被用来创建浮层效果。比如一个弹出的对话框、一个菜单或者一个提示框。这些浮层就像是排队中的那个人被放到了队伍的上方或者旁边,独立于队伍之外,却又能吸引人们的注意力。它们可以覆盖在其他元素之上,不受文档流中元素的影响,给用户提供特定的信息或交互功能。

为了更清晰的看出浮层效果,我将A的偏移像素调小使他在B的上方,代码如下:

<head>
    <style>
           div{
                width: 100px;
                height: 100px;
                margin: 3px;
 
            }
            #div1{
                background-color: red;
                width: 50px;
                height: 50px;
                position: absolute;
                left: 50px;
                top: 50px;

            }
            #div2{
                background-color: green;
                
            }
            #div3{
                background-color: blue;
            }
            article{
                width: 500px;
                height: 500px;
                background-color: gray;
                position: absolute;
                left: 100px;
                top: 100px;
               
            }
    </style>
</head>
<body>
    <article>
        <div id="div1">A</div>
        <div id="div2">B</div>
        <div id="div3">C</div>
    </article>
    
   
</body>
</html>

 运行结果如下:

给A红色盒子添加绝对定位元素后则有了浮层,B绿色盒子则占据A红色盒子原来的位置,其中A红色盒子的移动位置是相对于它的上层元素article(即灰色盒子) 而言的。 

五、特点

1、如果父级元素有定位,则以最近一级的有定位父级元素为参考点移动位置;若没有父级元素或父级元素没有定位,则以浏览器为准定位;

2、绝对定位会脱离文档流,不占有原先位置,不会对其周围的元素布局产生影响。 

3、设置了绝对定位的盒子,都会有专属的浮层,有几个绝对定位的盒子,就有几个浮层。

 六、总结

绝对定位在 CSS 布局中有着重要的作用。它可以让我们灵活地控制元素的位置,实现各种独特的布局和交互效果。就像排队中的特立独行者一样,绝对定位的元素在网页中也能展现出与众不同的魅力。

可以利用绝对定位的特性,制作下面的图案

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        article{
            width: 500px;
            height: 500px;
            background-color: gray;
            position: absolute;
                left: 100px;
                top: 100px;
        }
        #div1{
                width: 50px;
                height: 50px;
                background-color: white;
                position: absolute;
                left: 100px;
                top: 100px;

            }
            #div2{
                width: 50px;
                height: 50px;
                background-color: white;
                position: absolute;
                right: 100px;
                top: 100px;
            }
            #div4{
                width: 25px;
                height: 25px;
                background-color: green;
                position: absolute;
                left: 12.5px;
                top: 12.5px;
            }
            #div3{
                width: 50px;
                height: 50px;
                background-color: red;
                position: absolute;
                left: 225px;
                top: 225px;
            }
            #div5{
                text-align: center;
                width: 300px;
                height: 50px;
                background-color: white;
                position: absolute;
                left: 100px;
                bottom: 100px;

            }
    </style>

</head>
<body>
    <article>
        <div id="div1"></div>
        <div id="div2"></div>
        <div id="div3">
            <div id="div4"></div>
        </div>
        
        <div id="div5"></div>
    </article>
</body>
</html>

其中鼻子(红绿盒子)利用绝对定位的浮层效果,使绿色盒子位于红色盒子上方。为了更方便的使绿色盒子位于红色盒子的中间,我们可以在红色盒子(#div3) 内再加一个盒子(#div4),使其称为绿色的上层元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值