CSS基本佈局——定位
CSS定位
定位(position)
1. 為什麼使用定位
我們先來看一個效果,同時思考一下用標準流或浮動能否實現類似的效果?
1. 小黃色塊在圖片上移動,吸引使用者的眼球。
2. 當我們滾動視窗的時候,盒子是固定螢幕某個位置的
結論:要實現以上效果,標準流或浮動都無法快速實現
將盒子定在某一個位置 自由的漂浮在其他盒子(包括標準流和浮動)的上面
所以,我們腦海應該有三種佈局機制的上下順序
標準流在最底層 (海底) ------- 浮動 的盒子 在 中間層 (海面) ------- 定位的盒子 在 最上層 (天空)
2. 定位詳解
定位也是用來佈局的,它有兩部分組成:
定位 = 定位模式 + 邊偏移
2.1 邊偏移
簡單說, 我們定位的盒子,是通過邊偏移來移動位置的。
在 CSS 中,通過 top
、bottom
、left
和 right
屬性定義元素的邊偏移:(方位名詞)
邊偏移屬性 | 示例 | 描述 |
---|---|---|
top | top: 80px | 頂端偏移量,定義元素相對於其父元素上邊線的距離。 |
bottom | bottom: 80px | 底部偏移量,定義元素相對於其父元素下邊線的距離。 |
left | left: 80px | 左側偏移量,定義元素相對於其父元素左邊線的距離。 |
right | right: 80px | 右側偏移量,定義元素相對於其父元素右邊線的距離 |
定位的盒子有了邊偏移才有價值。 一般情況下,凡是有定位地方必定有邊偏移。
2.2 定位模式 (position)
在 CSS 中,通過 position
屬性定義元素的定位模式,語法如下:
選擇器 { position: 屬性值; }
定位模式是有不同分類的,在不同情況下,我們用到不同的定位模式。
值 | 語義 |
---|---|
static | 靜態定位 |
relative | 相對定位 |
absolute | 絕對定位 |
fixed | 固定定位 |
靜態定位(static)(廢物)
- 靜態定位是元素的預設定位方式,無定位的意思。它相當於 border 裡面的none, 不要定位的時候用。
- 靜態定位 按照標準流特性擺放位置,它沒有邊偏移。
- 靜態定位在佈局時就是個廢物
相對定位(relative)
- 相對定位是元素相對於它 原來在標準流中的位置 來說的。(自戀型)
效果圖:
相對定位的特點:(務必記住)
- 相對於 自己原來在標準流中位置來移動的
- 原來在標準流的區域繼續佔有,後面的盒子仍然以標準流的方式對待它。
絕對定位(absolute)
絕對定位是元素以帶有定位的父級元素來移動位置 (拼爹型)
-
完全脫標 —— 完全不佔位置;
-
父元素沒有定位,則以瀏覽器為準定位(Document 文件)。
-
父元素要有定位
將元素依據最近的已經定位(絕對、固定或相對定位)的父元素(祖先)進行定位。
絕對定位的特點:(務必記住)
- 絕對是以帶有定位的父級元素來移動位置 (拼爹型) 如果父級都沒有定位,則以瀏覽器文件為準移動位置
- 不保留原來的位置,完全是脫標的。
因為絕對定位的盒子是拼爹的,所以要和父級搭配一起來使用。
定位口訣 —— 子絕父相
剛才我們們說過,絕對定位,要和帶有定位的父級搭配使用,那麼父級要用什麼定位呢?
子絕父相 —— 子級是絕對定位,父級要用相對定位。
分析:
- 方向箭頭疊加在其他圖片上方,應該使用絕對定位,因為絕對定位完全脫標,完全不佔位置。
- 父級盒子應該使用相對定位,因為相對定位不脫標,後續盒子仍然以標準流的方式對待它。
- 如果父級盒子也使用絕對定位,會完全脫標,那麼下方的廣告盒子會上移,這顯然不是我們想要的。
結論:父級要佔有位置,子級要任意擺放,這就是子絕父相的由來。
固定定位(fixed)
固定定位是絕對定位的一種特殊形式: (認死理型) 如果說絕對定位是一個矩形 那麼 固定定位就類似於正方形
- 完全脫標 —— 完全不佔位置;
- 只認瀏覽器的可視視窗 ——
瀏覽器可視視窗 + 邊偏移屬性
來設定元素的位置;- 跟父元素沒有任何關係;單獨使用的
- 不隨滾動條滾動。
提示:IE 6 等低版本瀏覽器不支援固定定位。
3. 定位(position)的擴充套件
3.1 絕對定位的盒子居中
注意:絕對定位/固定定位的盒子不能通過設定
margin: auto
設定水平居中。
在使用絕對定位時要想實現水平居中,可以按照下圖的方法:
left: 50%;
:讓盒子的左側移動到父級元素的水平中心位置;margin-left: -100px;
:讓盒子向左移動自身寬度的一半。
3.2 堆疊順序(z-index)
在使用定位佈局時,可能會出現盒子重疊的情況。
加了定位的盒子,預設後來者居上, 後面的盒子會壓住前面的盒子。
應用 z-index
層疊等級屬性可以調整盒子的堆疊順序。如下圖所示:
z-index
的特性如下:
- 屬性值:正整數、負整數或 0,預設值是 0,數值越大,盒子越靠上;
- 如果屬性值相同,則按照書寫順序,後來居上;
- 數字後面不能加單位。
注意:z-index
只能應用於相對定位、絕對定位和固定定位的元素,其他標準流、浮動和靜態定位無效。
3.3 定位改變display屬性
display 是 顯示模式, 可以改變顯示模式有以下方式:
- 可以用inline-block 轉換為行內塊
- 可以用浮動 float 預設轉換為行內塊(類似,並不完全一樣,因為浮動是脫標的)
- 絕對定位和固定定位也和浮動類似, 預設轉換的特性 轉換為行內塊。
所以說, 一個行內的盒子,如果加了浮動、固定定位和絕對定位,不用轉換,就可以給這個盒子直接設定寬度和高度等。
同時注意:
浮動元素、絕對定位(固定定位)元素的都不會觸發外邊距合併的問題。 (我們以前是用padding border overflow解決的)
也就是說,我們給盒子改為了浮動或者定位,就不會有垂直外邊距合併的問題了。
4. 定位小結
定位模式 | 是否脫標占有位置 | 移動位置基準 | 模式轉換(行內塊) | 使用情況 |
---|---|---|---|---|
靜態static | 不脫標,正常模式 | 正常模式 | 不能 | 幾乎不用 |
相對定位relative | 不脫標,佔有位置 | 相對自身位置移動 | 不能 | 基本單獨使用 |
絕對定位absolute | 完全脫標,不佔有位置 | 相對於定位父級移動位置 | 能 | 要和定位父級元素搭配使用 |
固定定位fixed | 完全脫標,不佔有位置 | 相對於瀏覽器移動位置 | 能 | 單獨使用,不需要父級 |
注意:
- 邊偏移需要和定位模式聯合使用,單獨使用無效;
top
和bottom
不要同時使用;left
和right
不要同時使用。
5. 網頁佈局總結
一個完整的網頁,有標準流 、 浮動 、 定位 一起完成佈局的。每個都有自己的專門用法。
1). 標準流
可以讓盒子上下排列 或者 左右排列的
2). 浮動
可以讓多個塊級元素一行顯示 或者 左右對齊盒子 浮動的盒子就是按照順序左右排列
3). 定位
定位最大的特點是有層疊的概念,就是可以讓多個盒子 前後 疊壓來顯示。 但是每個盒子需要測量數值。
相關文章
- CSS佈局相關基本概念CSS
- css佈局-float佈局CSS
- CSS佈局 --- 居中佈局CSS
- CSS佈局CSS
- 【css】佈局CSS
- css 佈局CSS
- CSS 佈局之水平居中佈局CSS
- CSS佈局之三欄佈局CSS
- CSS佈局 --- 自適應佈局CSS
- CSS佈局 --- 等寬&等高佈局CSS
- Python全棧Web(定位佈局、定位方式)Python全棧Web
- CSS Grid 佈局CSS
- css flex佈局CSSFlex
- CSS 佈局模式CSS模式
- CSS 佈局模型CSS模型
- css佈局方法CSS
- css佈局系列1——盒模型佈局CSS模型
- 【WEB基礎】HTML & CSS 基礎入門(10)佈局與定位WebHTMLCSS
- CSS 兩欄佈局和三欄佈局CSS
- CSS經典佈局——聖盃佈局與雙飛翼佈局CSS
- CSS display: flex佈局CSSFlex
- css居中與佈局CSS
- CSS 傳統佈局CSS
- CSS之居中佈局CSS
- css頁面佈局CSS
- CSS:兩欄佈局CSS
- CSS網格佈局CSS
- css 佈局入門CSS
- css經典佈局系列一——垂直居中佈局CSS
- css聖盃佈局和雙飛翼佈局CSS
- CSS:三欄佈局之雙飛翼佈局CSS
- CSS 三欄佈局之聖盃佈局和雙飛翼佈局CSS
- grid佈局基本概念
- css經典佈局系列二——等分等高佈局CSS
- CSS佈局-各種居中CSS
- CSS 來佈局圖片CSS
- 前端css佈局之BFC前端CSS
- CSS佈局-盒子模型CSS模型