css3教程 彈性盒模型

2021-07-14 14:30:15 字數 3025 閱讀 8236

css3引入了新的盒模型——彈性盒模型,該模型決定乙個盒子在其他盒子中的分布方式以及如何處理可用的空間。這與xul(火狐使用的使用者互動語言)相似,其它語言也使用相同的盒模型,如xaml 、gladexml。

使用該模型,可以很輕鬆的建立自適應瀏覽器視窗的流動布局或自適應字型大小的彈性布局。本文的例子使用以下的html**:12

3 傳統的盒模型基於html流在垂直方向上排列盒子。使用彈性盒模型可以規定特定的順序,也可以反轉之。要開啟彈性盒模型,只需設定擁有子盒子的盒子的display的屬性值為box(或inline-box)即可。

display: box;

水平或垂直分布

「box-orient」定義分布的座標軸:vertical和horizional。這兩個值定義盒子如何顯示

body

反向分布

「box-direction」可以設定盒子出現的順序。預設情況下,只需定義分布座標軸——box隨html流分布。如果為水平座標軸,則從左到 右分布;垂直座標軸則從上到下分布。定義「box-direction」的屬性值為「reverse」,則反轉盒子的排列順序。

body

具體分布

屬性「box-ordinal-group」定義盒子分布的順序。可以隨意的控制其分布順序。這些組以乙個從「1」開始的數字定義,盒模型將首先分布這些組,所有這些盒子將在每個組中。分布將從小到大排列。

body

#box1

#box2

#box3

盒子尺寸

預設情況下,盒子並不具有彈性,如果box-flex的屬性值至少為1時,則變得富有彈性。

如果盒子不具有彈性,它將盡可能的寬使其內容可見,且沒有任何溢位,其大小由「width」和「height」來決定(或min-height、min-width、max-width、max-height)。

如果盒子是彈性的,其大小將按下面的方式計算:

具體的大小宣告(width、height、min-width、min-height、max-width、max-height);

父盒子的大小和所有餘下的可利用的內部空間

如果盒子沒有任何大小宣告,那麼其大小將完全取決於父box的大小。即:盒子的大小等於父級盒子的大小乘以其box-flex在所有子盒子box-flex總和中的百分比(子盒子的大小=父盒子的大小*子盒子的box-flex/所有子盒子的box-flex值的和)。

如果乙個或更多的盒子有乙個具體的大小宣告,那麼其大小將計算其中,餘下的彈性盒子將按照上面的原則分享剩下的可利用空間。

看看下面的例子,理解起來更容易。

所有盒子都是彈性的

下面的例子中,box1的大小為box2的兩倍,box2與box3大小一樣。看起來好像是用百分比定義盒子的大小,但是有乙個區別:使用彈性盒模型,增加乙個盒子,無須重新計算其大小。

body

#box1

#box2

#box3

一些盒子有固定大小

下面的例子中,box3並不是彈性的,寬度為160px;這樣box1和box2將有240px的可利用空間。因此,box1的寬度為160px(240*2/3),box2的寬度為80px(240*1/3)。

body

#box1

#box2

#box3

溢位管理

因為是彈性盒子、非彈性盒子混排,有可能所有盒子的尺寸大於或小於父盒子的尺寸。這樣就有可能空間太多或空間不足。

空間太多如何處理

可利用空間的分布取決於兩個屬性值:box-align 和 box-pack。

屬性「box-pack」管理水平方向上的空間分布,有以下四個可能屬性:start、end、 justify、 or center。

start 所有盒子在父盒子的左側,餘下的空間在右側;

end所有盒子在父盒子的右側,餘下的空間在左側;

justify 餘下的空間在盒子間平均分配;

center 可利用的空間在父盒子的兩側平均分配。

屬性「box- align」管理垂直方向上的空間分布,有以下五個可能屬性之:start、 end,、center、 baseline和 stretch。

start 每個盒子沿父盒子的上邊緣排列,餘下的空間位於底部;

end 每個盒子沿父盒子的下邊緣排列,餘下的空間位於頂部;

center 可用空間平均分配,上面一半,下面一半;

baseline 所有盒子沿著它們的基線排列,餘下的空間可前可後;

stretch 每個盒子的高度調整到適合父盒子的高度

body

#box1

#box2

#box3

空間不足怎麼辦

與傳統的盒模型一樣,overflow屬性用來決定其顯示方式。為了避免溢位,你可以設定box-lines為multiple使其換行顯示。

彈性盒模型看起來很不錯,gecko 和 webkit對該模型都有一些嘗試性的測試。在這些屬性之前加上-moz和-webkit即可使用該屬性。也即是說,firefox、safari、chrome可以使用這些特性,可以看看這個彈性盒模型的demo。

作為前端開發者來說,該模型對我們解決網頁設計中一些常見的問題非常方便,如:表單布局、垂直居中、視覺上分離html流,等等。不就的將來它將成為乙個web標準,早早熟悉它不是什麼壞事

針對webkit核心瀏覽器,乙個簡單的示例如下**所示:

>

>

charset="utf8"

>

>html5

>

>

body

#box1

#box2

#box3

div>

>

>

id="box1"

>

>

id="box2"

>

>

id="box3"

>

>

>

>

該示例的執行效果如下圖所示。

拖動以改變瀏覽器的大小時,可以看到,隨著body寬度的變化,box1、box2和box3三個盒子的寬度也會隨之變化,但是都保持著定義好的2∶1∶1比例。

css3 彈性盒模型

1.box flex 定義盒子的彈性空間 子元素的尺寸 盒子的尺寸 子元素的box flex屬性值 所有子元素的box flex屬性值的和 例題 中間寬度固定,兩側寬度自適應 box div nth of type 1 box div nth of type 2 box div nth of typ...

CSS3彈性盒模型

一.方向和順序 彈性盒子的內容可以以任何方向和順序布局,這使布局更簡單,其功能通過以下幾個屬性實現 1 flex direction 值為row 預設值 row reverse column column reverse,用於控制彈性盒子的內容在主軸上的放置方向。row 與當前的寫模式相同,例如 中...

Css3彈性盒模型

css3引入了新的盒模型 彈性盒模型,該模型決定乙個盒子在其他盒子中的分布方式以及如何處理可用的空間。這與xul 火狐使用的使用者互動語言 相似,其它語言也使用相同的盒模型,如xaml gladexml。使用該模型,可以很輕鬆的建立自適應瀏覽器視窗的流動布局或自適應字型大小的彈性布局。本文的例子使用...