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

在网页制作中,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:给父元素强行设置高度。(对于宽度导致的类似问题就强行设置宽度)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容