css的relative与absolute(一)

relative与absolute是position的两个值,本文对这两个值得关系进行了一个小实验

实验一:

首先定义了两个div元素,代码如下所示:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        width: 300px;
        height: 300px;
        background-color: yellow;
      }

      #div2{
        width: 50px;
        height: 50px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

效果如下所示:

现在我想实现把红色的小方块移动到右边,常规的想法就是将div1设置为position:relative,将div2的值设置为position:absolute,然后通过设置div2的top与left可以进行定位。代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        position: relative;
        width: 300px;
        height: 300px;
        background-color: yellow;
      }

      #div2{
        position: absolute;
         top: 50px;
        left: 200px;
        width: 50px;
        height: 50px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

如果div1不设置position:relative,会出现怎样的效果呢?代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        /* position: relative; */
        width: 300px;
        height: 300px;
        background-color: yellow;
      }

      #div2{
        position: absolute;
         top: 50px;
        left: 200px;
        width: 50px;
        height: 50px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

效果如下图所示:

效果基本没有变化,严格上讲,实际上是有一定的偏移的,这点可以通过margin进行调整,所以一般不建议过多的使用relative。

那设置div1的position为relative是不是就没有任何用处了呢?其实也不是这样的。

实验二:首先设置div1的position:relative,div2的position:absolute,并设置top与left(之所以设置top与left,是因为top与buttom同时出现的时候,top其决定作用,同理是left),代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        position: relative;
        width: 300px;
        height: 300px;
        background-color: yellow;
      }

      #div2{
        position: absolute;
        top: 250px;
        left: 200px;
        width: 400px;
        height: 400px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

效果如下图所示:

在这种情况下,正如实验一所示,div1的position几乎不起作用,div2是个自由的小天使,想到哪里就到哪里。但是如果给div1设置top与left之后呢?

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        position: relative;
        width: 300px;
        height: 300px;
        background-color: yellow;
        top:50px;
        left: 50px;
      }

      #div2{
        position: absolute;
        top: 250px;
        left: 200px;
        width: 400px;
        height: 400px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

效果如下图所示:

可以发现div2的位置就被div1限制住了,从此div2再也不是自由的小天使了,div2的偏移都是以div1位基准的了。

实验三:div1是包含div2的,可是如果div2定义了position:absolute,那个div2多余的部分就会在div1外部显示出来,即使div1设置了overflow: hidden也不会其作用,但是如果给div1加上position: relative;会怎样呢?代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{

        width: 300px;
        height: 300px;
        background-color: yellow;
        overflow: hidden;
      }

      #div2{
        position: absolute;
        top: 20px;
        left: 20px;
        width: 400px;
        height: 400px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

给div1加上position:relative,会出现什么样的效果呢?

代码如下:

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style type="text/css">
      #div1{
        position: relative;
        width: 300px;
        height: 300px;
        background-color: yellow;
        overflow: hidden;
      }

      #div2{
        position: absolute;
        top: 20px;
        left: 20px;
        width: 400px;
        height: 400px;
        background-color: red;
      }
  </style>
</head>
<body>
  <div id="div1">
    <div id="div2"></div>
  </div>
</body>
</html>

这时div1元素会很好的限制div2的溢出部分。

时间: 2024-08-29 21:08:14

css的relative与absolute(一)的相关文章

css之relative和absolute

relative限制定位 相对定位限制绝对定位left等属性. relative限制z-index层级 设置两个用绝对定位的div,分别为z-index:1的div1和z-index:2的div2,那么层级div2大于div1.如果用相对定位的div分别为z-index:4的div4和z-index:3的div3,div4为div1的父类,div3为div2的父类,则div1的层级大于div2,可以得出,此时的绝对定位不起作用,相对定位限制了绝对定位.但如果div3的z-index :auto;

css position: relative,absolute详解

