`
oham_一1一
  • 浏览: 50084 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

CSS 常用属性笔记——position

阅读更多

1.position  属性

      用于设置页面元素的位置,

     可以指定下几个值:

     1) static: static定位就是不定位,出现在哪里就显示在哪里,这是默认取值,只有在你想覆盖以前的定义时才需要显示指定,以DIV做root节点为例:

<head>

<style type="text/css">

 

div#root

{

width:200px;

height:200px;

background-color: #E0E0E0;

}

 

div#c1

{

position:static;

width:50px;

height:50px;

background-color: #FF9797;

}

 

div#c2

{

position:static;

width:50px;

height:50px;

background-color: #C1FFE4;

}

 

</style>

</head>

<body>

    <div id="root">

        <div id="c1">c1</div>

        <div id="c2">c2</div>

    </div>

</body>

 

效果如下:

position为static,则元素以流形式出现(在下看来好像是竖着接起来),当然,要结合容器父子关系。

 

        2).relative:relative 就是当前元素相对于上一个同级元素(若有)position为static时的位置,或者是直接父容器的当前位置而言(若无同级元素),

请看码:

 

<head>

<style type="text/css">

 

div#root

{

width:200px;

height:300px;

background-color: #E0E0E0;

}

 

div#c1

{

position: static;

top:10px;    //对于static而言,指定top,left等似乎毫无用处

width:100px;

height:100px;

background-color: #FF9797;

}

 

div#c2

{

position: static;

top:10px;    //对于static而言,指定top,left等似乎毫无用处

width:100px;

height:100px;

background-color: #C1FFE4;

}

 

div#c2_1

{

position: relative;

top:10px;

width:45px;

height:45px;

background-color: #FFFF6F;

}

 

div#c3

{

position:relative;

top:10px;

left:20px;

width:100px;

height:100px;

background-color: #ACD6FF;

}

 

div#c3_1

{

position:relative;

top:10px;

left:10px;

width:45px;

height:45px;

background-color: #FFFF6F;

border-bottom: 1px solid #000000;

}

 

div#c3_2

{

position:relative;

top:10px;

left:10px;

width:45px;

height:45px;

background-color: #FFFF6F;

border-bottom: 1px solid #000000;

}

 

</style>

</head>

 

<body>

    <div id="root">

        <div id="c1">c1

        </div>

        <div id="c2">c2

             <div id="c2_1" >c2_1</div>

        </div>

        <div id="c3">

             <div id="c3_1" >c3_1</div>

             <div id="c3_2" >c3_2</div>

        </div>

    </div>

</body>

效果如下:



 

       对于C2_1而言,它有上一个同级元素c2字符串,指定top为10px,则其意为c2_1的top离c2字符串10px;

        对于c3而言,它有上一个同级元素c2,与c2_1类似。

        对于c3_1,它没有同级元素,所以top:10px;left:10px;是相对于c3当前位置而言(建议改div#c3里的position为static试一试), 而对于c3_2,它有上一个同级元素c3_1,其top:10px;left:10px;是相对于c3_1 position指定为static时的位置而言的,但又由于position为static时top:10px;left:10px;根本无效(相当于top:0px;left:0px;),所以变成上图情况。

 

     3)absolute,absolute绝对定位,“绝对”是对比relative而言来说的,绝对定位是相对于其定位好的(position指定除static以外的值)上一级父容器(一级一级上),如果没有这个容器,那就使用浏览器初始的,也就是body或者html元素,绝对定位不用看同级的元素。

打码如下:

 

<head>

<style type="text/css">

 

 body

{

border-top: 1px solid #000000;

border-left: 1px solid #000000;

border-right: 1px solid #000000;

border-bottom: 1px solid #000000;

}

div#root

{

position: static;   //父div position 为static 或干脆不指定时,就不能称其为 “定位好的”

width:200px;

height:300px;

background-color: #E0E0E0;

}

 

div#c1

{

position: absolute;

top : 10px;

width:100px;

height:100px;

background-color: #FF9797;

}

</style>

</head>

 

<body>

    <div id="root">

        <div id="c1">c1

        </div>

    </div>

</body>

 
    c1的直接父容器是root,但root不是定位好的,在往上就是body,但body也是没有明确定位的,所以此处c1的定位好的父容器没有,因此此处c1的top:10px只能相对于<html>元素而言:

 由上图示例看出,c1没看root 和body的脸色(因为定位不明确),而直接向<html>看齐。若给body或则root指定position除static以外的值,c1的top:10px是相对于做了明确定位的body或root来说的,结果如下:

 

        4)fixed, fixed才是真正的绝对定位,其位置永远相对浏览器位置来计算。
将上面absolute的代码修改一下,div#root和div#c1如下:

 

div#root

{

position: absolute;

top :40px;

width: 200px;

height: 300px;

background-color: #E0E0E0;

}

 

div#c1

{

position: fixed;

top:35px;

left:35px;

width:100px;

height:100px;

background-color: #FF9797;

任凭root 的位置怎么改,c1的位置相对于浏览器窗口而言是固定的top:35px;left:35px;
 
此处推荐一篇文章,总结的很好:http://developer.51cto.com/art/201009/226498.htm
 
2.position之于div嵌套
若阁下有拿absolute小节的示例代码运行一下也许会发现,当把div#root的position改成fixed或absolute时会看到,body的边框坍塌了(若此处body的css指定了width与height就不同了):

 原因在下姑且就以上所总结认为:是因为当root的position为fixed时,root根本无视body这个父容器的存在,因此,body父容器也无需照顾root以及其下的子元素对自身进行调整。
对于absolute,在下试过对body的css加入position指定,试图将root与body的关系紧密一些(absolute不看没有定位好的父容器的),情况如下:
指定relative时::

 指定absolute和fixed时只剩一点:

 鉴于以上,在下推断absolute只拿父容器作定位参考而已,与relative要照顾同级元素的情形不同,可以指定root的position为relative试试,此处不再贴图了,情况会有所不同。
于是乎在下臆断为:对于某个未明确size的父容器,其size将在最终渲染时由其自身的position以及子元素的position来确定。之于如何个确定法不妨用在下absolute的示例代码试一试。
 
 本文或许有不少谬误,毕竟在下不是搞前端的,目的只是笔记笔记,阅者须慎。

 

 

  • 大小: 984 Bytes
  • 大小: 1.6 KB
  • 大小: 999 Bytes
  • 大小: 617 Bytes
  • 大小: 719 Bytes
  • 大小: 1.8 KB
  • 大小: 1.2 KB
  • 大小: 1.1 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics