28-(flex)伸縮布局/彈性布局

  • 主軸和側(cè)軸
主軸和側(cè)軸.png
  • 注意:
    flex:將一個容器設(shè)置為塊伸縮容器
    inline-flex:將一個容器設(shè)置為內(nèi)聯(lián) 伸縮容器
  • 注意:設(shè)為 Flex 布局以后,css的columns在伸縮容器上將失效;子元素的float、clear和vertical-align屬性將失效。
  1. 主軸方向問題
  • 1.1 在伸縮布局中, 默認(rèn)伸縮項是從左至右的排版的

        display: flex;
    
  • 1.2 主軸的排版的方向默認(rèn)就是row, 默認(rèn)就是從左至右

       flex-direction: row;
    
  • 1.3. 修改主軸的排版方向為從右至左

     flex-direction: row-reverse;
    
  • 1.4 告訴系統(tǒng)把主軸的方向改為垂直方向

  • 注意點:

  • 1.5 默認(rèn)情況下主軸是水平方向的, 但是也可以修改為垂直方向。
    只要看到

     flex-direction: column   
    
  • 或者

     column-reverse就代表主軸被修改為了垂直方向
    
  • 1.6 如果將主軸修改為了垂直方向, 那么側(cè)軸就會自動從垂直方向轉(zhuǎn)換為水平方向

  • 修改主軸的排版方向為從上至下

     flex-direction: column;
    
  • 修改主軸的排版方向為從下至上

    flex-direction: column-reverse;
    
  1. 主軸對齊方式
  • 2.1 主軸
    • 用于設(shè)置伸縮項主軸上的對齊方式!
  • 如果設(shè)置為flex-start, 代表告訴系統(tǒng)伸縮項和主軸的起點對齊
  justify-content:取值;
  • 2.2 伸縮項和主軸的起點對齊
  justify-content: flex-start;
  • 2.3 伸縮項和主軸的終點對齊
  justify-content: flex-end;
  • 2.3 居中對齊
  justify-content: center; 
  • 2.4 兩端對齊
  justify-content: space-between;
  • 2.5 環(huán)繞對齊:每個項目兩側(cè)的間隔相等
  justify-content: space-around;
  • 2.6 總結(jié):

     語法:*justify-content:flex-start|flex-end|center|space-between|space-around*
    
  • flex-start:伸縮項目向一行的起始位置靠齊

  • flex-end:伸縮項目向一行的結(jié)束位置靠齊

  • center:伸縮項目向一行的中間位置靠齊

  • space-between:伸縮項目會平均的分布在行里

  • space-around:伸縮項目會平均地分布在行里,兩端保留一半的空間

示例鏈接:

http://www.runoob.com/try/playit.php?f=playcss_justify-content&preval=initial

  1. 側(cè)軸對齊方式
  • 3.1 側(cè)軸
    通過align-items可以修改側(cè)軸的對齊方式
    默認(rèn)情況下是以側(cè)軸的起點對齊

  • 3.2 以側(cè)軸的起點對齊

  align-items: flex-start;
  • 3.3 以側(cè)軸的終點對齊
  align-items: flex-end;
  • 3.4 以側(cè)軸的中線對齊
  align-items: center;
  • 3.5 基線對齊
  align-items: baseline;
  • 3.6 拉伸對齊
  align-items: stretch;
  • 注意點:
    和主軸不同的是, 側(cè)軸沒有兩端對齊和環(huán)繞對齊
  • 3.7 總結(jié):

  • align-items和justify-content相呼應(yīng)。align-items調(diào)整伸縮項目在側(cè)軸上的定位方式,主要用來定義伸縮項目可以在伸縮容器的當(dāng)前行的側(cè)軸對齊方式。

     *  語法:align-items:flex-start|flex-end|center|baseline|stretch
    
  • flex-start:伸縮項目在側(cè)軸起點邊的外邊距緊靠住該行在側(cè)軸起始邊

  • flex-end:伸縮項目在側(cè)軸終點邊的外邊距靠住該行在側(cè)軸終點邊

  • center:伸縮項目的外邊距盒在該行的側(cè)軸上居中放置

  • baseline:伸縮項目根據(jù)伸縮項目的基線對齊

  • stretch:默認(rèn)值,伸縮項目拉伸填充整個伸縮容器
    (伸縮項目設(shè)置寬度或者高度之后不會被拉伸)
    示例:
    http://www.runoob.com/try/playit.php?f=playcss_align-items&preval=stretch
    http://www.runoob.com/try/playit.php?f=playcss_align-self&preval=auto

  • 3.8 注意點:

  • 如果在伸縮容器中通過 align-items 修改側(cè)軸的對齊方式, 是修改所有伸縮項側(cè)軸的對齊方式

  • 如果是在伸縮項中通過 align-self 修改側(cè)軸的對齊方式, 是單獨修改當(dāng)前伸縮項側(cè)軸的對齊方式

  • align-self屬性的取值和align-items一樣

  1. 伸縮換行flex-wrap
  • 在伸縮布局中, 如果伸縮容器的寬度不夠, 系統(tǒng)會自動壓縮伸縮項的寬度, 保證所有的伸縮項都能放在伸縮容器中
  • 如果當(dāng)伸縮容器寬度不夠時, 不想讓伸縮項被壓縮, 也可以讓系統(tǒng)換行flex-wrap: wrap;
  • 默認(rèn)情況下如果伸縮容器的高度比換行之后所有伸縮項的高度還要高, 那么系統(tǒng)會自動將剩余空間平分之后添加給每一行

