css 定位属性:position

强颜欢笑 提交于 2019-12-17 18:23:37

对于position一直存有一些疑惑,特别是相关联的z-index属性,更是有些摸不着头脑,今天好好学习一下position属性的各个值不同的表现形式

语法:

position:static | relative | absolute | fixed

默认值:static

取值:

static: 无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用

relative: 对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置

absolute: 对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义

fixed: 对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。IE6及以下不支持此参数值

说明:

检索对象的定位方式。

对应的脚本特性为position。

兼容性:

都支持,除IE6不支持fixed取值参数

 

上面的说法比较全面,但是不易理解,我做了一个demo页面,从实例出发,一目了然,代码如下:

View Code
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>css定位属性:position</title>
<meta name="keywords" content="" />
<meta name="description" content="" />
<style type="text/css">
*{margin: 0;padding: 0;}
body {font-size: 12px;color: #000;text-align: center;background: #fff;}
ul, ol {list-style: none;}
img {border: none;}
.clearfix:after {visibility: hidden;display: block;height: 0;font-size: 0;clear: both;}
.clearfix {*zoom: 1;}

.left {float: left;}
.right {float: right;}

.wrap {margin: 0 auto;width: 100%;text-align: left;}
.demoDesc {margin-bottom: 10px;}
.demoDesc dt {font-size: 14px;font-weight: 700;}
.demoDesc dd {text-indent: 2em;}

.demoWrap {margin-bottom: 10px;color: #fff;background: #ccc;}
.reference-1 {width: 100px;height: 100px;background: #000;}
.reference-2 {width: 100px;height: 100px;background: #01f;}
.demo {width: 100px;height: 100px;background: #f00;}
.demo .demo {width: 50px;height: 50px;background: #000;}

.demo-1 {margin: 10px;padding: 10px;border: 5px solid green;}
.demo-static {position: static;}

.demo-2 {margin: 10px;padding: 10px;border: 5px solid green;}
.demo-relative {position: relative;top: 5px;left: 5px;}

.demo-3 {position: relative;margin: 10px;padding: 10px;width: 400px;border: 5px solid green;}/*如果绝对定位的父元素,没有设置width属性值为auto以外的任何值,则在IE6下,绝对定位的元素left,right值会以父元素的padding为边界进行计算*/
.demo-absolute {position: absolute;top: 5px;left: 5px;}/*绝对定位的元素是参照有定位属性position且值不为static(即position: relative | absolute)的父级元素*/

.demo-4 {margin: 10px;padding: 10px;border: 5px solid green;}
.demo-fixed {position: fixed;top: 5px;left: 5px;}/*脱离文档流,不占位,IE6不支持,当成static来解析*/
.demo-fixed-2 {position: fixed;}/*游离到窗口外面去了*/
.demo-fixed-3 {position: fixed;bottom: 40px;margin-left: 110px;}/*设置top或者bottom垂直方向的值,然后使用margin正(负)值定位元素的横向坐标*/
</style>
</head>
<body>

<div class="wrap">
    <dl class="demoDesc">
        <dt>css定位属性:position</dt>
        <dd>定位方式之一,脚本特性为 position</dd>
        <dd>position: static | relative | absolute | fixed</dd>
        <dd>static: 无特殊定位,对象遵循正常文档流。(top,right,bottom,left等属性不会被应用)</dd>
        <dd>relative: 对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。(如果绝对定位的父元素,没有设置width属性值为auto以外的任何值,则在IE6下,绝对定位的元素left,right值会以父元素的padding为边界进行计算)</dd>
        <dd>absolute: 对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。(绝对定位的元素是参照有定位属性position且值不为static(即position: relative | absolute)的父级元素)</dd>
        <dd>fixed: 对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。(IE6及以下不支持此参数值)</dd>
    </dl>
    <!-- position: static -->
    <div class="demoWrap demo-1">
        <div class="reference">我是参照物</div>
        <div class="demo demo-static">position: static</div>
    </div>

    <!-- position: relative 父元素也为 relative -->
    <div class="demoWrap demo-2">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-relative">
            <div class="demo demo-relative">position: relative;top: 5px;left: 5px;</div>
            <p>position: relative;top: 5px;left: 5px;</p>
        </div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: relative 父元素也为 absolute -->
    <div class="demoWrap demo-3">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-absolute">
            <div class="demo demo-relative">position: relative;top: 5px;left: 5px;</div>
            <p>position: absolute;top: 5px;left: 5px;</p>
        </div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: absolute 父元素也为 absolute -->
    <div class="demoWrap demo-3">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-absolute">
            <div class="demo demo-absolute">position: absolute;top: 5px;left: 5px;</div>
            <p>position: absolute;top: 5px;left: 5px;</p>
        </div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: absolute 父元素也为 static -->
    <div class="demoWrap demo-3">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-static">
            <div class="demo demo-absolute">position: absolute;top: 5px;left: 5px;</div>
            <p>position: static;绝对定位的元素是参照有定位属性position且值不为static(即position: relative | absolute)的父级元素</p>
        </div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: fixed -->
    <div class="demoWrap demo-4">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-fixed">position: fixed;top: 5px;left: 5px;</div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: fixed 不设置top与left等位置信息(游离到窗口外面去了) -->
    <div class="demoWrap demo-3">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-fixed-2">position: fixed;不设置top与left等位置信息(游离到窗口外面去了)</div>
        <div class="reference-2">我是参照物</div>
    </div>

    <!-- position: fixed 设置top或者bottom垂直方向的值,然后使用margin正(负)值定位元素的横向坐标 -->
    <div class="demoWrap demo-3">
        <div class="reference-1">我是参照物</div>
        <div class="demo demo-fixed-3">position: fixed;bottom: 40px;margin-left: 110px;(这是一个强大的特性)</div>
        <div class="reference-2">我是参照物</div>
    </div>
</div>

</body>
</html>

通过demo,我得出以下几点:

a 如果绝对定位的父元素,没有设置width属性值为auto以外的任何值,则在IE6下,绝对定位的元素left,right值会以父元素的padding为边界进行计算

b 绝对定位的元素是参照有定位属性position且值不为static(即position: relative | absolute)的父级元素

c fixed元素脱离文档流,不占位。IE6把fixed当成static来解析

d 如果元素相对或、绝对,固定定位(position: relative | absolute | fixed),那么元素会漂浮在正常文档流之上(尽管我们没有设置z-index属性值)

e 还没想到...

代码可直接拷贝运行,结合显示效果,稍微琢磨一下就明白了。

希望本文对你有帮助,demo里面的配色直接无视吧,我是个没有美感的人,55555

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!