沒有為 position: absolute 元素賦予 left、top 等值,與賦予 left:0; top:0; 的效果為何不一樣?
簡單來說,因為 left 和 top 的 initial value 非 "0",而是 "auto"。複雜來說,要知道 "auto" 的具體效果,請看:
10.3.7 Absolutely positioned, non-replaced elements
http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-width
10.3.8 Absolutely positioned, replaced elements
http://www.w3.org/TR/CSS21/visudet.html#abs-replaced-width
10.6.4 Absolutely positioned, non-replaced elements
http://www.w3.org/TR/CSS21/visudet.html#abs-non-replaced-height
10.6.5 Absolutely positioned, replaced elements
http://www.w3.org/TR/CSS21/visudet.html#abs-replaced-heigh
計算過程很複雜,想全整明白的話,就抽空看看好了。
感謝邀請。
如果一個元素的 "position" 特性值不是 "static"(默認元素不申明position即為static),該元素被稱為定位元素。定位的元素生成定位框,其定位基於四個特性(置入值):"top","right","bottom","left"。 如果元素是絕對定位(Absolute positioning),並且申明了置入值(leftight opottom),那麼其定位的參照物即為其包含塊,可能是父元素,也可能不是父元素。關於包含塊(Containing block )更詳細的介紹:http://www.w3.org/TR/CSS21/visudet.html#containing-block-details參見其中的第4條:
If the element has "position: absolute", the containing block is established by the nearest ancestor with a "position" of "absolute", "relative" or "fixed"
即如果絕對定位元素申明了置入值,那麼其置入值的參照物即為最近的申明了"position"為"absolute
elativefixed的祖先元素。注意這裡是置入值的參照物。
如果絕對定位元素沒有申明置入值,只申明了position:absolute,那麼其自身定位以及margin的參照物即為其最近的塊級、單元格(table cell)或者行內塊(inline-block)祖先元素的 內容框。
如果同時申明了置入值和margin值呢?看如下代碼:
&&&是不是別的地方寫過這些元素了,比如div{left: 100px;} 這樣的話類選擇器沒寫就會使用div的,如果寫了就會覆蓋掉,結果自然不一樣
---------------------------------------------------------明白你的意思了,這個區別是父元素margin造成的,不寫left這些元素的時候位置是在margin內的左上角,而left:0和top:0是在包括margin的部分的左上角因為position中的 left,right的默認值並不是0!!!所以當然不一樣了。
那麼默認值是多少呢?
可以這麼來理解:
在absolute未起作用前,元素有一個位置(姑且稱之為「原來的位置」吧);absolute起作用後(沒有設置left、top的值)元素是要保持其「原來的位置」不變的,這樣就有left和top的默認值了(是多少不用管,反正默認值就是要讓該元素的位置和原來的位置一樣)。記住兩點就好了:1、position:absolute中的 left,top的默認值並不是0;2、沒有設置left、top時,left和top的默認值將使元素的位置和「原來的位置」一樣。今天剛好碰到這個問題,發現樓上的許多答案都頗有益處,我自己再總結一個:假設父元素position: relative; 有padding的狀態下:如果有top/left:0 :子元素緊貼父元素padding的邊界(因為父元素包含塊的邊界就是padding邊界)
如果沒有設置值:子元素緊貼父元素content的邊界(其實此時值為auto)
代碼如下:&&&
那要看它的父元素的定位情況。最好有代碼貼上來啊!!
1.如果position: absolute 元素未賦予 left、top實際值,那麼其值為auto 2.「auto」與「0」在父級元素沒有padding值的情況下,表現一樣,如果有padding值,瀏覽器表現不同。有空會將測試demo發上來
absolute是生成覺對定位的元素,脫離了文本流(即在文檔中已經不佔據位置),參照瀏覽器的左上角通過top,right,bottom,left 定位。
可以選取具有定位的父級對象或者body坐標原點進行定位,也可以通過z-index進行層次分級。
absolute在沒有設定top,right,bottom,left值時是根據父級對象的坐標作為始點的,當設定top,right,bottom,left值後則根據瀏覽器的左上角作為原始點。
而且不論元素是行內元素還是塊級元素,都會生成一個塊級框,也就是例如行內元素span設置了absolute後就可以設置height和width屬性了。
看看如下案例:
CSS代碼部分:
HTML代碼部分:
最終效果圖(這是設定top,right,bottom,left值,以瀏覽器左上角為原點之後的效果):
如果沒有設置top,right,bottom,left值,是以父級對象的坐標為原點,如下圖:
具體可以看看這篇文章:css position屬性圖文案例詳解,包教不包會
如果未定義left 和right,則默認值為auto。如果left或right的值為auto,則元素的頂端或者左邊(從左往右讀)要相對於其未定位前本來的頂端或左邊對齊。
由於父級元素確定...
推薦閱讀:
※Win10下如何在右鍵新建菜單中添加.html文件?
※如何看待民工叔跳槽 Teambition?
※如何衡量一個人的 AngularJS 水平?
※html5 mutation observer 不能監聽元素尺寸變化,還有何用?
※學生關於前端工作的幾個問題?