css中关于position属性的探究(原创)

关于position属性的设置,头脑中一直觉得不是很清楚,所以借助这次机会单独自己测试了一下,记作学习笔记。

首先,css的position属性包含下面四种设置情况:

  1. static:默认属性。指定元素按照常规的文档内容刘(从左到右,从上到下)进行定位。
  2. absolute:独立定位,它的定位要么是相对于最近的定位祖先元素,要么是相对于文档本身。
  3. fixed:该值指定元素是相对于浏览器窗口进行定位的。不会随着文档其他部分而滚动。
  4. relative:元素按照常规文档流进行布局,它的定位相对于文档流中的位置进行调整。

上面是定义,下面开始我的测试:

演示代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
  <style>
    *{
      margin:0;
      padding:0;
    }
    #father{
      width:300px;
      height:300px;

background:black;

}
    #child1{
      width:100px;
      height:100px;

background:blue;

}
    #child2{
      width:100px;
      height:100px;
      background:yellow;
    }
    #cousin{
      width:100px;
      height:100px;

background:green;

}
  </style>
</head>
<body>
<div id="father">
  <div id="child1">child1</div>
  <div id="child2">child2</div>
</div>
<div id="cousin">cousin</div>
</body>
</html>

上述代码在浏览器中展示的样式:

case1:

测试最简单的fixed,首先我们把id为father的元素设置为fixed

#father{
  width:300px;
  height:300px;
  background:black;
  position:fixed;
  top:100px;
  left:100px;

}

为了展示浏览器滚动情况下,元素位置相对于浏览器窗口不动,将cousin设置为

#cousin{
  width:100px;
  height:2000px;

background:green;

}

效果:

滚动滚动条,father元素的位置不变

case2:

接下来主要区分relative和absolute的情况

删除之前的设定,重新设置child1的元素如下

#child1{
  width:100px;
  height:100px;
  background:blue;
  position:relative;
  top:100px;
  left:100px;

}

预测效果:元素并不脱离文档流,但是偏离原来的位置,因为只设定了这么一个元素的position,因此偏离应该是相对于文档。

效果:(不出所料,只有child1偏离了原来位置,哈哈哈哈)

好,现在在上面的基础上,修改father元素的position,变成relative

#father{
  width:300px;
  height:300px;
  background:black;
  position:relative;
  top:100px;
  left:100px;
}

预测效果:整个father元素偏离原来位置,child1和child2元素相对于father的位置不变,cousin的位置同样也不变。

效果:(不出所料,贼哈哈哈哈)

接着,关键的来了,看一下absolute和relative的区别,将上面father元素的position修改为absolute

#father{
  width:300px;
  height:300px;
  background:black;
  position:absolute;
  top:100px;
  left:100px;

}

预测效果:absolute因为会使元素脱离原来的位置,所以后面的元素会顶上去,这一点有点像浮动,但是其实我们能控制它的具体位置,所以比浮动更强一点。

效果:(不出所料,呀吼吼吼)

此时,紧接着我们再设置cousin的属性,将他也absolute起来,看它是相对于谁来设定位置

#cousin{
  width:100px;
  height:100px;
  background:green;
  position:absolute;
  top:100px;
  left:100px;

}

预测效果:因为cousin没有父元素,所以它应该是会按照文档来进行绝对定位,和father没关系

效果:(不出所料,我真是佩服自己)

我们再把cousin的position改为relative,此时会怎么样呢

#cousin{
  width:100px;
  height:100px;
  background:green;
  position:relative;
  top:100px;
  left:100px;

}

预测效果:因为father元素已经脱离了原来的文档流,所以cousin元素会顶到最前面,此时的相对定位,就是相对于文档,所以cousin的位置应该不会改变。

效果:(不出所料,我感觉自己快超神了)

再次,我们把father元素的position改回为relative,此时father元素回归文档流,把cousin元素顶回原来的位置,也就是father元素的后面

#father{
  width:300px;
  height:300px;
  background:black;
  position:relative;
  top:100px;
  left:100px;

}

预测效果:因为father回到文档流中了,cousin元素只好屈居father后面,而他本身的绝对定位使得他的top是相对father元素在文档流中的位置来设定的,所以cousin的top应该会在father正下方的位置,注意是文档流中的位置,而非重新定位后的位置

效果:(不出所料,妈妈喊我回家吃饭了)

总结一下:

  1. static就是默认设定,此时top,left,right,buttom无效,不再阐述
  2. fixed就是相对于浏览器窗口来进行定位,就像有些网站上固定在窗口中,挥之不去的小广告,跟着你走
  3. relative不会使得元素脱离文档流,元素仍然在原来的位置占有空间,而显示出来是偏离的位置,同时,如果父元素是relative或者absolute的话,就相对于父元素进行偏离
  4. absolute会使得元素脱离文档流,类似于flow浮动,同样,如果父元素是relative或者absolute的话,就相对于父元素进行偏离
  5. 注意所有元素的位置定位都是根据在文档流中原来的位置,而非top,left,right,buttom等设定后显示出来的位置,切记切记。

