我們最常用的的就是 absolute 和 relative 兩種方式,所以主要討論著兩者的區別。
相對定位我們主要是要知道相對於誰來進行偏移的?其實相對定位是相對於元素自己的本身的位置,我們來看一下例子:
這是乙個巢狀的div,乙個父div parent, 包含兩個子div sub1 和 sub2,由於兩個子div沒有設定任何position屬性,它們處於它們應當的位置。預設位置如下圖:
當我們修改一下div sub1 的樣式:
#sub1結果如下圖:我們會發現sub1進行了偏移,並不影響sub2的位置,同時遮蓋住了sub2,切記偏移並不是相對於 div parent的,而是相對於sub1 原有的位置。
如果我們把sub1 的同級div sub2 也設定乙個相對位置,會產生什麼結果?我們來看一下。
#sub2結果如下圖:
sub2也根據原有位置進行了偏移,同時遮蓋住了sub1,也不會影響sub1的位置。相對定位比較容易理解,我們再來看一下絕對定位absolute。
絕對定位在使用當中比較容易出錯的,有幾個需要注意的地方,將上面的**還原,我們為sub1 增加乙個絕對定位。
#sub1結果如下:
我們發現,由於我們對sub1進行了絕對定位,sub1的位置發生了偏移,而同級div sub2,則佔據了sub1的位置,並且sub1遮擋了sub2.
下面,把sub2 也增加絕對定位:
#sub2結果如下:
我們會發現,sub2 也進行了偏移,並且遮蓋住了sub1。
這時候,我們會發現問題,兩個子div 都設定了 絕對定位,他們是相對於哪個元素發生了偏移呢?
這分兩種情況:
1、如果sub1 的父元素或者祖父元素,設定了position屬性,並且屬性值為 absolute 或 relative的時候,那麼子元素相對于父元素來進行定位。比如我們例子中最外層div parent設定了相對定位屬性,因此sub1 和 sub2 兩個div 就根據 div parent 來進行定位。但是根據parent那個定位點進行定位呢?答案是:如果parent設定了margin,border,padding等屬性,那麼這個定位點將忽略padding,將會從padding開始的地方(即只從padding的左上角開始)進行定位。
2、如果sub1不存在乙個有著position屬性的父物件,那麼那就會以body為定位物件,按照瀏覽器的視窗進行定位。
我們將例子中的parent 的position 屬性刪除,再來看一下結果:
由於兩個子div沒有找到有position屬性的父元素,則以body進行定位,由於原因,請不要誤以為是相對於parent的。
fixed是一種特殊的absolute,fixed總是以body為定位物件的,按照瀏覽器的視窗進行定位。我們將**還原到最初狀態,sub1 增加absolute定位方式,而sub2 增加fixed定位方式:
#sub1結果如下:#sub2
會發現sub2 始終以body 進行定位,而sub1由於發現parent 有position屬性relative,則根據父元素進行定位偏移
css學習歸納總結(三)
行內樣式是寫在html標籤的style屬性裡的,比如 hello everyone 行內樣式會覆蓋嵌入樣式和鏈結樣式。嵌入的css樣式是放在html文件的head元素中的,這點想必大家都知道,這裡就不贅述了。鏈結樣式的作用範圍可以是整個 只要使用標籤把樣式表鏈結到每個頁面,相應的頁面就可以使用其中的...
CSS學習總結
1.使用外部 extenal 樣式表,相對於內嵌 inline 和內部式 internal 的,有以下優點 樣式 可以復用。乙個外部css檔案,可以被很多網頁共用。便於修改。如果要修改樣式,只需要修改css檔案,而不需要修改每個網頁。提高網頁顯示的速度。如果樣式寫在網頁裡,會降低網頁顯示的速度,如果...
CSS學習總結
選擇器的優先順序 乙個標籤作用於多個樣式層疊時,這些層疊樣式說明都不一樣,那麼標籤上樣式所有層疊樣式的總和。如果這些層疊樣式有相同的宣告時,樣式的優先順序如下 內聯 內部 外部 必須選擇器型別相同 id的優先順序大於類大於元素。id不管在內部還是外部優先順序都是最高的。important 內聯 id...