1. 程式人生 > >absolute、relative與float的學習

absolute、relative與float的學習

參考

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