網頁開發中佈局是一個永恆的話題。巧妙的佈局會讓網頁具備良好的適應性和擴展性。css的佈局主要涉及兩個屬性——position和float。它們倆看上去很容易被弄混,但是仔細分析一下,它們的區別仍是很明顯的。下面和你們分享一下個人學習心得。 css
首先,先介紹一個很重要的概念「文檔流」,明白了這個概念以後就很容易理解position和float的定位原理了。 html
在css中有一個z-index屬性,由於網頁是「立體的」,它有z軸,這個z軸的大小就由z-index控制。默認狀況下,全部頁面元素均位於z-index:0這一層,而這一層順序排列的元素就構成了「文檔流」。不管是position仍是float,它們都是經過改變文檔流來實現定位。 瀏覽器
css有三種基本的定位機制:文檔流、浮動和絕對定位。除非專門指定,不然全部元素都在文檔流中定位。也就是說,文檔流中的元素的位置由元素在 X(HTML) 中的位置決定。css定位的基本思想很簡單,它容許你使得元素相對於其正常應該出現的位置,或者相對於父元素、另外一個元素甚至瀏覽器窗口自己的位置來進行定位。 佈局
下面介紹position和float的定位原理。 學習
(一)float: spa
float屬性定位的元素位於z-index:0層。它是經過float:left和float:right來控制元素在0層左浮或右浮。float會改變正常的文檔流排列,影響到周圍元素。float元素在文檔流中一個挨一個排列。但注意,只是float元素之間一個挨一個排列,對於非float的元素,float元素是視而不見的,會越過它們。 .net
以下面的一段代碼: htm
01 | <html> |
02 | <head> |
03 | <styletype="text/css"> |
04 | .fl{float:left;background:red;border:solid 1px #00f;} |
05 | .nfl{background:#ff0;border:solid 1px #000;} |
06 | </style> |
07 | </head> |
08 | <body> |
09 | <spanclass="fl">我是float元素1</span> |
10 | <spanclass="nfl">我是非float元素</span> |
11 | <spanclass="fl">我是float元素2</span> |
12 | <spanclass="fl">我是float元素3</span> |
13 | </body> |
14 | </html> |
歸納來講,float:left時,會把非float元素擠到全部float元素的右邊,float:right時是擠到左邊。 blog
(二)position: 開發
position屬性包括下面四個值:
1. 靜態(static):
元素順序顯示,在一個文檔流中,一個挨着一個,可是不像relative那樣能夠設置top之類的。靜態定位僅僅意味着內容遵循正常從上到下的HTML流。
2. 相對(relative):
一個相對定位的元素相對它在HTML流中的當前位置而放置。移動一個帶有相對定位的元素,在該元素本該放置的地方留下了一個「洞」。相對定位的主要用處不是移動一個元素,而是給行內在它內部的絕對定位的元素設定一個新的參考點。
position: relative的元素相對於本身原本應該在的位置進行偏移,偏移後的位置可能覆蓋別人(是漂浮在上方)。它原來的位置也空着,由於它會被加入到文檔流中。
3. 絕對(absolute):
絕對定位讓你經過以pixel、em、percentage來指定一個左、右、上或者下的位置來肯定一個元素的位置。此外,絕對定位的元素被徹底與頁面流分離,換句話說,網頁上的其餘東西甚至不知道這個絕對定位的元素的存在。
absolute定位的通常用法:
4. 固定(fixed):
一個固定的元素被鎖定在屏幕的位置上。fixed是相對瀏覽器窗口的固定位置定位,如網頁中的「回到頂部」按鈕。 注意:不要試圖給同一個樣式既應用float屬性又應用任何一種定位,除了靜態或者相對定位以外。浮動和絕對或者固定定位不可能同時做用在同一個元素上。