Flex布局

參考:
flex 布局的基本概念 - CSS:層疊樣式表 | MDN (mozilla.org)
flex布局 - 簡書 (jianshu.com)

這是總結(jié)關(guān)鍵字

關(guān)鍵字 屬性 注釋
display flex 標(biāo)記flex布局
flex-direction row
row-reverse
column
column-reverse
方向:決定了flex 方向主軸是橫向還是豎向
flex-wrap wrap 換行:里面內(nèi)容太大而無法全部顯示在一行中,則會(huì)換行顯示
flex-flow row wrap 簡寫:屬性支持換行和模式,兼容[flex-direction flex-wrap]
flex-grow 0到∞ 占比:讓所有元素分割不同占比
flex-shrink 0到∞ 收縮:flex 元素僅在默認(rèn)寬度之和大于容器的時(shí)候才會(huì)發(fā)生收縮
flex-basis auto; 參照我的width和height屬性
max-content; 內(nèi)容有多寬,盒子就有多寬鸭津,不會(huì)顧及父級(jí)盒子有多寬蚯舱,只滿足自己的需求
min-content; 裝下單個(gè)最大內(nèi)容的最小寬度,中文是一個(gè)佩憾,英文是一個(gè)單詞
fit-content; 在不超過父級(jí)盒子寬度的情況下哮伟,盡量撐開盒子滿足自己的需求
content; content代表自動(dòng)尺寸
0; 0比min占用的空間更少
200px; 200px的空間
Flex 屬性的簡寫1 1 1 auto 簡寫形式允許你把三個(gè)數(shù)值按這個(gè)順序書寫:flex-grow干花,flex-shrink,flex-basis
Flex 屬性的簡寫2 flex: initial = flex: 0 1 auto
flex: auto = flex: 1 1 auto
flex: none = flex: 0 0 auto
flex: <positive-number> = flex: number 1 0
align-items stretch:鋪滿交叉軸楞黄,根據(jù)內(nèi)容鋪滿
flex-start:交叉軸如果是豎向池凄,就居上,也是默認(rèn)值
flex-end: 交叉軸如果是豎向鬼廓,就居下
center: 交叉軸如果是豎向修赞,就上下居中
justify-content stretch:鋪滿主軸,根據(jù)內(nèi)容鋪滿
flex-start:主軸如果是橫向桑阶,就居左柏副,也是默認(rèn)值
flex-end: 主軸如果是橫向,就居右
center: 主軸如果是橫向蚣录,就左右居中
space-around:主軸如果是橫向割择,就左右以平衡的方式分散
space-between:主軸如果是橫向,就左右以平衡的方式分散萎河,但是最左邊跟最右邊的兩個(gè)控件是靠邊的

首先Flex要明白有主軸荔泳、交叉軸

默認(rèn)橫向主軸,豎向交叉軸


默認(rèn)橫向主軸

豎向交叉軸豎向交叉軸

Flex 容器

image.png
          .box {
            display: flex;
          }

        <div class="box">
          <div>One</div>
          <div>Two</div>
          <div>Three
              <br>has
              <br>extra
              <br>text
          </div>
        </div>

更改 flex 方向 flex-direction

image.png
        .box {
          display: flex;
          flex-direction: row-reverse;
        }
        <div class="box">
          <div>One</div>
          <div>Two</div>
          <div>Three</div>
        </div>

豎向 flex-direction

image.png
flex-direction: column; 

用 flex-wrap 實(shí)現(xiàn)多行 Flex 容器

image.png
      .box {
        display: flex;
        flex-wrap: wrap;
    }
      <div class="box">
        <div>One</div>
        <div>Two</div>
        <div>Three</div>
      </div>

簡寫屬性 flex-flow 支持換行和模式

image.png
      .box {
        display: flex;
        flex-flow: row wrap;
      }
      <div class="box">
        <div>One</div>
        <div>Two</div>
        <div>Three</div>
      </div>

flex-grow 占比模式

通過占比讓所有元素分別占據(jù)不同占比


image.png

flex-shrink 縮小占比模式

        #content {
            display: flex;
            width: 500px;
        }

        #content div {
            flex-basis: 120px;
            border: 3px solid rgba(0, 0, 0, .2);
        }

        .box {
            flex-shrink: 3;
        }

        .box1 {
            flex-shrink: 1;
        }
    <p>整個(gè)寬度為500px,而每個(gè)div 120px,當(dāng)5個(gè)div的總寬度超過500px后,通過占比劃分不同寬度,占比越高,就縮小越多</p>
    <div id="content">
        <div class="box" style="background-color:red;">A</div>
        <div class="box" style="background-color:lightblue;">B</div>
        <div class="box" style="background-color:yellow;">C</div>
        <div class="box1" style="background-color:brown;">D</div>
        <div class="box1" style="background-color:lightgreen;">E</div>
    </div>
