網頁開發中佈局是一個永恆的話題。巧妙的佈局會讓網頁具備良好的適應性和擴展性。css的佈局主要涉及兩個屬性——position和float。它們倆看上去很容易被弄混,但是仔細分析一下,它們的區別仍是很明顯的。下面和你們分享一下個人學習心得。 javascript
首先,先介紹一個很重要的概念「文檔流」,明白了這個概念以後就很容易理解position和float的定位原理了。 css
在css中有一個z-index屬性,由於網頁是「立體的」,它有z軸,這個z軸的大小就由z-index控制。默認狀況下,全部頁面元素均位於z-index:0這一層,而這一層順序排列的元素就構成了「文檔流」。不管是position仍是float,它們都是經過改變文檔流來實現定位。 html
css有三種基本的定位機制:文檔流、浮動和絕對定位。除非專門指定,不然全部元素都在文檔流中定位。也就是說,文檔流中的元素的位置由元素在 X(HTML) 中的位置決定。css定位的基本思想很簡單,它容許你使得元素相對於其正常應該出現的位置,或者相對於父元素、另外一個元素甚至瀏覽器窗口自己的位置來進行定位。 前端
下面介紹position和float的定位原理。 java
(一)float: web
float屬性定位的元素位於z-index:0層。它是經過float:left和float:right來控制元素在0層左浮或右浮。float會改變正常的文檔流排列,影響到周圍元素。float元素在文檔流中一個挨一個排列。但注意,只是float元素之間一個挨一個排列,對於非float的元素,float元素是視而不見的,會越過它們。 瀏覽器
以下面的一段代碼: 佈局
<html> <head> <style type="text/css"> .fl{float:left;background:red;border:solid 1px #00f;} .nfl{background:#ff0;border:solid 1px #000;} </style> </head> <body> <span class="fl">我是float元素1</span> <span class="nfl">我是非float元素</span> <span class="fl">我是float元素2</span> <span class="fl">我是float元素3</span> </body> </html>一、二、3三個元素是float的,它們會越過非float元素一個挨一個排列,把非float元素擠到最後了。效果以下圖:
歸納來講,float:left時,會把非float元素擠到全部float元素的右邊,float:right時是擠到左邊。 學習
(二)position: 編碼
position屬性包括下面四個值:
1. 靜態(static):
元素順序顯示,在一個文檔流中,一個挨着一個,可是不像relative那樣能夠設置top之類的。靜態定位僅僅意味着內容遵循正常從上到下的HTML流。
2. 相對(relative):
一個相對定位的元素相對它在HTML流中的當前位置而放置。移動一個帶有相對定位的元素,在該元素本該放置的地方留下了一個「洞」。相對定位的主要用處不是移動一個元素,而是給行內在它內部的絕對定位的元素設定一個新的參考點。
position: relative的元素相對於本身原本應該在的位置進行偏移,偏移後的位置可能覆蓋別人(是漂浮在上方)。它原來的位置也空着,由於它會被加入到文檔流中。
3. 絕對(absolute):
絕對定位讓你經過以pixel、em、percentage來指定一個左、右、上或者下的位置來肯定一個元素的位置。此外,絕對定位的元素被徹底與頁面流分離,換句話說,網頁上的其餘東西甚至不知道這個絕對定位的元素的存在。
absolute定位的通常用法:
4. 固定(fixed):
一個固定的元素被鎖定在屏幕的位置上。fixed是相對瀏覽器窗口的固定位置定位,如網頁中的「回到頂部」按鈕。
注意:不要試圖給同一個樣式既應用float屬性又應用任何一種定位,除了靜態或者相對定位以外。浮動和絕對或者固定定位不可能同時做用在同一個元素上。
參考資料:
1. w3c school
2. 《CSS實戰手冊》
3. 《編寫高質量代碼——Web前端開發修煉之道》
(嘻嘻,個人參考資料終於不只僅是網頁而有書籍了。看書真的讓人內心很安靜,也頗有收穫。強烈推薦曹劉陽的《編寫高質量代碼——Web前端開發修煉之道》,太棒的一本書了!讀來猶如醍醐灌頂通常!相見恨晚啊!不過建議你們對html、css和javascript都有所瞭解,並有一點實踐項目經驗以後再讀。由於有了苦逼的編碼經歷以後,才能更好地體會書中所講的問題,印象更加深入。若是徹底沒有經驗的同窗,推薦先閱讀《大巧不工——Web前端設計修煉之道》,書中將web開發的過程從頭到尾,娓娓道來。)