原创内容,转载请注明出处~

吃饭吃饭~

时间: 2024-10-12 17:56:18

css中关于position属性的探究(原创)的相关文章

CSS中的Position属性和Float属性

Css中的position很重要,常用有以下几个值:static,relative,absolute,fixed.Inherit. Static:静态定位.如果你没有设置position属性,那么缺省就是static.top.left.right.bottom等 属性,在static的情况下是无效的,要使用这些属性,必须把position设置为其他三个值之一. Relative:相对定位.元素将按照静态定位时的位置进行调整,在静态定位中分配给元素的空间仍会分 配给他,他两边的元素不会向它靠近来填

css中的position属性

在css布局中,position发挥了极其重要的作用,很多的网页布局都要用position来完成.position有四个属性值static.absolute.relative.fixed. static 这个属性表示默认的位置,在设置它的时候,可以取消继承属性,在一般情况下则不需要设置这个属性. absolute 这个属性表示绝对定位.绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置就会相对于最初的包含块.元素原先在正常文档流中所占的空间会关闭,就好像该

深入理解css中的定位属性:position

深入理解css中的定位属性:position 在网页设计中,position属性的使用是非常重要的.有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难. position属性共有四种不同的定位方法,分别是static.fixed.relative.absolute. 第一部分:static static定位是HTML元素的默认值,即没有定位,元素出现在正常的流中,因此,这种定位就不会收到top,bottom,left,right的影响. 如html代码如下: <div class=&qu

对CSS中的Position、Float属性的一些深入探讨

非常好的一篇文章,特此转载出来,文章转自:http://www.cnblogs.com/coffeedeveloper/p/3145790.html 对于Position.Float我们在平时使用上可以说是使用频率非常高的两个CSS属性,对于这两个属性的使用上面可能大多数人存在一些模糊与不清晰的地方.本文主要对这两个属性使用上的一个介绍以及两个属性交叉使用上的一些探讨. 本文主要探讨点: Position.Float属性的基本使用方法 Position.Float属性对元素所造成的影响 Posi

深入理解css中的margin属性

转载自  http://www.cnblogs.com/zhuzhenwei918/p/6124263.html 深入理解css中的margin属性 之前我一直认为margin属性是一个非常简单的属性,但是最近做项目时遇到了一些问题,才发现margin属性还是有一些"坑"的,下面我会介绍margin的基本知识以及那些"坑".这篇博文主要分为以下几个部分: margin--基础知识 margin--在同级元素(非父子关系)之间应用 margin--在父元素和子元素之间

CSS中的z-index属性如何使用

原文:CSS中的z-index属性如何使用 z-index属性介绍# 只有设置了定位我们才会使用到该z-index属性,如:固定定位.相对定位.绝对定位. 定位元素默认的z-index属性值是0. 如果2个定位的元素都没有设置z-index属性,后者会覆盖到前者. 如果2个定位的元素都设置了z-index属性,并且数值一样大还是后者会覆盖到前者. z-index属性的属性值大的就会覆盖小,就是设置元素的层级. z-index属性实践# 用实践证明这句话,如果2个定位的元素都没有设置z-index

CSS中的!important属性用法

关于CSS的运用技巧有很多, 今天主要探讨一下CSS中 !important 这个属性的用法.在CSS的使用中,遇到最多的问题就是不同浏览器之间的兼容问题. 由于IE并不严格执行W3C标准, 而又几乎垄断了浏览器市场. 所以作为一名合格的网站制作人员, 必须要针对不同的浏览器进行微调. 实现不同浏览器之间兼容的方法有很多, 比如利用JS探测用户的浏览器类型,从而调用不同的样式表. 或者就是利用!important 属性来实现微调的效果. 下面是具体的例子. 下面是一段普通的 DIV 代码: 下面

css中之margin属性

css中之margin属性 css中的margin属性看似简单,但是有时稍有不慎,就会造成错误.这篇博文我会和大家分享将margin属性用在父元素和子元素之间可能出现的状况. 例1: 效果如下所示: 对于这样的结果毫无疑问,可是如果我们希望绿色的div可以靠下面一些,即上边不要紧贴着红色div.既然是两个div的间距,我们可以在绿色div上使用margin-top来使之分离吗?看下面的例子. 例2 我们在上面(例1)的代码中加margin-top:50px;于绿色div的css中,效果如下所示:

css中background背景属性概

css中background背景属性概 background:url(背景图片路径)  no-repeat;/*不重复默认在左上方*/ background:url(背景图片路径)  no-repeat center;/*不重复背景图片中间显示*/ background:url(背景图片路径)  no-repeat bottom center;/*不重复背景图片底部中间显示*/ background:url(背景图片路径)  no-repeat right top;/*不重复背景图片右上方显示*