关于CSS中 position在布局中非常重要,查了很多资料都说的很难理解,下面说说个人的理解: 语法: position: relative | absolute relative: 对象遵循常规流,并且参照自身在常规流中的位置通过top,right,bottom,left属性进行偏移时不影响常规流中的任何元素. absolute: 对象脱离常规流,使用top,right,bottom,left等属性进行绝对定位,盒子的偏移位置不影响常规流中的任何元素,其margin不与其他任何margin折

css定位relative,absolute

转自http://www.cnblogs.com/Jerry-Chou/archive/2011/11/02/2233094.html 1.先解释一下文档流 就是HTML的一种机制,块元素单独占一行(比如   div),内联元素不换行(a标签,img标签): 2.几种定位方式 2.1   static HTML默认定位方法,服从文档流(flow),自适应的,不需要我们设置. 2.2 relative 相对定位,相对于自己原来的位置(参照物是自己),可以使用bottom,top,left,righ

css中position属性(absolute|relative|static|fixed)的区别

position属性的相关定义:static:无特殊定位,对象遵循正常文档流; relative:对象遵循正常文档流; absolute:对象脱离正常文档流; fixed:对象脱离正常文档流 我们先来看看CSS3 Api中对position属性的相关定义: static:无特殊定位,对象遵循正常文档流.top,right,bottom,left等属性不会被应用. relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置.而其层叠通过z-

css position 应用(absolute和relative用法)

1.absolute(绝对定位) absolute是生成觉对定位的元素,脱离了文本流(即在文档中已经不占据位置),参照浏览器的左上角通过top,right,bottom,left(简称TRBL) 定位.可以选取具有定位的父级对象(下文将说到relative与absolute的结合使用)或者body坐标原点进行定位,也可以通过z-index进行层次分级.absolute在没有设定TRBL值时是根据父级对象的坐标作为始点的,当设定TRBL值后则根据浏览器的左上角作为原始点.具体案例如下: <!DOC

怕忘记了CSS中position的absolute和relative用法

CSS2.0中的定位确实有时会把人弄糊涂,所以今天给它记下来,同时供以后查阅.下面写的内容有一部分借鉴了w3cschool和divcss5这两个官方网站,在此处特别的说明一下 CSS2.0中position主要用于HTML元素的定位,在实际设计中还是非常有用的.但是对于学习者来说都会遇到相对定位和绝对定位到底如何使用,非常打脑壳 不管再咋个打脑壳,大家首要的还是记住position的几个属性值 static: HTML元素的默认定位方式 absolute: 将对象从文档流中拖出,使用left,r

CSS+DIV布局中absolute和relative区别

http://developer.51cto.com/art/201009/225201.htm CSS+DIV布局中absolute和relative区别 这里向大家简单介绍一下CSS+DIV布局中absolute和relative属性的用法和区别,定位为relative的元素脱离正常的文本流中,但其在文本流中的位置依然存在,而定位为absolute的层脱离正常文本流,但与relative的区别是其在正常流中的位置不在存在. 详解CSS+DIV布局定位 在用CSS+DIV进行布局定位的时候,一

CSS关于定位float、static、relative、absolute、fixed

html的对象是按照文档流的方式,从上而下,从左往右的布置对象/元素. static: 元素默认的定位方式,遵从基本的html布置规则 relative:相对定位,相对哪个对象呢? 相对的是元素本身的位置 <div class="div5"></div> <div class="div7"></div> <style>     div{         width:300px;         height

CSS+DIV布局中absolute和relative的区别

来源 :http://developer.51cto.com/art/201009/225201_1.htm   解释的很好.摘下来后面自己能看看. 区别:定位为relative的元素脱离正常的文本流中,但其在文本流中的位置依然存在,而定位为absolute的层脱离正常文本流,但与relative的区别是其在正常流中的位置不在存在. position各个属性值的定义: 1.static:默认值.没有定位,元素出现在正常的流中(忽略top,bottom,left,right或者z-index声明)