美文网首页
绝对定位absolute

绝对定位absolute

作者: WangYatao | 来源:发表于2016-11-07 13:03 被阅读1446次

    absolute包裹性
    float是个带有方位的display:inline-block属性,absolute也是个inline-block化属性。

    在一个空div中添加一张图片,可以看到图片位居div左侧,而此时div的长度为100%

    Paste_Image.png

    现在我们给div添加position:absolute; padding:5px; 发现div的宽度变窄了并且包裹在图片四周,这时div的高和宽是自适应,会随着图片的大小变化而变化,absolute具有包裹性,同样的float 也具有包裹性
    当把position:absolute;修改为float:left;发现效果和absolute是一样的
    absolute与float的包裹性等同于inline-block属性,不同的是float具有方向性,而inline-block是水平排列

    Paste_Image.png
            <style type="text/css">
                  .abs{
                        background: #ADADAD;
                      padding: 5px;
                        position: absolute;
                  }
            </style>
    

    absolute致使父元素的高度塌陷
    绝对定位的元素脱离了文档流(不占据之前的空间),而浮动元素依旧在文档流中浮动(依然占据之前空间)

    当我们给空div添加一张图片,只给div设置padding:20px;然后给图片设置position:absolute;会发现div的高度只有padding这20px,并没有根据图片的高度自适应,absolute使图片脱离文档流,使它在div中不占据空间,所以父元素div的高度发生了塌陷,同样的我试了下将图片的position:absolute;属性设置为float:left;发现具有同样的特性致使父元素div的高度塌陷。

    Paste_Image.png

    对于float导致的父元素div塌陷,我们根据图片大小给父元素div设置了一个高度大小 从而再次使得div包裹图片

    Paste_Image.png

    但是存在缺点,就是这个高度是固定的,如果我们想添加多个图片,多的使得图片产生自动换行显示,那么这个高度又需要修改,这里有一个方法就是让div高度自适应它们的高度,删除原先的父元素div固定height,给父类元素div设置属性overflow:hidden;

    Paste_Image.png

    可以看到div自动适应高度

    Paste_Image.png
            <style type="text/css">
                  .abs{
                        background: #ADADAD;
                      padding: 20px;
                        overflow: hidden;
                  }
                  div img{
                        float: left;
                  }
            </style>
    

    absolute跟随性
    给元素设置position:absolute;是元素具有跟随性,例如在同一个div中,存放三张图片,都不设置任何属性的时候,他们水平排列着。

    Paste_Image.png

    给第二张图片设置一个绝对定位(position:absolute;)属性可以发现,第三张图片紧靠在第一张图片后面,而第二张图片漂浮到了第三张图片上面(第二张图片脱离了文档流,并且不占空间),并且还是紧靠在第一张图片后面,这就是绝对定位的跟随性

    Paste_Image.png
           <style type="text/css">
    
                .qq{
                     width: 200px;
                     background: #adadad;
                }
                .close{
                     width: 50px;
                     position: absolute;
                }
                .wx{
                     width: 200px;
                     background: #ADADAD;
                }
           </style>
    

    absolute的无依赖性
    absolute的无依赖性,就是不依赖relative的限制来进行定位 首先先演示下父类元素设置relative下的定位,首先要给父类元素设置relative,子元素使用absolute 配合left,top进行定位,这里的left和top根据父类元素进行定位

    Paste_Image.png
                .box{
                     position: relative;
                }
                .qq{
                     width: 300px;
                     background: #adadad;
                }
                .close{
                     width: 50px;
                     position: absolute;
                     left: 250px;
                     top: 0;
                }
    

    这种方法给右上角图标进行定位的缺点是要有relative来限制absolute,如果不给absolute的父元素添加relative,那么absolute的元素就会根据body进行定位,当图片改变大小的时候,右上角图片就需要重新定位。比如当把图片变小,右上角的图片就显示在了偏右的位置,小图片依旧保持在left:250px;的位置,这就需要重新给小图片进行定位。

    Paste_Image.png

    如果使用margin配合absolute进行小图片的定位,就可以脱离父级元素relative的限制,实现无依赖定位,同样是上面的例子,现在取消父级元素relative的属性,使用margin进行定位

    Paste_Image.png
            .qq{
                     width: 200px;
                     background: #adadad;
    
                }
                .close{
                     width: 50px;
                     position: absolute;
                     margin-left:-50px ;
                     margin-top: 0;
    
                }
    

    使用margin和absolute配合进行定位,无论图片怎么改变大小,小图标始终定位在企鹅的右上角,不会偏离位置。

    Paste_Image.png

    absolute的容器拉伸特性
    absolute具有拉伸容器大小的特性,例如要实现一个距右边距200px的容器,可以设置容器属性position:absolute;left:0;top:0;right:200px;
    这里容器没有设置高度,就使用一张图片撑开它

    Paste_Image.png

    absolute不但可以拉伸容器,也可以拉伸内部元素,如果内部元素设置固定的长高,绝对定位是不能拉伸它的,当内部元素设置为百分比时,内部元素会随着外部容器的拉伸而拉伸。

                .box{
                     position: absolute;
                     left: 0;
                     top: 0;
                     right: 200px;
                     background: aquamarine;
                }
                .pic{
                     width: 30%; /* 图片设置百分比*/
                }
    
    Paste_Image.png

    相关文章

      网友评论

          本文标题:绝对定位absolute

          本文链接:https://www.haomeiwen.com/subject/yjkouttx.html