absolute、relative与float的学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HYB2012/article/details/77916567

参考

Position属性 http://www.barelyfitz.com/screencast/html-training/css/positioning/
某大神的深入解析 float https://segmentfault.com/a/1190000006041960
张鑫旭 CSS float浮动的深入研究、详解及拓展(一)


页面结构

<body>
    <div id="container">
        <div id="example">
            <div id="div-before">
                <p>id = div-before</p>
            </div>
            <div id="div-1">
                <div id="div-1-padding">
                    <p>id = div-1</p>
                    <div id="div-1a">
                        <p>id = div-1a</p>
                        <p>div-1a-p2</p>
                    </div>
                    <div id="div-1b">
                        <p>id = div-1b</p>
                        <p>div-1b-p2</p>
                    </div>
                    <div id="div-1c">
                        <p>id = div-1c</p>
                    </div>
                </div>
            </div>
            <div id="div-after">
                <p>id = div-after</p>
            </div>
        </div>
    </div>
</body>

样式

    <style>
        #container{
            margin:100px 100px;
            height:800px;
            border:1px solid black;
        }
        #example{
            float:right;
        }
        #example p{
            margin:0 0.25em;
            padding:0.25em 0;
        }
        #div-before,
        #div-after{
            background-color:#88d;
            color:#000;
        }
        #div-1{
            width:400px;
            background-color:#000;
            color:#fff;
        }
        #div-1b{
            background-color:#3d3;
            color:#fff;
        }
        #div-1c{
            background-color:#33d;
            color:#fff;
        }
    </style>

效果
这里写图片描述


absolute

更改#div-1样式 添加position:absolute;
样式

        #div-1{
            width:400px;
            background-color:#000;
            color:#fff;
            position:absolute;
            top:0px;
            left:0px;
        }

这里写图片描述

效果分析:

  • 绝对定位的元素 元素脱离了文档流 所占位置会被移除 相邻元素会流动过来
  • 位置参照为其包含块 containing block 是由其最近的 position 为 absolute / relative / fixed 的祖先元素决定的 第一个不为static的元素(元素的默认position属性), 参照块不一定是其父元素

    元素#container的position为默认值 static,所以 #div-1元素设置absolute后 不能定位到其左上角,而是定位到了body的左上角 。
    当设置#container的position:fixed后, #div-1元素就会定位在其左上角,效果见下图
    这里写图片描述

#div-1元素就会定位在其左上角这个描述也不太准确,设置absolute后,如果不指定具体的位置,绝对定位元素默认会定位在其包含块的内容后面 而不是包含块的左上角!(这句就是废话,正常啊,取决于内容和此div的前后关系)
这里写图片描述

  • 绝对定位的参照:包含块盒子的border内边线的左上角,不受其padding影响 ,可以通过设置left:0;top:0;来验证。
  • 不设置不代表left=0,top=0;元素的位置和没有设置absolute一样
  • -

relative

更改#div-1样式 添加position:relative;

       #div-1{
            width:400px;
            background-color:#000;
            color:#fff;
            position:relative;
            top:100px;
            left:-200px;
            }

这里写图片描述

效果分析:

  • 元素相对定位后 原位置所占空间不变 相邻元素不流动
  • 没有脱离文档流
  • 相对定位 相对的坐标是以原位置作为参照的

float

设置#div-1a元素左浮动

        #div-1a{
            background-color:#d33;
            color:#fff;
            float:left;
            left:800px;
            top:500px;
            width:200px;
            height:500px;
        }

这里写图片描述

效果分析:

  • 元素#div-1a浮动后 仍然占据着原来的位置 ,#div-1b中的文字环绕了#div-1a
  • 浮动的元素设置top left定位也是无效的 它会stay where it is before

猜你喜欢

转载自blog.csdn.net/HYB2012/article/details/77916567