## 一、彈性盒模型
彈性盒模型是css3的一種新的布局方式,是一種當前頁面需要適應不同的屏幕大小及設備類型時確保擁有恰當的行為的布局方式。
**要點:**
- 主要是針對容器類元素中對子元素的布局上的控制
- 彈性盒模型是由彈性容器與彈性子元素構成
- 對于父級元素之外,子元素以內是正常渲染的,與彈性盒模型無關
## 二、CSS3 彈性盒子內容
### 1、基本概念
- 彈性盒子由彈性容器(Flex container)和彈性子元素(Flex item)組成。
- 彈性容器通過設置 display 屬性的值為 flex 或 inline-flex將其定義為彈性容器。
- 彈性容器內包含了一個或多個彈性子元素。
- 彈性子元素通常在彈性盒子內一行顯示。默認情況每個容器只有一行。
### 2、display:flex 和 display:inline-flex 區別
- flex: 將對象作為彈性伸縮盒顯示
- inline-flex:將對象作為內聯塊級彈性伸縮盒顯示
#### (1)flex
```
.main {
background-color: #0f0;
display: flex;
}
.main>div {
width: 50px;
height: 50px;
border: 1px solid #000;
}
<div class="main">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
```
此時沒有為父元素main設置寬度,默認為100%;
#### (2)inline-flex
```
.main {
background-color: #0f0;
display: inline-flex;
}
.main>div {
width: 50px;
height: 50px;
border: 1px solid #000;
}
.main div:nth-child(2) {
height: 60px;
}
<div class="main">
<div></div>
<div></div>
<div></div>
<div></div>
</div>
```
此處雖然沒有給父元素設置寬度,但是父元素默認會根據子元素的寬高去自適應。
## 三、CSS3 彈性盒子常用屬性
屬性 | 描述
---|---
flex-direction | 指定彈性容器中子元素排列方式。
flex-wrap | 設置彈性盒子的子元素超出父容器時是否換行。
flex-flow | flex-direction 和 flex-wrap 的簡寫。
align-items | 設置彈性盒子元素在側軸(縱軸)方向上的對齊方式。
align-content | 修改 flex-wrap 屬性的行為,類似 align-items, 但不是設置子元素對齊,而是設置行對齊。
justify-content | 設置彈性盒子元素在主軸(橫軸)方向上的對齊方式。
### 1、flex-direction 屬性
決定項目的方向。
**注意**:如果元素不是彈性盒對象的元素,則 flex-direction 屬性不起作用。
```
.flex-container { flex-direction: row | row-reverse | column | column-reverse; }
```

**屬性值**
值 | 描述
---|---
row | 默認值。元素將水平顯示,正如一個行一樣。
row-reverse | 與 row 相同,但是以相反的順序。
column | 元素將垂直顯示,正如一個列一樣。
column-reverse| 與 column 相同,但是以相反的順序。
### 2、flex-wrap 屬性
flex-wrap 屬性規定flex容器是單行或者多行,同時橫軸的方向決定了新行堆疊的方向。
值 | 描述
---|---
nowrap | 默認值。規定元素不拆行或不拆列。
wrap | 規定元素在必要的時候拆行或拆列。
wrap-reverse | 規定元素在必要的時候拆行或拆列,但是以相反的順序。
```
.flex-container { flex-wrap: nowrap | wrap | wrap-reverse; }
```
可以取三個值:
**(1)nowrap (默認):不換行**

**(2)wrap:換行,第一行在上方**

**(3)wrap-reverse:換行,第一行在下方**

### 3. flex-flow 屬性
flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為row nowrap。
```
.flex-container { flex-flow: <flex-direction> <flex-wrap> }
```
### 4、align-items屬性
align-items 屬性定義flex子項在flex容器的當前行的側軸(縱軸)方向上的對齊方式。
```
.flex-container {
align-items: flex-start | flex-end | center | baseline | stretch;
}
```
值 | 描述
---|---
stretch | 默認值。項目被拉伸以適應容器。
center | 項目位于容器的中心。
flex-start | 項目位于容器的開頭。
flex-end | 項目位于容器的結尾。
baseline | 項目位于容器的基線上。

### 5、align-content屬性
align-content屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
```
.flex-container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
```
值 | 描述
---|---
flex-start | 與交叉軸的起點對齊。
flex-end | 與交叉軸的終點對齊。
center | 與交叉軸的中點對齊
space-between | 與交叉軸兩端對齊,軸線之間的間隔平均分布。
space-around | 每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。
stretch | (默認值)。軸線占滿整個交叉軸。
。

### 6、justify-content屬性
justify-content 用于設置或檢索彈性盒子元素在主軸(橫軸)方向上的對齊方式。
```
.flex-container {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
```
值 | 描述
---|---
flex-start | 默認值。項目位于容器的開頭。
flex-end | 項目位于容器的結尾。
center | 項目位于容器的中心。
space-between| 項目位于各行之間留有空白的容器內。
space-around | 項目位于各行之前、之間、之后都留有空白的容器內。

## 四、彈性子元素屬性
屬性 | 描述
---|---
order | 設置彈性盒子的子元素排列順序。
flex-grow | 設置或檢索彈性盒子元素的擴展比率。
flex-shrink | 指定了 flex 元素的收縮規則。flex 元素僅在默認寬度之和大于容器的時候才會發生收縮,其收縮的大小是依據 flex-shrink 的值。
flex-basis | 用于設置或檢索彈性盒伸縮基準值。
flex | 設置彈性盒子的子元素如何分配空間。
align-self | 在彈性子元素上使用。覆蓋容器的 align-items 屬性。
### 1、order屬性
```
.flex-container .flex-item { order: <integer>; }
```
\<integer>:用整數值來定義排列順序,數值小的排在前面。可以為負值,默認為0。

