定位和浮動

一、position的屬性(5個)

這裏寫圖片描述

文檔流:

文檔流指的是元素排版佈局過程中,元素會自動從左往右,自上而下的流式佈局。 

(一)absolute (絕對定位)

1.使元素完全脫離文檔流;
2.相對於 static 定位以外的第一個父元素進行定位,且逐層上找,直到document

(二)fixed (固定定位)

固定定位的元素總是相對於瀏覽器窗口進行定位
固定定位的元素會脫離文檔流

(三)relative (相對定位)

相對定位的元素相對於自身偏移
相對定位的元素不會脫離文檔流

(四)static (默認定位)

static是position屬性的默認值,代表“沒有定位”,即元素出現在正常的文檔流中。

(五)inherit (不常用)

規定應該從父元素繼承 position 屬性的值。

對於絕對定位

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
             *{
    border: 0;
    padding: 0;
    margin: 0;
     }
        div {font-size: 15px;color: #fff;}
        .test1 {width: 500px;height: 500px;background: red;}
        /* 如果父級的元素髮生了移動,他會根據移動後的位置進行偏移 */
        .test2 {width: 400px;height: 400px;background: yellow;position: relative;left: 100px;top: 0px;}
        .test3 {width: 300px;height: 300px;background: pink;position: absolute;right: -20px;top: 0px;}
    </style>
</head>
<body>
    <div class="test1">
        test1
        <div class="test2">
            test2
            <div class="test3">test3</div>
        </div>
    </div>
</body>
</html>

總結

1.position: relative;不會脫離文檔流,position: fixed;position: absolute;會脫離文檔流
2.position: relative; 相對於自己在文檔流中的初始位置偏移定位。
3.position: fixed; 相對於瀏覽器窗口定位。
4.position: absolute; 是相對於父級非position:static 瀏覽器定位。

  • 如果沒有任何一個父級元素是非position:static屬性,則會相對於文檔定位。
  • 這裏它的父級元素是包含爺爺級元素、祖爺爺級元素、祖宗十八代級元素的。任意一級都可以。
  • 如果它的父級元素和爺爺級元素都是非position:static 屬性,則,它會選擇距離最近的父元素。

關於z-index(粗略解釋)

z-index只能應用於定位元素(即設置了position屬性非static 值).  

z-index 屬性設置元素的堆疊順序。擁有更高堆疊順序的元素總是會處於堆疊順序較低的元素的前面。元素可擁有負的 z-index 屬性值。

該屬性設置一個定位元素沿 z 軸的位置,z 軸定義爲垂直延伸到顯示區的軸。如果爲正數,則離用戶更近,爲負數則表示離用戶更遠。
通俗講就是z-index的值越大,就離我們越近,顯示的就靠前。

二、浮動

浮動的定義

使元素脫離文檔流,按照指定方向發生移動,遇到父級邊界或者相鄰的浮動元素停了下來。 

脫離文檔流的概念

所謂脫離文檔流,即將元素從普通的佈局排版中拿走,其他盒子在定位的時候,會當沒看到它  
,兩者位置重疊都是可以的。  

浮動產生的原因

一般是父類盒子中的子盒子設置了float:left或float:right CSS屬性,導致父類盒子不能被撐開  
,這樣就產生了浮動   

浮動後對元素產生的影響

造成父元素高度塌陷,致使佈局混亂    

清除浮動的方法

參考文章一
參考文章二

(一)overflow:hidden

先找到浮動盒子的父元素,再在父元素中添加一個屬性:overflow:hidden  

實現的原理爲BFC,原理稍後介紹

(二) 在父元素的最後加一個冗餘元素併爲其設置clear:both

clear 屬性設置或返回元素相對浮動對象的位置。(記住clear的屬性值)  

給這個冗餘元素添加clear:both(clear屬性介紹),它便要躲開這三個浮動元素,因此,一直往下跑,直到沒有被浮動元素蓋住才停下來。而父元素看到這個子元素跑開了,自然想要包裹住它。

這裏寫圖片描述

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        .box{ width:300px;margin:0 auto;border:10px solid #000;}
        .div{ width:200px;height:200px;background:red;float:left;}
        .clear{ clear:both;}
    </style>
</head>
<body>
    <div class="box">
        <div class="div"></div>
        <div class="clear"></div>
    </div>
</body>
</html>

(三)使用:before和:after僞元素

.clearfix:before,.clearfix:after{display:table;content:"";}//內容爲空,塊級表格顯示,可用display:block
.clearfix:after{clear:both;}//清除浮動
.clearfix{*zoom:1}(兼容ie 觸發haslayout)(推薦)

在我們需要清除浮動時,只需要給父元素追加clearfix類即可,既方便又符合語義化。

原理解釋

“:before”僞類是用來防止子元素頂部的外邊距塌陷,
使用“display: table”創建一個匿名的“table-cell”元素。這也確保在IE6和IE7下具有一致性。
“:after”僞類是用來防止子元素的底部的外邊距塌陷,以及用來清除元素的浮動。
在IE6和7的瀏覽器中,加上“*zoom”屬性來觸發父元素的hasLayout的機制。決定了元素怎樣渲染內容,以及元素與元素之間的相互影響。

三、position:absolute和float的異同

相同點:

可以讓元素脫離文檔流,內聯元素可以設置寬和高

不同點:

使用float脫離文檔流時,其他盒子會無視這個元素,但其他盒子內的文本依然會爲這個元素讓出位置,環繞在周圍。
使用absolute positioning脫離文檔流的元素,其他盒子與其他盒子內的文本都會無視它。

發佈了31 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章