image.png

flex-basis 數(shù)值決定大小

.container {
  font-family: arial, sans-serif;
  margin: 0;
  padding: 0;
  list-style-type: none;
  display: flex;
  flex-wrap: wrap;
}

.flex {
  background: #6AB6D8;
  padding: 10px;
  margin-bottom: 50px;
  border: 3px solid #2E86BB;
  color: white;
  font-size: 20px;
  text-align: center;
  position: relative;
}

.flex:after {
  position: absolute;
  z-index: 1;
  left: 0;
  top: 100%;
  margin-top: 10px;
  width: 100%;
  color: #333;
  font-size: 18px;
}

.flex1 {
  flex-basis: auto;
}

.flex1:after {
  content: 'auto';
}

.flex2 {
  flex-basis: max-content;
}

.flex2:after {
  content: 'max-content';
}

.flex3 {
  flex-basis: min-content;
}

.flex3:after {
  content: 'min-content';
}

.flex4 {
  flex-basis: fit-content;
}

.flex4:after {
  content: 'fit-content';
}

.flex5 {
   flex-basis: content;
}

.flex5:after {
  content: 'content';
}

.flex6 {
  flex-basis: fill;
}

.flex6:after {
  content: 'fill/-webkit-fill-available/-moz-available';
}

<ul class="container">
  <li class="flex flex1">1: flex-basis test</li>
  <li class="flex flex2">2: flex-basis test</li>
  <li class="flex flex3">3: flex-basis test</li>
  <li class="flex flex4">4: flex-basis test</li>
  <li class="flex flex5">5: flex-basis test</li>
</ul>

<ul class="container">
  <li class="flex flex6">6: flex-basis test</li>
</ul>

image.png

flex-basis有不同屬性作用:

  • flex-basis: auto; 參照我的width和height屬性
  • flex-basis: max-content; 內(nèi)容有多寬虐杯,盒子就有多寬玛歌,不會(huì)顧及父級(jí)盒子有多寬,只滿足自己的需求
  • flex-basis: min-content; 裝下單個(gè)最大內(nèi)容的最小寬度擎椰,中文是一個(gè)支子,英文是一個(gè)單詞
  • flex-basis: fit-content; 在不超過父級(jí)盒子寬度的情況下,盡量撐開盒子滿足自己的需求
  • flex-basis: content; content代表自動(dòng)尺寸
  • flex-basis: 0; 0比min占用的空間更少
  • flex-basis: 200px; 200px的空間

Flex 屬性的簡寫

      .box {
        display: flex;
      }

      .one {
        flex: 1 1 auto;
      }

      .two {
        flex: 1 1 auto;
      }

      .three {
        flex: 1 1 auto;
      }
      <div class="box">
        <div class="one">One</div>
        <div class="two">Two</div>
        <div class="three">Three</div>
      </div>
image.png

Flex 簡寫形式允許你把三個(gè)數(shù)值按這個(gè)順序書寫 — flex-grow达舒,flex-shrink值朋,flex-basis。

  • flex-grow巩搏。賦值為正數(shù)的話是讓元素增加所占空間
  • flex-shrink — 正數(shù)可以讓它縮小所占空間昨登,但是只有在 flex 元素總和超出主軸才會(huì)生效
  • flex-basis;flex 元素是在這個(gè)基準(zhǔn)值的基礎(chǔ)上縮放的贯底。

以下幾種模式更加簡寫

  • flex: initial = flex: 0 1 auto
  • flex: auto = flex: 1 1 auto
  • flex: none = flex: 0 0 auto
  • flex: <positive-number> = flex: number 1 0

align-items

          .box {
            display: flex;
            align-items: flex-start;
          }
        <div class="box">
          <div>One</div>
          <div>Two</div>
          <div>Three
              <br>has
              <br>extra
              <br>text
          </div>
        </div>

image.png

align-items代表著里面的控件交叉軸對(duì)齊方式丰辣,跟flex-direction有點(diǎn)不一樣

  • stretch:鋪滿交叉軸,根據(jù)內(nèi)容鋪滿
  • flex-start:交叉軸如果是豎向禽捆,就居上笙什,也是默認(rèn)值
  • flex-end: 交叉軸如果是豎向,就居下
  • center: 交叉軸如果是豎向睦擂,就上下居中

