1. 程式人生 > 其它 >APIO2021暴斃記 and 題解

APIO2021暴斃記 and 題解

浮動

前言

CSS 提供了三種傳統佈局方式,簡單說就是盒子如何進行排列:

  • 普通流(標準流)
  • 浮動
  • 定位

標準流(普通流/文件流)

所謂的標準流: 就是標籤按照規定好預設方式排列

  • 塊級元素會獨佔一行,從上向下順序排列。

    常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table

  • 行內元素會按照順序,從左到右順序排列,碰到父元素邊緣則自動換行。

    常用元素:span、a、i、em 等

以上都是標準流佈局,標準流是最基本的佈局方式。 這三種佈局方式都是用來擺放盒子的,盒子擺放到合適位置,佈局自然就完成了。

注意:實際開發中,一個頁面基本都包含了這三種佈局方式(後面移動端學習新的佈局方式)。

為什麼需要浮動

有很多的佈局效果,標準流沒有辦法完成,此時就可以利用浮動完成佈局。 因為浮動可以改變元素標籤預設的排列方式.。

浮動最典型的應用:可以讓多個塊級元素一行內排列顯示。

網頁佈局第一準則:多個塊級元素縱向排列找標準流,多個塊級元素橫向排列找浮動。

什麼是浮動

float 屬性用於建立浮動框,將其移動到一邊,直到左邊緣或右邊緣觸及包含塊或另一個浮動框的邊緣

CSS 的 Float(浮動),會使元素向左或向右移動,其周圍的元素也會重新排列。

元素的水平方向浮動,意味著元素只能左右移動而不能上下移動。

Float(浮動),往往是用於影象,但它在佈局時一樣非常有用。

語法

 選擇器 { float: 屬性值; } 

屬性

屬性 描述
clear 指定不允許元素周圍有浮動元素。 left right both none inherit
float 指定一個盒子(元素)是否可以浮動。 left right none inherit

浮動的特點

加了浮動之後的元素,會具有很多特性,需要我們掌握的。

  1. 浮動元素會脫離標準流(脫標)
  2. 浮動的元素會一行內顯示並且元素頂部對齊
  3. 浮動的元素會具有行內塊元素的特性.

脫離標準普通流

這也是浮動(float)元素的最重要特性

  • 脫離標準普通流的控制(浮)移動到指定位置(動),漂浮在標準流的上方,俗稱脫標
  • 浮動的盒子不再保留原先的位置

排列方式

如果多個盒子都設定了浮動,則它們會按照屬性值一行內顯示並且頂端對齊排列

注意: 浮動的元素是互相貼靠在一起的(不會有縫隙),如果父級寬度裝不下這些浮動的盒子, 多出的盒子會擠到下一行對齊。

具有行內塊元素特性

浮動元素會具有行內塊元素特性。

任何元素都可以浮動。不管原先是什麼模式的元素,新增浮動之後具有行內塊元素相似的特性

  • 塊級盒子沒有設定寬度,預設寬度和父級一樣寬,但是新增浮動後,它的大小根據內容來決定
  • 浮動的盒子中間是沒有縫隙的,是緊挨著一起的
  • 行內元素同理

浮動佈局注意點

1、浮動元素經常和標準流父級搭配使用

為了約束浮動元素位置,網頁佈局一般採取的策略是: 先用標準流的父元素排列上下位置, 之後內部子元素採取浮動排列左右位置。 符合網頁佈局第一準側。

注意上圖若再有一個浮動子盒子,則會擠到下一行,但也會在父盒子的寬度內,即標準流父盒子只能約束浮動子盒子的左右浮動範圍

2、一個元素浮動了,理論上其餘的兄弟元素也要浮動

一個盒子裡面有多個子盒子,如果其中一個盒子浮動了,為防止引起問題,其他兄弟也應該浮動

3、浮動的盒子只會影響後面的標準流,不會影響前面的標準流.

例如有三個盒子

若給藍色盒子設定浮動,紅色盒子會填補藍色盒子的位置並被藍色盒子覆蓋

若給紅色盒子設定浮動,紅色盒子會覆蓋藍色盒子嗎,答案是不會的,浮動元素只會影響到後面的標準流元素,即紅色盒子雖然脫離了標準流,但還是無法跨越它之前的標準流藍色盒子,此時黃色盒子會填補紅色盒子的位置,被紅色盒子覆蓋

清除浮動

思考

我們前面浮動元素有一個標準流的父元素, 他們有一個共同的特點,都是有高度的。 但是, 所有的父盒子都必須有高度嗎?理想中的狀態, 讓子盒子撐開父親。 有多少孩子,我父盒子就有多高。但是不給父盒子高度會有問題…..

為什麼要清除浮動

由於父級盒子很多情況下,不方便給高度,但是子盒子浮動又不佔有位置,最後父級盒子高度為 0 時,就會影響下面的標準流盒子。所以它會對後面的元素排版產生影響

清除浮動本質

  • 清除浮動的本質是清除浮動元素造成的影響
  • 如果父盒子本身有高度,則不需要清除浮動
  • 清除浮動之後,父級就會根據浮動的子盒子自動檢測高度。父級有了高度,就不會影響下面的標準流了

方法

  1. 額外標籤法也稱為隔牆法,是 W3C 推薦的做法。
  2. 父級新增 overflow 屬性
  3. 父級新增after偽元素
  4. 父級新增雙偽元素

額外標籤法

額外標籤法也稱為隔牆法,是 W3C 推薦的做法。 額外標籤法會在浮動元素末尾新增一個空的標籤。例如 <div style="clear:both"></div>,或者其他標籤(如<br />等)。

優點: 通俗易懂,書寫方便

缺點: 新增許多無意義的標籤,結構化較差

注意: 要求這個新的空標籤必須是塊級元素。

總結:

清除浮動本質是? 清除浮動的本質是清除浮動元素脫離標準流造成的影響

清除浮動策略是? 閉合浮動. 只讓浮動在父盒子內部影響,不影響父盒子外面的其他盒子

額外標籤法? 隔牆法, 就是在最後一個浮動的子元素後面新增一個額外標籤, 新增 清除浮動樣式。 實際工作可能會遇到,但是不常用

父級新增 overflow

可以給父級新增 overflow 屬性,將其屬性值設定為 hidden、 auto 或 scroll ,常用就是hidden屬性

:after 偽元素法

:after 方式是額外標籤法的升級版。也是給父元素新增 ,直接複製貼上下面程式碼

.clearfix:after { 
    content: "";  
    display: block; 
    height: 0;  
    clear: both; 
    visibility: hidden; 
}  
.clearfix { 
    /* IE6、7 專有 */ 
    *zoom: 1;  
}