寬度不夠也不換行, 默認(rèn)取值

        flex-wrap: nowrap;
        寬度不夠也不換行, 默認(rèn)取值
      

        flex-wrap: wrap;
        如果當(dāng)伸縮容器寬度不夠時, 不想讓伸縮項被壓縮, 也可以讓系統(tǒng)換行flex-wrap: 


        flex-wrap: wrap-reverse;
        伸縮容器多行顯示,ltr排版下,伸縮項目從右向左排列;
        rtl排版下,伸縮項目從左往右排列(與wrap相反)

總結(jié):

  • nowrap:伸縮容器單行顯示,ltr排版下,伸縮項目從左到右排列;rtl排版下,伸縮項目從右向左排列(默認(rèn)值)
  • wrap:伸縮容器多行顯示,ltr排版下,伸縮項目從左到右排列;rtl排版下伸縮項目從右向左排列。
  • wrap-reverse:伸縮容器多行顯示,ltr排版下,伸縮項目從右向左排列;rtl排版下,伸縮項目從左往右排列(與wrap相反)
  1. 堆棧伸縮行align-content
  • align-content屬性會更改flex-wrap的行為,和align-items相似,但不是對齊伸縮項目,它對齊的是伸縮行。

  • align-content屬性主要用來調(diào)準(zhǔn)伸縮行在伸縮容器里的對齊方式。

  • 語法:align-content:flex-start|flex-end|center|space-between|space-around|stretch

  • 如果伸縮容器中的伸縮項換行了, 那么我們就可以通過align-content來設(shè)置行與行之間的對齊方式

  • 默認(rèn)情況下?lián)Q行就是就是拉伸對齊

  • 一定要注意: 在換行中的拉伸對齊是指, 所有行的高度總和要和伸縮容器的高度一樣。
    所以會將多余的空間平分之后添加給每一行

參數(shù)說明:

  • flex-start:各行向伸縮容器的起點位置堆疊
  • flex-end:各行向伸縮容器的結(jié)束位置堆疊
  • center:各行向伸縮容器的中間位置堆疊
  • space-between:各行在伸縮容器中平均分布
  • space-around:各行在伸縮容器中平均分布,在兩邊各有一半的空間
  • stretch:默認(rèn)值,各行將會伸展以占用額外的空間
  1. 伸縮項排序
  • 如果想調(diào)整伸縮布局中伸縮項的順序, 那么我們可以通過修改伸縮項的order屬性來實現(xiàn)
  • 默認(rèn)情況下order的取值是0
  • 如果我們設(shè)置了order屬性的值, 那么系統(tǒng)就會按照設(shè)置的值從小到大的排序
  1. 伸縮項放大比例
  • flex-grow作用:
    當(dāng)所有伸縮項寬度的總和沒有伸縮容器寬度大的時, 我們可以通過flex-grow讓系統(tǒng)調(diào)整伸縮項的寬度, 以便于讓所有伸縮項的寬度的總和等于伸縮容器的寬度

         2.flex-grow計算公式
         2.1計算剩余的空間
         伸縮容器寬度 - 所有伸縮項的寬度
         400 - 300 = 100
         2.2計算每份剩余空間的寬度
         剩余空間 / 需要的份數(shù)
         100 / 6 = 16.66
         2.3計算每個伸縮項最終的寬度
         伸縮項的寬度 + 需要的份數(shù) * 每份的寬度
    
         注意點:
         flex-grow默認(rèn)值是0
    
    
     如果伸縮項目的flex-grow設(shè)置為1,每個伸縮項目將設(shè)置一個大小                                       
     相等的額外空間。如果給其中一個伸縮項目設(shè)置flex-grow設(shè)置為2,    
     這個伸縮項目所占的額外空間是其他伸縮項目所占額外空間的2倍。
     也可以這樣理解,把上例各項目的flex-grow值加起來等于4,就是把      
     額外空間分成4份,比例為1的占1份,比例為2的占2份。
    