justify-content

          .box {
            display: flex;
            justify-content: space-between;
          }
        <div class="box">
          <div>One</div>
          <div>Two</div>
          <div>Three</div>
        </div>

image.png

justify-content代表著里面的控件主軸對(duì)齊方式得湘,跟flex-direction有點(diǎn)不一樣

  • stretch:鋪滿主軸,根據(jù)內(nèi)容鋪滿
  • flex-start:主軸如果是橫向顿仇,就居左淘正,也是默認(rèn)值
  • flex-end: 主軸如果是橫向摆马,就居右
  • center: 主軸如果是橫向,就左右居中
  • space-around:主軸如果是橫向鸿吆,就左右以平衡的方式分散
  • space-between:主軸如果是橫向囤采,就左右以平衡的方式分散,但是最左邊跟最右邊的兩個(gè)控件是靠邊的

控制對(duì)齊的屬性

        .box {
            width: 1000px;
            height: 1000px;
            display: flex;
            align-items: center;
            justify-content: center;
        }

        .box div {
            width: 100px;
            height: 100px;
        }
image.png
  • justify-content - 控制主軸(橫軸)上所有 flex 項(xiàng)目的對(duì)齊惩淳。
  • align-items - 控制交叉軸(縱軸)上所有 flex 項(xiàng)目的對(duì)齊蕉毯。
  • align-self - 控制交叉軸(縱軸)上的單個(gè) flex 項(xiàng)目的對(duì)齊。
  • align-content - 控制“多條主軸”的 flex 項(xiàng)目在交叉軸的對(duì)齊思犁。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末代虾,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子激蹲,更是在濱河造成了極大的恐慌棉磨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件学辱,死亡現(xiàn)場離奇詭異乘瓤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)策泣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門衙傀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萨咕,你說我怎么就攤上這事统抬。” “怎么了任洞?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵蓄喇,是天一觀的道長发侵。 經(jīng)常有香客問我交掏,道長,這世上最難降的妖魔是什么刃鳄? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任盅弛,我火速辦了婚禮,結(jié)果婚禮上叔锐,老公的妹妹穿的比我還像新娘挪鹏。我一直安慰自己,他們只是感情好愉烙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布讨盒。 她就那樣靜靜地躺著,像睡著了一般步责。 火紅的嫁衣襯著肌膚如雪返顺。 梳的紋絲不亂的頭發(fā)上禀苦,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音遂鹊,去河邊找鬼振乏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秉扑,可吹牛的內(nèi)容都是我干的慧邮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼舟陆,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼误澳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秦躯,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤脓匿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后宦赠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陪毡,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年勾扭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了毡琉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妙色,死狀恐怖桅滋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情身辨,我是刑警寧澤丐谋,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站煌珊,受9級(jí)特大地震影響号俐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜定庵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一吏饿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔬浙,春花似錦猪落、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至俱病,卻和暖如春官疲,著一層夾襖步出監(jiān)牢的瞬間杂曲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工袁余, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留擎勘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓颖榜,卻偏偏與公主長得像棚饵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掩完,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 簡介 1 .1維布局噪漾,一個(gè)flex一次只能處理一個(gè)維度上的元素布局,一行或者一列且蓬。2 .如果不規(guī)定換行欣硼,就算是超了...
    skoll閱讀 1,057評(píng)論 0 0
  • 尋根溯源話布局 一切都始于這樣一個(gè)問題:怎樣通過 CSS 簡單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中恶阴。記得剛開始學(xué)習(xí) CS...
    Gaizka閱讀 20,529評(píng)論 9 19
  • 目錄 傳統(tǒng)盒模型 Flexbox 布局方式 Flexbox 核心概念 Flex 容器屬性 flex-directi...
    ZhaoYLi閱讀 511評(píng)論 1 5
  • 在 CSS2的時(shí)代诈胜,前端的布局基本上采用標(biāo)準(zhǔn)流配合浮動(dòng)來進(jìn)行開發(fā),從CSS3開始提供了Flex布局(彈性布局)來適...
    MambaYong閱讀 389評(píng)論 0 1
  • 微信小程序 View 支持兩種布局方式:Block 和 Flex冯事,所有 View 默認(rèn)都是 block浮動(dòng)布局焦匈,要...
    木馬不在轉(zhuǎn)閱讀 37,535評(píng)論 1 23