美文网首页
小白理解css中position属性及z-index属性

小白理解css中position属性及z-index属性

作者: Simple_Code | 来源:发表于2018-06-04 14:03 被阅读18次

在网页制作中,position属性的使用是非常重要的。所以熟悉这个属性也至关重要。

position属性共有四种不同的定位方法,分别是static、fixed、relative、absolute,sticky。最后将会介绍和position属性密切相关的z-index属性。

第一部分:position: static

static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中,因此,这种定位就不会收到top,bottom,left,right的影响。

#css代码如下:

    .wrap {
        width: 300px;
        height: 300px; 
        background: red;
    }
    .content {
        position: static; 
        top:100px; 
        width: 100px;
        height: 100px; 
        background: blue;
    }
#html代码如下:

    <div class="wrap">
        <div class="content"></div>
    </div>

效果图:


image.png

我们发现,虽然设置了static以及top,但是元素仍然出现在正常的流中。

第二部分:fixed定位

fixed定位是指元素的位置相对于浏览器窗口是固定位置,即使窗口是滚动的它也不会滚动,且fixed定位使元素的位置与文档流无关,因此不占据空间,且它会和其他元素发生重叠。

#css代码如下:

    body {
        height:1500px;
        background: green;
        font-size: 30px;
        color:white;
    }
    .content {
        position: fixed;
        right:0;bottom: 0;
        width: 300px;height: 300px;
        background: blue;
        text-align: center;
    }
#html代码如下:

    <div class="content">
        我是使用fix来定位的!!!所以我相对于浏览器窗口,一直不动。
    </div>

效果图如下:


image.png

即右下角的div永远不会动,就像经常弹出来的广告!!!

第三部分:relative定位

相对定位元素的定位是相对它自己的正常位置的定位。

#css代码如下:

    .pos_bottom {
        position:relative;
        bottom:-20px;
    }
    .pos_right {
        position:relative;
        left:50px;
    }

#html代码如下:

    <h2>这是位于正常位置的标题</h2>
    <h2 class="pos_bottom">这个标题相对于其正常位置向下移动</h2>
    <h2 class="pos_right">这个标题相对于其正常位置向右移动</h2>

效果图如下:


image.png

弄清楚了relative是如何移动的,下面我们看一看移动之后是否会产生其他的影响。

#css代码如下:

    h2.pos_top {
        position:relative;
        top:-35px;
    }
    p {
        background: yellow;
    }

#html代码如下:

    <h2>这是一个没有定位的标题</h2>
    <h2 class="pos_top">这个标题是根据其正常位置向上移动</h2>
    <p><b>注意:</b> 即使相对定位元素的内容是移动,预留空间的元素仍保存在正常流动。</p>
image.png

即使相对元素的内容移动了,但是预留空间的元素仍然保存在正常流动,也就是说相对移动之后,不会对下面的其他元素造成影响。

第四部分:absolute定位

例1:

绝对定位的元素相对于最近的已定位父元素,如果元素没有已定位的父元素,那么它的位置相对于<html>。

#css代码如下:

    body {
        background:green;
    }
    .parent {
        width: 500px;
        height: 500px;
        background: #ccc;
    }
    .son {
        width: 300px;
        height: 300px;
        background: #aaa;
    }
    span{ position: absolute;
        right: 30px;
        background: #888;
    }
#html代码如下:

    <div class="parent">
        <div class="son">
            <span>absolute(绝对定位)</span>
        </div>
    </div>

效果图:


image.png

即我只在span中设置了position:absolute;而在其父元素中都没有,于是它的位置是相对于html的。

例2:

相对于例1我们只修改

.son {
        position: relative;
        width: 300px;
        height: 300px;
        background: #aaa;
    }

效果图:


image.png

于是,我们发现现在span的位置是相对于设有position属性的class为son的父元素的。

例3:

相对于例1我们只修改

    .parent {
        position: absolute;
        width: 500px;
        height: 500px;
        background: #ccc;
    }

效果图:


image.png

于是我们发现,现在span的定位是相对于具有position:absolute的属性的class为parent的父元素。

例4:

    .parent {
        position:fixed;
        width: 500px;
        height: 500px;
        background: #ccc;
    }

相对于例1,我添加了fixed的position属性,发现结果和例3是一模一样的。

例5:

    .parent {
        position: static;
        width: 500px;
        height: 500px;
        background: #ccc;
    }

相对于例1,我添加了static的position属性(即html的默认属性),结果和例1是一样的。

第五部分:重叠的元素--z-index属性

首先声明:z-index只能在position属性值为relative或absolute或fixed的元素上有效。
基本原理是:z-index的值可以控制定位元素在垂直于显示屏幕方向(z轴)上的堆叠顺序(stack order),值大的元素发生重叠时会在值小的元素上面。

第六部分:脱离文档流导致的问题

我们知道如果使用position:absolute和position:fixed都会导致元素脱离文档流,由此就会产生相应的问题。举例如下:

<!DOCTYPE html>
<html>
<head>
    <title>position</title>
    <style>
        .div1{
            background-color: red;
            padding:20px;
        }
        .div2{
            width: 200px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="div1">
        <div class="div2"></div>
    </div>
</body>
</html>

这时效果如下:


image.png

即子元素将父元素撑了起来。

但是一旦子元素的position为fixed或者是absolute,那么它就会脱离文档流,这样的后果是父元素无法被撑开,如下所示:
<!DOCTYPE html>
<html>
<head>
    <title>position</title>
    <style>
        .div1{
            background-color: red;
            padding:20px;
            position: relative;
        }
        .div2{
            position: absolute; // 添加position:absolute使其脱离文档流
            width: 200px;
            height: 200px;
            background-color: blue;
        }
    </style>
</head>
<body>
    <div class="div1">
        <div class="div2"></div>
    </div>
</body>
</html>
image.png

解决方法1:在js中设置父元素高度等于子元素的高度。

解决方法2:给父元素强行设置高度。(对于宽度导致的类似问题就强行设置宽度)

相关文章

网友评论

      本文标题:小白理解css中position属性及z-index属性

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