### 2、flex-grow屬性
```
.flex-container .flex-item { flex-grow: <integer>; }
```
\<integer>:一個數字,規定項目將相對于其他靈活的項目進行擴展的量。默認值是 0。

### 3、flex-shrink屬性
```
.flex-container .flex-item { flex-shrink: <integer>; }
```
\<integer>:一個數字,規定項目將相對于其他靈活的項目進行收縮的量。默認值是 1。

### 4、flex-basis屬性
```
.flex-container .flex-item { flex-basis: <integer> | auto; }
```
\<integer>:一個長度單位或者一個百分比,規定元素的初始長度。
auto:默認值。長度等于元素的長度。如果該項目未指定長度,則長度將根據內容決定。
### 5、flex屬性
flex 屬性用于設置或檢索彈性盒模型對象的子元素如何分配空間。
flex 屬性是 flex-grow、flex-shrink 和 flex-basis 屬性的簡寫屬性。
```
.flex-container .flex-item { flex: flex-grow flex-shrink flex-basis | auto | initial | inherit; }
```
值 | 描述
---|---
flex-grow | 一個數字,規定項目將相對于其他元素進行擴展的量。
flex-shrink | 一個數字,規定項目將相對于其他元素進行收縮的量。
flex-basis | 項目的長度。合法值:"auto"、"inherit" 或一個后跟 "%"、"px"、"em" 或任何其他長度單位的數字。
auto | 與 1 1 auto 相同。
none | 與 0 0 auto 相同。
initial | 設置該屬性為它的默認值,即為 0 1 auto。
inherit | 從父元素繼承該屬性。
### 6、align-self屬性
```
.flex-container .flex-item {
align-self: auto | stretch | center | flex-start | flex-end | baseline | initial | inherit;
}
```
值 | 描述
---|---
auto | 默認值。元素繼承了它的父容器的 align-items 屬性。如果沒有父容器則為 "stretch"。
stretch | 元素被拉伸以適應容器。
center | 元素位于容器的中心。
flex-start | 元素位于容器的開頭。
flex-end | 元素位于容器的結尾。
baseline | 元素位于容器的基線上。
initial | 設置該屬性為它的默認值。
inherit | 從父元素繼承該屬性。

取值同 align-items。
- 前言
- 一、css垂直居中的幾種實現方法
- 二、簡單說一下盒模型,說下如何利用BFC解決外邊距重疊的問題
- 三、說一說產生塌陷的原因以及清除浮動的幾種方法
- 四、偽類和偽元素的區別?聊一下css選擇器的優先級
- 五、css中的過渡和動畫效果了解嗎
- 六、彈性盒模型了解嗎
- 七、簡單說下BOM和DOM的區別
- 八、如何解決瀏覽器的兼容性問題?瀏覽器調優都用到過哪些方法
- 九、之前寫過h5嗎?有遇到過哪些兼容性問題?說下怎么解決的
- 十、h5是如何做移動端適配的?折行的時候如何實現不斷行
- 十一、聊一聊js中實現數組拷貝的常用方法
- 十二、聊聊js中的數據類型,如何用js實現一個對象的深拷貝
- 十三、偽數組和數組的區別?相互轉化的方法有哪些
- 十四、請介紹Js中有哪些循環遍歷的方法,關于數組常用的方法有哪些
- 十五、js中的reduce了解嗎?都用他解決過什么問題
- 十六、事件冒泡和捕獲的執行順序了解嗎?什么是事件委托
- 十七、call和apply的區別是什么?caller和callee的區別有哪些
- 十八、javascript中的this都有哪些用法
- 十九、怎么理解js中的原型鏈?如何實現繼承?實現繼承常用的方式有哪些
- 二十、聊一聊js的作用域和作用域鏈
- 二十一、js的閉包了解嗎?閉包的常見用法說一下
- 二十二、setTimeout和setInterval的運行機制了解嗎
- 二十三、函數的柯里化了解嗎?說下函數柯里化應用的場景
- 二十四、用js寫一個ajax的原生實現方法
- 二十五、js如何實現跨域?聊一聊你之前用到過的方法
- 二十六、聊一下cookie、session和token三者的區別及使用
- 二十七、用js實現一下數組去重和排序,有哪些方法可以實現
- 二十八、寫一個方法,統計一下html文檔的元素包括元素的數量
- 二十九、用js實現一個省市級聯效果
- 三十、用js實現一個輪播圖效果,簡單說下原理
- 三十一、請你實現一個大文件上傳和斷點續傳
- 三十二、什么是模塊化開發?談下AMD、CMD、CommonJs和ES6的區別
- 三十三、es6了解嗎?說幾個常見的新特性,set和weakSet的區別是什么
- 三十四、解構賦值的用法了解嗎?如何實現對象和數組的嵌套和重命名
- 三十五、談談你對promise的用法和理解
- 三十六、談談你對es6中的Generator函數的認識
- 三十七、談一下async-await的實現原理
- 三十八、用js實現一下觀察者模式?簡單說一下原理
- 三十九、了解JavaScript中的裝飾器嗎?聊一下JS中的getter與setter的用法
- 四十、聊一下正則表達式里的常見用法