CSS相对定位和绝对定位

为什么要学定位

定位是CSS中的难点和重点,特别是后面学javascript特效时候,比如实现下拉菜单、弹框等,要盖住下面内容又不会影响下面内容,比如要超出盒子一部分,比如屏幕中有一个小弹窗飘来飘去的,再比如要放在盒子中任意位置,都必须用定位来做,一定要搞清楚。
定位类似于浮动,脱离标准流,但又不同于浮动,它可以放在任何地方。

元素的定位属性

元素的定位属性主要包括定位模式和边偏移两部分。
1.边偏移:告诉盒子往哪儿走
2.定位模式(定位的分类)

一、静态定位(static)

所有元素的默认定位方式,网页中所有元素都默认的是静态定位,其实就是标准流的特性。

静态定位唯一的用处,就是取消定位。

例如有些网站的栏目,往下划的时候会出现,往上划到顶部的时候又消失了,栏目一会儿有定位一会儿没有定位,实现方式就是一会儿加个固定定位,一会儿用static取消固定定位。

二、相对定位(relative)--自恋型

相对定位是将元素相对于它在标准流中的位置进行定位,即每次移动的位置,是以自己的左上角为基点移动的。例如设置了margin,则以margin后的左上角位置来移动。

对元素设置相对定位后,可以通过边偏移属性来改变元素位置,但它在文档流中的位置继续占有。
<style>
        .top{
            height: 100px;
            width: 100px;
            background-color: hotpink;
        }
        .buttom{
            height: 200px;
            width: 200px;
            background-color: yellow;
        }
    </style>
    <body>
        <div class="top"></div>
        <div class="buttom"></div>
    </body>

CSS相对定位和绝对定位

<style>
        .top{
            height: 100px;
            width: 100px;
            background-color: hotpink;
            position: relative;
            top: 100px;
            left: 100px;
        }
        .buttom{
            height: 200px;
            width: 200px;
            background-color: yellow;
        }
    </style>
    <body>
        <div class="top"></div>
        <div class="buttom"></div>
    </body>

CSS相对定位和绝对定位

注意:
1.相对定位最重要的一点是,它可以通过边偏移移动位置,但是原来所占的位置,继续占有。
2.其次,每次移动的位置,是以自己的左上角为基点移动。
如果说浮动的主要目的是让多个块级元素一行显示,那么定位的主要价值是移动位置,让盒子到我们想要的位置上去。

三、绝对定位(absolute)--拼爹型

绝对定位不占有位置。
1.父级没有定位
若所有父元素都没有定位,或没有父亲,则以浏览器左上角为准对齐。

2.父级有定位
绝对定位是将元素依据最近的已经定位(绝对、固定或相对)的父元素(祖先)进行定位。例如父亲没有定位,爷爷有定位,则根据爷爷进行定位。

子绝父相

一般来说,子级是绝对定位的话,父亲要用相对定位。

CSS相对定位和绝对定位

因为如果父亲用绝对定位,它不占文档位置,后面的紫色盒子就会盖住蓝色的盒子,并不是我们想要的效果。

CSS相对定位和绝对定位

网站上经常用到的类似的小箭头,都是用绝对定位做的,因为绝对定位不占文档位置。

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

普通盒子左右居中用margin:aotu即可,但对于绝对定位的就无效了。

加了定位的或浮动的盒子,margin:auto就会失效。

可以用一下方法:
1.首先left:50%,此时盒子左边对齐浏览器中线;
2.然后margin-left:-a(a为盒子宽度的一半),让盒子往右走自己宽度的一半。

四、固定定位(fixed)--认死理型

1.固定定位元素跟父亲没有任何关系,只认浏览器;
2.固定定位完全脱标,不占位置,不随着滚动条滚动。

定位模式转换

跟浮动一样,元素添加了绝对定位和固定定位之后,元素模式也会发生转换,都转换为行内块元素,因此行内元素若添加了绝对定位、固定定位、浮动后,可以不用转换模式,直接给高度和宽度即可。
注意:行内块元素的高宽和内容有关系。

相关推荐