【前端】浮動和定位


浮動和定位

浮動

什么是浮動?

​ 元素的浮動是指設置了浮動屬性的元素會脫離標准普通流的控制,移動到其父元素中指定位置的過程。它可以讓任何盒子可以在一行排列,用浮動來布局。

​ 在css中,通過float屬性來定義浮動,其基本語法格式如下:

選擇器{float:屬性值;}
屬性值 描述
left 元素向左浮動
right 元素向右浮動
none 元素不浮動(默認值)

浮動的特性

脫離標准流,不占位置,浮動只有左右浮動

一般只要一浮動就創建一個包含塊級的概念,一般要在外邊添加一個父盒子,然后對齊,但是不會超過其內邊距

如果上一個元素浮動則會與其在頂部對齊,如果上一個元素是標准流則上下排列

目的:為了讓多個塊級元素可以在一行顯示

清除浮動

為什么要清除浮動?

​ 由於浮動元素不占魚原文檔流的位置,所以它會對后面的元素排版產生影響,為了解決這些問題,此時就要在該元素中清除浮動

准確來說,不是清除浮動而是清除浮動后造成的影響

其清除浮動的本質

清除浮動主要為了解決父級元素因為子級浮動引起內部高度為0 的問題

父盒子沒有給高度就不會撐開盒子

辦法:

一、在css中,clear屬性用於清除浮動,其語法格式為:

選擇器{clear:屬性值;}
屬性值 描述
left 不允許左側有浮動元素(清除左側浮動的影響)
right 不允許右側有浮動元素(清除右側浮動的影響)
both 同時清除左右兩側浮動的影響

二、添加額外標簽

是W3C推薦的做法是通過在浮動元素末尾添加一個空的標簽例如 <div style="clear:both"></div>,或則其他標簽br等亦可。

​ 添加許多無意義的標簽,結構化較差,不建議

三、父級添加overflow屬性方法

​ 通過觸發BFC的方式,可以實現清除浮動的效果

給父級添加: overflow為 hidden|auto|scroll  都可以實現

​ 優點: 代碼簡潔

⭐️缺點: 內容增多時候容易造成不會自動換行導致內容被隱藏掉,無法顯示需要溢出的元素。

下面兩種不太清楚

四、使用after偽元素清除浮動

:after 方式為空元素的升級版,好處是不用單獨加標簽了

​ 使用方法:

 .clearfix:after {  content: "."; display: block; height: 0; clear: both; visibility: hidden;  }   

 .clearfix {*zoom: 1;}   /* IE6、7 專有 */

​ 優點: 符合閉合浮動思想 結構語義化正確

​ 缺點: 由於IE6-7不支持:after,使用 zoom:1觸發 hasLayout。

​ 代表網站: 百度、淘寶網、網易等

​ 注意: content:"." 里面盡量跟一個小點,或者其他,盡量不要為空,否則再firefox 7.0前的版本會有生成空格。

五、使用before和after雙偽元素清除浮動

​ 使用方法:

.clearfix:before,.clearfix:after { 
  content:"";
  display:table;  /* 這句話可以出發BFC BFC可以清除浮動,BFC我們后面講 */
}
.clearfix:after {
 clear:both;
}
.clearfix {
  *zoom:1;
}

​ 優點: 代碼更簡潔

​ 缺點: 由於IE6-7不支持:after,使用 zoom:1觸發 hasLayout。

​ 代表網站: 小米、騰訊等

定位

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

邊偏移

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

也就是說以后邊偏移和定位模式要搭配用,比如 top: 100px; left: 30px; 等等

定位模式

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

選擇器{position:屬性值;}

position屬性的常用值

描述
static 自動定位(默認定位方式)
relative 相對定位,相對於其原文檔流的位置進行定位
absolute 絕對定位,相對於其上一個已經定位的父元素進行定位
fixed 固定定位,相對於瀏覽器窗口進行定位

這里展開了解其模式

相對定位relative:

​ 相對定位是將元素相對於標准流的位置進行定位,當position屬性的取值為relative時,可以將元素定位在相對位置

雖然可以改變其位置,但是它在文檔流的位置依舊保留

注意:

  1. 相對定位最重要的一點是,它可以通過邊偏移移動位置,但是原來的所占的位置,繼續占有。
  2. 其次,每次移動的位置,是以自己的左上角為基點移動(相對於自己來移動位置)

如果說浮動的主要目的是 讓多個塊級元素一行顯示,那么定位的主要價值就是 移動位置, 讓盒子到我們想要的位置上去。

絕對定位absolute

​ 絕對定位通過邊偏移實現,它是完全脫標,完全不占有位置/

一、若父級元素一個都沒有定位則以瀏覽器為准對齊

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

子絕父相

​ 這是我們學習定位的口訣,時刻記住

如下結論:

1、因為子級是絕對定位,不會占有位置, 可以放到父盒子里面的任何一個地方。

2、父盒子布局時,需要占有位置,因此父親只能是 相對定位.

這就是子絕父相的由來。

絕對定位的盒子居中(水平/垂直)

1、首先left:50%; 父盒子的一半大小

2、然后自己外邊距負的一半值就可以margin-left

固定定位fixed

​ 當對元素設置固定定位后,它將脫離標准文檔流的控制,始終依據瀏覽器窗口來定義自己的顯示位置。不管瀏覽器滾動條如何滾動也不管瀏覽器窗口的大小如何變化,該元素都會始終顯示在瀏覽器窗口的固定位置

IE6等以下版本瀏覽器不支持固定定位

疊放次序z-index

比如:z-index:2;

注意:

  1. z-index的默認屬性值是0,取值越大,定位元素在層疊元素中越居上。
  2. 如果取值相同,則根據書寫順序,后來居上。
  3. 后面數字一定不能加單位。
  4. 只有相對定位,絕對定位,固定定位有此屬性,其余標准流,浮動,靜態定位都無此屬性,亦不可指定此屬性。

定位模式轉換

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

因此 比如 行內元素 如果添加了 絕對定位或者 固定定位后 浮動后,可以不用轉換模式,直接給高度和寬度就可以了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM