天天看點

h5定位的四種方式四種定位總結定位模式轉換

為什麼要用定位?

那麼定位,最常運用的場景再那裡呢?

如果用标準流或者浮動,實作會比較複雜或者難以實作,此時我們用定位來做,just soso!

元素的定位屬性

元素的定位屬性主要包括定位模式和邊偏移兩部分。

1、邊偏移

邊偏移屬性 描述
top 頂端偏移量,定義元素相對于其父元素上邊線的距離
bottom 底部偏移量,定義元素相對于其父元素下邊線的距離
left 左側偏移量,定義元素相對于其父元素左邊線的距離
right 右側偏移量,定義元素相對于其父元素右邊線的距離

也就說,以後定位要和這邊偏移搭配使用了, 比如 top: 100px; left: 30px; 等等

2、定位模式(定位的分類)

在CSS中,position屬性用于定義元素的定位模式,其基本文法格式如下:

選擇器{position:屬性值;}

position屬性的常用值

描述
static 自動定位(預設定位方式)
relative 相對定位,相對于其原文檔流的位置進行定位
absolute 絕對定位,相對于其上一個已經定位的父元素進行定位
fixed 固定定位,相對于浏覽器視窗進行定位

1.靜态定位(static)

靜态定位是所有元素的預設定位方式,當position屬性的取值為static時,可以将元素定位于靜态位置。 所謂靜态位置就是各個元素在HTML文檔流中預設的位置。

白話:網頁中所有元素都是靜态定位,也就是标準流的特性

在靜态定位下,沒有偏移量

PS :沒啥好講的

2.相對定位relative 自戀型

相對定位不脫标(不脫離标準流)

相對定位是将元素相對于它在标準流中的位置進行定位,當position屬性的取值為relative時,可以将元素定位于相對位置。

注意: 1.元素相對定位後,雖然可以用便偏移量改變位置,但是在文檔流中的位置仍保留。

​ 2.每次移動的位置,都是以自己的左上角為基點移動

浮動:多個塊級元素一行顯示

相對定位:主要價值就是移動位置

3.絕對定位absolute 拼爹型

絕對定位完全脫标

當position屬性的取值為absolute時,可以将元素的定位模式設定為絕對定位。

父級沒有定位

若所有父元素都沒有定位,以浏覽器為準對齊(document文檔)。

父級有定位

絕對定位是将元素依據最近的已經定位(絕對、固定或相對定位)的父元素(祖先)進行定位。

子絕父相

非常重要,是我們的口訣

首先,絕對定位是将元素依據最近的已經定位絕對,固定,相對的父元素(祖先)進行定位。

也就是說,子級絕對定位,父級隻要是定位(除static靜态定位)就可以,也就是說,子絕父絕也行

那麼,為何父級要求時相對定位呢?

子級絕對定位,父級就用相對定位(最優解),因為子級時絕對定位不占位置,就可放在父級的任何位置

因為父盒子在布局時,需要占有位置,是以父級要相對定位

什麼是文檔流,普通流,标準流

都是一個意思。

最普通的布局叫标準流

絕對定位的盒子水準/垂直居中

普通的盒子是左右margin 改為 auto就可, 但是對于絕對定位就無效了

水準居中的算法:

​ 1.left 50% ,父盒子的一半大小

​ 2.再有外邊距負的一半值即可

4.固定定位fixed

它以浏覽器視窗作為參照物來定義網頁元素。當position屬性的取值為fixed時,即可将元素的定位模式設定為固定定位。

固定定位是一種特殊的絕對定位

疊放次序(z-index)

當對多個元素同時設定定位時,定位元素之間有可能會發生重疊。

1.預設值是0,取值越大,定位元素越居上

2.取值相同,看書寫順序

3.數字沒有機關

4.隻有定位才有該屬性,浮動,标準流,靜态定位都沒有該屬性

四種定位總結

定位模式 是否脫标(脫離标準流) 是否使用偏移量 移動位置基準
靜态static 不脫标,正常模式 不可以 正常
相對定位relative 不脫标,占有位置 可以 相對與自己移動
絕對定位absolute 脫标,不占位置 可以 相對于定位父級移動
固定定位fixed 脫标,不占位置 可以 相對于浏覽器移動

定位模式轉換

跟 浮動一樣, 元素添加了 絕對定位和固定定位之後, 元素模式也會發生轉換, 都轉換為 行内塊模式