Flex 佈局(layout)

Flex 佈局(layout)

Flex是Flexible Box(彈性盒)的縮寫,意爲”彈性佈局”。網頁佈局(layout)是 CSS 的一個重點應用。佈局的傳統解決方案,基於盒狀模型,依賴 display 屬性 + position屬性 + float屬性。它對於那些特殊佈局非常不方便。

2009年,W3C提出了一種新的方案——Flex佈局(Flex layout),可以簡便、完整、響應式地實現各種頁面佈局。注意,設爲 Flex 佈局以後,子元素的float、clear和vertical-align屬性將失效。Internet Explorer 9 及更早版本不支持 flex 屬性。

採用Flex佈局的元素,稱爲Flex容器(flex container),簡稱”容器”。它的所有子元素自動成爲容器成員,稱爲Flex項目(flex item),簡稱”項目”。

 

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

項目默認沿主軸排列。單個項目佔據的主軸空間叫做main size,佔據的交叉軸空間叫做cross size。

 

任何一個容器都可以指定爲Flex佈局。

【在HTML開發中我們常常會使用一類標籤作爲容器放置一些內容,我們把這類標籤稱之爲容器標籤,可以作爲容器標籤的包括列表標籤、表格標籤、框架標籤、佈局標籤。參見

https://www.cnblogs.com/yunxiansheng/p/9190454.html】

 

使用Flex 佈局(layout),需要了解下面屬性語法

flex 屬性

flex-basis 屬性

flex-direction 屬性

flex-flow 屬性

flex-grow 屬性

flex-shrink 屬性

flex-wrap 屬性

 

 

首先學習flex 屬性

 

實例1

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>flex測試</title>

<style>

#main

{

       width:220px;

       height:300px;

       border:1px solid black;

       display:flex;

}

 

#main div

{

       flex:1;   <!--請注意這裏將 flex:1;換爲 flex: auto; 試試 -->

}

</style>

</head>

<body>

 

<div id="main">

  <div style="background-color:coral;">紅色</div>

  <div style="background-color:lightblue;">藍色</div> 

  <div style="background-color:lightgreen;">帶有更多內容的綠色 div</div>

</div>

 

<p><b>注意:</b> Internet Explorer 9 及更早版本不支持 flex 屬性。</p>

 

</body>

</html>

 

將上面實例代碼,保存的flex01.html文件,用瀏覽器打開運行,顯示如下:

 

將 flex:1;換爲 flex: auto; 用瀏覽器打開運行,顯示如下:

 

flex 屬性語法

flex: flex-grow flex-shrink flex-basis|auto|initial|inherit;

此屬性可取值積極含義:

 

進一步說明

flex 屬性可以指定1個,2個或3個值。

單值語法: 值必須爲以下其中之一:

一個無單位數(<number>): 它會被當作<flex-grow>的值。

一個有效的寬度(width)值: 它會被當作 <flex-basis>的值。

關鍵字none,auto或initial.

雙值語法: 第一個值必須爲一個無單位數,並且它會被當作 <flex-grow> 的值。第二個值必須爲以下之一:

一個無單位數:它會被當作 <flex-shrink> 的值。

一個有效的寬度值: 它會被當作 <flex-basis> 的值。

三值語法:

第一個值必須爲一個無單位數,並且它會被當作 <flex-grow> 的值。

第二個值必須爲一個無單位數,並且它會被當作  <flex-shrink> 的值。

第三個值必須爲一個有效的寬度值, 並且它會被當作 <flex-basis> 的值。

initial

元素會根據自身寬高設置尺寸。它會縮短自身以適應 flex 容器,但不會伸長並吸收 flex 容器中的額外自由空間來適應 flex 容器 。相當於將屬性設置爲"flex: 0 1 auto"。

auto

元素會根據自身的寬度與高度來確定尺寸,但是會伸長並吸收 flex 容器中額外的自由空間,也會縮短自身來適應 flex 容器。這相當於將屬性設置爲 "flex: 1 1 auto".

none

元素會根據自身寬高來設置尺寸。它是完全非彈性的:既不會縮短,也不會伸長來適應 flex 容器。相當於將屬性設置爲"flex: 0 0 auto"。

<'flex-grow'>

定義 flex 元素的 flex-grow 屬性,詳見 <number>。默認值爲 0,負值無效。

<'flex-shrink'>

定義 flex 元素的 flex-shrink 屬性,詳見 <number>。默認值爲1,負值無效。

<'flex-basis'>

定義 flex 元素的 flex-basis 屬性。若值爲0,則必須加上單位,以免被視作伸縮性。 默認值爲 auto。

 

flex-basis 屬性

實例2

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title> flex-basis測試</title>

<style>

#main {

    width: 350px;

    height: 100px;

    border: 1px solid #c3c3c3;

    display: -webkit-flex; /* Safari */

    display: flex;

}

 

#main div {

    flex-grow: 0;

    flex-shrink: 0;

    flex-basis: 40px;

}

 

#main div:nth-of-type(2) {

    flex-basis: 80px;   <!--請注意這裏-->

}

</style>

</head>

<body>

 

<div id="main">

  <div style="background-color:coral;"></div>

  <div style="background-color:lightblue;"></div>

  <div style="background-color:khaki;"></div>

  <div style="background-color:pink;"></div>

  <div style="background-color:lightgrey;"></div>

</div>

 

<p><b>注意:</b> Internet Explorer 10 及更早版本瀏覽器不支持 flex-basis 屬性。</p>

 

</body>

</html>

 

將上面實例代碼,保存的flex02.html文件,用瀏覽器打開運行,顯示如下:

 

flex-basis 屬性語法

flex-basis: number|auto|initial|inherit;

 

此屬性可取值積極含義:

就介紹到這裏吧。

要想更多學習,可參考:

 

https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex

https://www.runoob.com/cssref/css3-pr-flex.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章