8、伸縮項縮小比例

  • flex-shrink作用:
  • 當(dāng)所有伸縮項寬度的總和比伸縮容器寬度大的時, 我們可以通過flex-shrink讓系統(tǒng)調(diào)整伸縮項的寬度, 以便于讓所有伸縮項的寬度的總和等于伸縮容器的寬度
2.計算每個伸縮項需要壓縮的寬度
2.1計算溢出的寬度
伸縮容器的寬度 -  所有伸縮項的寬度總和
400 - 600 = -200
2.2計算總權(quán)重
每個伸縮項需要的份數(shù) * 每個伸縮項的寬度
1 * 200 +  2 * 200 + 3 * 200 = 1200
2.3計算每個伸縮項需要壓縮的寬度
溢出的寬度 * 需要的份數(shù) * 每個伸縮項的寬度 / 總權(quán)重
-200 * 1 * 200 / 1200 = -33.33

注意點:
flex-shrink: 默認(rèn)值是1



與flex-grow類似,也是處理伸縮容器額外空間的屬性,不同的是,flex-    
grow處理的是伸縮容器內(nèi)部剩下的額外空間,而flex-shrink處理的是伸 
縮容器外部溢出的額外空間。上例中將溢出的額外空間分成4份,收縮 
比例為1的占1份,收縮比例為2的占2份,如果不設(shè)置收縮比例,默認(rèn)的 
比例為1。

9、伸縮項放大縮小比例
如果有伸縮項沒有設(shè)置flex-grow, 那么系統(tǒng)會保持原有的寬度
而會將多余的寬度等分之后, 按照每個伸縮項需要的份數(shù)添加給它們
如果想讓某個伸縮項不縮小, 那么需要將它的flex-shrink設(shè)置為0

10、伸縮項寬度
如果是伸縮布局, 除了可以通過元素的width屬性來設(shè)置寬度以外, 還可以通過flex-basis屬性來設(shè)置伸縮項的寬度

  • 注意點:
    1.width屬性可以設(shè)置寬度 / flex-basis也可以設(shè)置寬度
    那么如果兩者同時存在, 系統(tǒng)會聽flex-basis的
    2.flex-basis屬性是專門提供給伸縮布局使用的
    3.如果同時通過這兩個屬性設(shè)置了寬度, 但是其中一個是auto, 那么系統(tǒng)會按照具體值來設(shè)置
  1. 伸縮項屬性簡寫:
    flex: flex-grow flex-shrink flex-basis;
    默認(rèn)值:
    flex: 0 1 auto;
    注意點:
     在連寫格式中, flex-shrink flex-basis是可以省略的
     /*
    flex: 1 1 200px;
    */
     flex: 1;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、css的布局模式 css2.1中定義了四種布局模式,由一個盒與其兄弟、祖先盒的關(guān)系決定其尺寸與位置的算法。 塊...
    LemonnYan閱讀 1,170評論 0 1
  • H5移動端知識點總結(jié) 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,829評論 0 26
  • 一、Flex 布局是什么? CSS3引入了一種新的布局模式——Flexbox布局,即伸縮盒模型布局(Flexibl...
    俠客有情劍無情QAQ閱讀 5,903評論 7 94
  • 移動開發(fā)基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,725評論 0 6
  • 前言 FlexBox是css3的一種新的布局方式,天生為解決布局問題而存在的它,比起傳統(tǒng)的布局方式,我們使用Fle...
    zevei閱讀 1,532評論 23 3

友情鏈接更多精彩內(nèi)容