本文將用一篇文章介紹position(定位),在學習position以前,咱們應該去思考一個問題:什麼狀況下咱們須要定位?若是沒有定位將沒法知足咱們怎樣的需求?咱們要知道,被人類創造出來的每個知識,都有它的用途,都要解決一些以前遇到的問題。css
若是沒有定位,咱們作出來的網頁將會是循序漸進的自上而下、自左而右的平鋪在瀏覽器上,外加經過margin和padding調整一下間距,還有就是經過float來浮動某些元素。作一些簡單的網頁這樣就夠了,例如N年以前的yahoo,雖然如今看來很low。html
可是有些狀況下,這種循序漸進的網頁排版知足不了咱們的要求,咱們須要某些元素跑出來,懸浮在網頁上面,並且須要給它指定一個位置。這時候咱們就須要用到了position,並且是非用不可。以下圖:前端
查資料可知道,position一共有四個可選屬性:static/relative/absolute/fixed。其中static(靜態定位)是默認值,即全部的元素若是不設置其餘的position值,它的position值就是static,有它跟沒有它同樣。就很少介紹了。git
相對定位relative能夠用一個例子很輕鬆的演示出來。例如咱們寫4個<p>,出來的樣子你們不用看也能知道。github
而後咱們在第三個<p>上面,加上position:relative而且設置left和top值,看這個<p>有什麼變化。web
上圖中,你們應該要識別出兩個信息(相信大部分人會忽略第二個信息)面試
所以,relative會致使自身位置的相對變化,而不會影響其餘元素的位置、大小的變化。這是relative的要點之一。還有第二個要點,就是relative產生一個新的定位上下文,下文有關於定位上下文的詳細介紹,這裏能夠先經過一個例子來展現一下區別:json
注意看這兩圖的區別,下文將有解釋。瀏覽器
說道absolute,推薦你們去看一個視頻教程,講師對absolute講的很是透徹,本文的一些內容也是參考了這篇教程,好東西你們一塊兒分享嗎!app
話歸正傳,我們仍是拿以前那個例子說事兒,先寫一個基本的頁面——4個<p>
而後,咱們把第三個<p>改成absolute,看看會發生什麼變化。
從上面的結果中,咱們能看出幾點信息:
最後,經過給absolute元素設置top、left值,可自定義其內容,這個都是平時比較經常使用的了。這裏須要注意的是,設置了top、left值時,元素是相對於最近的定位上下文來定位的,而不是相對於瀏覽器定位。下文立刻會講定位上下文。
可是有時候設置top、left值並非定位的最佳解決方案。例如想要元素A緊跟在元素B的上方,可經過設置元素B爲absolute,而後調整B的margin值來肯定,這樣更有效率。以下圖:
以上提到的信息,若是展開來講,內容很是多,並且用文本也很差描述,仍是推薦你們去看慕課網的那篇視頻教程,講的頗有意思。
最後,再提幾個小知識點。
其實fixed和absolute是同樣的,惟一的區別在於:absolute元素是根據最近的定位上下文肯定位置,而fixed永遠根據瀏覽器肯定位置。
上文不少次提到了「定位上下文」,那麼它究竟是一個什麼東東?答案立刻揭曉。
5.1 relative的定位
relative元素的定位永遠是相對於元素自身位置的,和其餘元素不要緊,也不會影響其餘元素。
5.2 fixed的定位
fixed元素的定位永遠是相對於瀏覽器邊界的,和其餘元素沒有關係。可是它具備破壞性,會致使其餘元素位置的變化。
5.3 absolute的定位
absolute的定位相對於前二者要複雜許多。若是爲absolute設置了top、left,瀏覽器會根據什麼去肯定它的縱向和橫向的偏移量呢?答案是瀏覽器會遞歸查找該元素的全部父元素,若是找到一個設置了position:relative/absolute/fixed的元素,就以該元素爲基準定位,若是沒找到,就以瀏覽器邊界定位。以下兩個圖所示:
上圖中的「某一層祖先元素」就是該absolute元素的定位上下文。講到這裏,咱們上文中的那個圖,你們能看明白了吧?還有不明白的能夠留言給我。
我感受position這篇文章是這一系列中最難寫的文章,它的知識點比較多,並且很是難理解,所以position也是css的一個重點知識,不懂position的前端開發人員要抓緊惡補一下。
寫了這麼多,感受仍是寫的不是很全面,或者不是很系統,很但願你們把本身的意見反饋給我。這個系列博客算是這個教程的初版,我計劃後期抽時間會錄製一個視頻版,到時候但願會更加全面系統一些。
---------------------------------------------------------------
本系列的目錄頁面:http://www.cnblogs.com/wangfupeng1988/p/4325007.html
-------------------------------------------------------------------------------------------------------------
學習做者教程:《前端JS高級面試》《前端JS基礎面試題》《React.js模擬大衆點評webapp》《zepto設計與源碼分析》《json2.js源碼解讀》
也歡迎關注個人開源項目——wangEditor,簡潔易用的web富文本編輯器
-------------------------------------------------------------------------------------------------------------