zoukankan      html  css  js  c++  java
  • 浅谈块级元素和行级元素的相对定位和绝对定位问题

      以前我所学到的关于定位问题仅仅知道absolute是绝对定位,它可以让元素脱离标准流上浮,并且和float相比它可以让元素重叠在一起,后面的元素覆盖在前面的元素上。
    relative是相对定位,它使元素固定在标准流上,并且占据一定的空间,不过和absolute一样,relative的任何移动都不影响其他标准流的元素。absolute和relative最常用的做法是给父类
    一个相对定位,给子类一个绝对定位,然后子类相对父类位置移动,比较容易控制元素在整个页面的位置。不过通过今天的实验我发现了一些新东西来和大家分享。
    ps:我使用的是谷歌浏览器,对于其他浏览器是否存在问题没有试验,如果大家发现什么问题请告诉我。

    1.俩个块级元素(或俩个行级元素)都仅仅absolute,但是没有设定left和top,它们会重叠在一起,然后后面的元素覆盖前面的元素。

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="utf-8"/>
        <title></title>
        <script src="../js/jquery-1.10.2.js"></script>
        <script></script>
        <style>
            *{margin:0;padding:0;}
            div:nth-of-type(1){position:absolute;width:200px;height:200px;background-color: blue;}
            div:nth-of-type(2){position:absolute;width:200px;height:200px;background-color: red;}
            span:nth-of-type(1){position:absolute;width:200px;height:200px;background-color:blue;}
            span:nth-of-type(2){position:absolute;width:200px;height:200px;background-color: red;}
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
        <span></span>
        <span></span>
    </body>
    </html>

    2.一个块级元素仅仅absolute,但是没有设定left和top,而另一个块级元素没有定位,他们不会重叠。行级元素就好玩了,大家可能在上面就已经发现行级元素没有内容,却能撑开宽高,没错就是定位引起的,当我们把背景颜色为蓝的行级元素的定位去掉,他将没有办法撑开宽高而消失,红色的块级元素和红色的行级元素重叠,依旧是后压前,蓝色的块级元素在最上面。

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="utf-8"/>
        <title></title>
        <script src="../js/jquery-1.10.2.js"></script>
        <script></script>
        <style>
            *{margin:0;padding:0;}
            div:nth-of-type(1){width:200px;height:200px;background-color: blue;}
            div:nth-of-type(2){position:absolute;width:200px;height:200px;background-color: red;}
            span:nth-of-type(1){width:200px;height:200px;background-color:blue;}
            span:nth-of-type(2){position:absolute;width:200px;height:200px;background-color: red;}
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
        <span></span>
        <span></span>
    </body>
    </html>

    3.将第二种情况变一下,给带有absolute的元素加上left:0;top:0;这时候所有的图片就全都重叠在一起了。

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="utf-8"/>
        <title></title>
        <script src="../js/jquery-1.10.2.js"></script>
        <script></script>
        <style>
            *{margin:0;padding:0;}
            div:nth-of-type(1){width:200px;height:200px;background-color: blue;}
            div:nth-of-type(2){position:absolute;left:0;top:0;width:200px;height:200px;background-color: red;}
            span:nth-of-type(1){width:200px;height:200px;background-color:blue;}
            span:nth-of-type(2){position:absolute;left:0;top:0;width:200px;height:200px;background-color: red;}
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
        <span></span>
        <span></span>
    </body>
    </html>

    4.之后我在想margin-left在定位之后是否能用,结果证明不但能用,还能和left一共用,效果是left和margin-left效果叠加,试验中我将left和margin-left效果叠加成0,所以在左上角。

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="utf-8"/>
        <title></title>
        <script src="../js/jquery-1.10.2.js"></script>
        <script></script>
        <style>
            *{margin:0;padding:0;}
            div{position:absolute;left:200px;top:0;margin-left:-200px;width:200px;height:200px;background-color: blue;}
            span{position:absolute;left:0;top:200px;margin-top:-200px;width:200px;height:200px;background-color: red;}
        </style>
    </head>
    <body>
        <div></div>
        <span></span>
    </body>
    </html>

    5.最后说一点很重要的东西——relative,书上定义的是relative:对象遵循常规流,并且参照自身在常规流中的位置通过toprightbottomleft属性进行偏移时不影响常规流中的任何元素。

    很长时间我都认为有relative 属性的元素在标准流定死的,不能覆盖带有absolute属性的元素,也就是说无法用z-index,但是这个理解是错误的,我在解决一个无法用absolute解决的问题,(这个问题是absolute会让元素重叠在一起,而relative不会)我试着用了一下relative,结果发现成功了,于是我找到z-index的适用情况明确包括relative,当relative元素和absolute元素的z-index的值相同时,absolute在上面。

    <!DOCTYPE html>
    <html>
    <head lang="en">
        <meta charset="utf-8"/>
        <title></title>
        <script src="../js/jquery-1.10.2.js"></script>
        <script></script>
        <style>
            *{margin:0;padding:0;}
            div:nth-of-type(2){position:absolute;left:0;top:0;width:200px;height:200px;background-color: red;z-index: 1;}
            div:nth-of-type(1){position:relative;width:200px;height:200px;background-color: blue;z-index:1;}
        </style>
    </head>
    <body>
        <div></div>
        <div></div>
    </body>
    </html>

  • 相关阅读:
    (转载)自己实现spring
    重装mysql步骤
    华为过滤字符串(java)
    华为 去掉最大最小值
    Class.forName()数据库驱动
    线程中Join的使用例子
    基数排序的总结
    javaweb要点复习 jsp和servlet
    Qt实现360安全卫士10.0界面(编译时出现的一些问题)
    VS2010 添加资源文件后,出现 “LNK1123: 转换到 COFF 期间失败: 文件无效或损坏”错误
  • 原文地址:https://www.cnblogs.com/iwebkit/p/6134118.html
Copyright © 2011-2022 走看看