前端高階系列 五 flex布局

2021-09-13 09:16:52 字數 3071 閱讀 4334

以下內容主要摘抄自阮一峰老師的部落格

flexbox布局(flexible box)模組(目前是w3c last call working draft)旨在提供更有效的布局方式,即使容器中的專案之間對齊和分配空間的大小未知或動態(因此單詞「flex」)。

flex布局背後的主要思想是讓容器能夠改變其專案的寬度/高度(和順序),以最好地填充可用空間(主要是為了適應所有型別的顯示裝置和螢幕尺寸)。flex容器擴充套件專案以填充可用空間,或縮小它們以防止溢位。

最重要的是,flexbox布局與方向無關,而不是常規布局(基於垂直的塊和基於水平的內聯塊)。雖然那些適用於頁面,但它們缺乏靈活性來支援大型或複雜的應用程式(特別是在方向更改,調整大小,拉伸,縮小等方面)。

注意:flexbox布局最適合應用程式的元件和小規模布局,而grid布局則適用於更大規模的布局。

容器預設存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與側邊的交叉點)叫做main-start,結束位置叫main end;交叉軸的開始位置叫cross start,結束位置叫cross end

專案預設沿主軸排列。單個專案佔據的主軸空間叫main size,佔據的交叉軸空間叫cross size

flex-direction屬性決定主軸的方向(即專案的排列方向)。

.container
預設情況下,flex專案都會嘗試適合一行。您可以更改它並允許專案根據需要使用此屬性進行換行。

.container
flex-flow屬性是flex-directionflex-wrap屬性的復合屬性。

flex-flow屬性用於設定或檢索彈性盒模型物件的子元素排列方式。

flex-flow:  ||
justify-content屬性定義了專案在主軸上的對齊方式

.container
align-items屬性定義專案在交叉軸上如何對齊。

.box
它可能取5個值。具體的對齊方式與交叉軸的方向有關,下面假設交叉軸從上到下。

align-content屬性定義了多根軸線的對齊方式。如果專案只有一根軸線,該屬性不起作用。

.box
order屬性定義專案的排列順序。數值越小,排列越靠前,預設為0.

.item
flex-grow屬性定義專案的放大比例,預設為0,即如果存在剩餘空間,也不放大。

.item
如果所有專案的flex-grow屬性都為1,則它們將等分剩餘空間(如果有的話)。如果乙個專案的flex-grow屬性為2,其他專案都為1,則前者佔據的剩餘空間將比其他項多一倍。

flex-shrink屬性定義了專案的縮小比例,預設為1,即如果空間不足,該專案將縮小。

如果所有專案的flex-shrink屬性都為1,當空間不足時,都將等比例縮小。如果乙個專案的flex-shrink屬性為0,其他專案都為1,則空間不足時,前者不縮小。

負值對該屬性無效。

flex-basis屬性定義了在分配多餘空間之前,專案佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的預設值為auto,即專案的本來大小。

.item
它可以設為跟widthheight屬性一樣的值(比如350px),則專案將佔據固定空間。

flex屬性是flex-grow,flex-shrinkflex-basis的簡寫,預設值為0 1 auto。後兩個屬性可選。

.item
該屬性有兩個快捷值:auto(1 1 auto) 和none(0 0 auto)。

建議優先使用這個屬性,而不是單獨寫三個分離的屬性,因為瀏覽器會推算相關值。

align-self屬性允許單個專案有與其他專案不一樣的對齊方式,可覆蓋align-items屬性。預設值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於`stretch。

.item
該屬性可能取6個值,除了auto,其他都與align-items屬性完全一致。

前端布局之Flex布局

傳統布局方式基於盒模型,依賴display屬性 position屬性 float屬性。由於傳統布局一些操作複雜,2009年w3c提出了flex布局,可以簡便 響應式的實現各種布局,並且能夠相容所有瀏覽器。區別於傳統布局的 盒子 在flex布局中稱為 flex容器 flex container 其所有...

前端基礎 flex布局

父元素設為 flex 布局以後,子元素的float clear和vertical align屬性將失效。採用flex布局的元素,稱為 容器 所有子元素稱為 專案 容器預設存在兩根軸 水平的主軸 main axis 和垂直的交叉軸 cross axis 主軸的開始位置 與邊框的交叉點 叫做main s...

前端 flex布局API

1 要使用伸縮部局先要給 父元素設定為伸縮盒子 display flex 2 伸縮盒子具有了主軸 預設水平從左向右 伸縮盒子還有測軸 側軸始終垂直於主軸 伸縮盒子中所有的子元素都按照主軸的方向顯示 3 設定主軸方向 預設值row flex direction row 從左向右 flex direct...