position
是用來定位元素的屬性。它是指定top
、left
、right
、bottom
的數值,來決定元素的位置。而它的定位是依照基準來位移,基準依position
類型會不一樣。
static
| relative
| absolute
| fixed
| sticky
top
| right
| bottom
| left
static 原始定位(預設值)
元素的position
預設值是static
(有靜止、停滯、不變的意思),會照normal flow
定位。inline
元素平行堆疊,而block
元素垂直向下堆疊。
relative 相對定位
當我們將一個元素指定為relative
,它所相對的基準是自己。當正常流向是由左而右時,relative
元素的定位歸零時,它就會繼續待在原本的位置。
in flow
,所以原本的佔位會繼續保持。
.relative{
position: relative;
top: 50px;
left: 200px;
}
absolute 絕對定位
absolute
(絕對定位)的基準位置,是與它的層級最接近,且position
值不為static
的祖先元素位置為基準。absolute positioning
的box會out of flow
,不會保留原本的位置。我們可以來試著用absolute
讓藍色的區塊(moving)位移 ; 然後設定它的祖層(stand)為relative
,來作為absolute
位移的基準。
.stand{
position: relative;
}
.moving{
position: absolute;
top: 0;
}
.moving
的box左上外緣,會貼緊.stand
這個block container
的左上內緣,而.moving
已經out of flow
,所以本來的位置不會保留,被後面的box順勢補位。
fixed 視口固定定位fixed
元素會out of flow
,所以元素的佔位不會保留,而它的定位基準是跟著視口走的,當定位數值歸零時,它會貼著視口的左上內緣,當網頁內容有滾輪滑動時,它也會繼續停在視口為基準的位置,而有固定不動的效果。
.fixed {
background-color: lightgreen;
position: fixed;
top: 0;
left: 30%;
}
Try it on codepen.
sticky 黏性定位
sticky
也是要在網頁滾動時才看得到效果。它結合relative
相對定位,及fixed
視口固定定位的效果。sticky
元素仍然in flow
,元素佔位會保留。
而它的定位值基準同時是自己,同時又是視口。當它的定位值歸零時,一開始它會以自己為基準,停在相同的位置,而網頁滾輪滑動時,它的值符合視口的定位基準時,就會黏在視口的基準位置。
.sticky {
background-color: lightgreen;
position: sticky;
top: 0;
left: 20%;
}
Try it on codepen.
position
的介紹到這裡了,想要瞭解更多的話,可以自行看MDN或是看CSS規範。一樣,明天見~
*有任何錯誤或描述不夠精準之處,歡迎指教,非常感謝。