flex布局使用講解

一禾乘、起步

1乱陡、flex介紹

使用flex彈性布局的元素,稱為flex 容器(flex-container)熊昌。它的所有子元素自動(dòng)成為容器成員绽榛,稱為 flex 項(xiàng)目(flex-item)。

即需要分為兩個(gè)部分婿屹,一為flex-container灭美,另一部分為flex-item,flex-item包含于flex-container中昂利,如下面代碼中冲粤,類名為“container”的div塊為flex-container,div中所包含的類名為“item1”页眯、“item2”、“item3”的div塊均為flex-item厢呵。

注意:設(shè)為 flex布局以后窝撵,子元素的float、clear和vertical-align屬性將失效襟铭。

<div class="container">    
    <div class="item item1">item1</div>    
    <div class="item item2">item2</div>    
    <div class="item item3">item3</div>
</div>
.container  {
    width: 500px;
    height: 400px;
    background-color: orange;
    margin: 0 auto;
}

.item {
    width: 100px;
    height: 100px;
    color: #fff;
    line-height: 100px;
    text-align: center;
}

.item1 {
  background-color: #f00;
}

.item2 {
  background-color: #0f0;
}

.item3 { 
  background-color: #00f;
}

二碌奉、flex主軸概念

(1)彈性布局開啟后flex-container元素默認(rèn)存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。
(2)主軸的開始位置(與邊框的交叉點(diǎn))叫做main start寒砖,結(jié)束位置叫做main end赐劣;
(3)交叉軸的開始位置叫做cross start,結(jié)束位置叫做cross end哩都。
(4)flex-item元素默認(rèn)沿主軸排列魁兼。單個(gè)項(xiàng)目占據(jù)的主軸空間叫做main size,占據(jù)的交叉軸空間叫做cross size漠嵌。

二咐汞、開啟flex布局

對flex-container以及其中的flex-item開啟flex布局,需在flex-container做如下設(shè)置:

.container{
      width: 500px;
      height: 400px;
      background-color: orange;
      margin: 0 auto;
      display:flex || inline-flex; 
      // 開啟flex布局儒鹿,當(dāng)display為flex化撕,此容器為塊級元素,當(dāng)為inline-flex時(shí)為行內(nèi)元素
      //Webkit 內(nèi)核的瀏覽器约炎,必須加上-webkit前綴植阴,即-webkit-flex蟹瘾。
}
//其他item屬性暫時(shí)不變
<div class="container">    
    <div class="item item1">item1</div>    
    <div class="item  item2">item2</div>    
    <div class="item  item3">item3</div>
</div>
<span>我是行內(nèi)元素</span>

分布如下圖所示:

三、flex-container屬性

flex-container可設(shè)置如下6種屬性:
(1)flex-direction:控制主軸放方向掠手,默認(rèn)屬性為row
(2)justify-content:決定了flex-item與main axis上的對齊方式
(3)align-items:決定了flex-item與cross axis上的對齊方式
(4)flex-wrap:決定了flex container是單行和多行
(5)flex-flow為flex-direction和flex-wrap的縮寫屬性
(6)align-content決定了多行flex-item與cross axis上的對齊方式憾朴,用法與justify-content相似

1渤昌、flex-direction有如下4個(gè)選項(xiàng):

(1)row:flex-direction控制主軸方向沟涨,默認(rèn)屬性為row。
(2)row-revers:翻轉(zhuǎn)主軸方向断凶。
(3)column:主軸方向改為豎直方向魁衙。
(4)column-reverse:翻轉(zhuǎn)此時(shí)的主軸方向报腔。

.container {
    flex-direction:row || row-reverse|| column || column-reverse || column-reverse;
    // flex-direction:控制主軸方向,默認(rèn)屬性為row
    // row-revers:翻轉(zhuǎn)主軸方向
    // column:主軸方向改為豎直方向
    // column-reverse:翻轉(zhuǎn)此時(shí)的主軸方向
}

示例如下:


2剖淀、justify-content:決定了flex-item與main axis上的對齊方式

(1)flex-start(默認(rèn)值):與main start對齊
(2)flex-end:與main end對齊
(3)center:居中對齊
(4)space-between: flex-item之間距離相等纯蛾,與main start main end兩端對齊
(5)space-around: flex-item之間距離相等,flex-item與main start纵隔、main end之間的距離等于flex-item之間的距離
(6)space-evenly: flex-item之間距離相等翻诉,flex-item與main start、main end之間的距離是flex-item之間的距離的一半

.container {
justify-content: flex-start || flex-end || center || space-between ||  space-around
// flex-start(默認(rèn)值):與main start對齊
// flex-end:與main end對齊
// center:居中對齊
// space-between: flex-item之間距離相等捌刮,與main start碰煌、main end兩端對齊
// space-around:  flex-item之間距離相等,flex-item與main start绅作、main end之間的距離等于flex-item之間的距離
// space-evenly:  flex-item之間距離相等芦圾,flex-item與main start、main end之間的距離是flex-item之間的距離的一半
}

示例如下:

3俄认、align-items:決定了flex-item與cross axis上的對齊方式

(1)normal:與stretch效果一樣
(2)stretch:當(dāng)flex-item在cross axi放下的size為auto時(shí)个少,會(huì)自動(dòng)拉伸填充至flex container
(3)flex-start(默認(rèn)值):items在cross start對齊
(4)flex-end:在cross end對齊
(5)center:居住對齊
(6)baseline:基準(zhǔn)線對齊

.container {
   align-items: normal || stretch || flex-start || flex-end || center || baseline
   // normal: 與stretch效果一樣
   // stretch:當(dāng)flex-item在cross axi放下的size為auto時(shí),會(huì)自動(dòng)拉伸填充至flex  container
   // flex-start(默認(rèn)值):items在cross start對齊
   // flex-end:在cross end對齊
   // center:居住對齊
   //  baseline:基準(zhǔn)線對齊
}

示例如下:

4眯杏、flex-wrap:決定了flex container是單行和多行

(1)nowrap(默認(rèn)值):單行
(2)wrap:多行夜焦,當(dāng)?shù)谝恍凶詈笫5木嚯x占不下時(shí),會(huì)按cross方向等分的flex container部分對齊分配第二行
(3)wrap-reverse:多行(對比wrap岂贩,cross start與cross end相反)

.container {
    flex-wrap: nowrap || wrap || wrap-reverse
    // nowrap(默認(rèn)值):單行
    // wrap:多行茫经,當(dāng)?shù)谝恍凶詈笫5木嚯x占不下時(shí),會(huì)按cross方向等分的flex container部分對齊分配第二行
    // wrap-reverse:多行(對比wrap河闰,cross start與cross end相反)
}

5科平、flex-flow:為flex-direction和flex-wrap的縮寫屬性

例如:

.container {
    flex-flow:column wrap
}

6、align-content:決定了多行flex-item與cross axis上的對齊方式姜性,用法與justify-content相似

(1)stretch(默認(rèn)值):與align-items的stretch效果一樣
(2)flex-start:與cross start對齊
(3)flex-start:與cross end對齊
(4)center居住對齊
(5)space-between: flex-item之間距離相等瞪慧,與cross start、cross end兩端對齊
(6)space-around: flex-item之間距離相等部念,flex-item與cross start弃酌、cross end之間的距離等于flex-item之間的距離
(7)space-evenly: flex-item之間距離相等氨菇,flex-item與cross start、cross end之間的距離是flex-item之間的距離的一半

.container {
    align-content:stretch || flex-start || flex-end || center || space-between || space-around || space-evenly
    // stretch(默認(rèn)值):與align-items的stretch效果一樣
    //flex-start:與cross start對齊
    //flex-end:與cross end對齊
    //center居住對齊
    //space-between: flex-item之間距離相等妓湘,與cross start查蓉、cross end兩端對齊
    //space-around:  flex-item之間距離相等,flex-item與cross start榜贴、cross end之間的距離等于flex-item之間的距離
    //space-evenly:  flex-item之間距離相等豌研,flex-item與cross start、cross end之間的距離是flex-item之間的距離的一半
}

示例如下:


四唬党、flex-item中的屬性

flex-item共用6個(gè)設(shè)置屬性鹃共,如下所示:
(1)order:定義項(xiàng)目的排列順序。數(shù)值越小驶拱,排列越靠前霜浴,默認(rèn)為0 。
(2)align-self:覆蓋flex:-container設(shè)置的align-items蓝纲。
(3)flex-grow:決定了flex-item放大比例阴孟,默認(rèn)為0,即如果存在剩余空間税迷,也不放大永丝。
(4)flex-shrink決定了flex-item縮小比例,默認(rèn)為1箭养,即如果空間不足类溢,該項(xiàng)目將縮小。
(5)flex-basis屬性定義了在分配多余空間之前露懒,flex-item占據(jù)的主軸空間(main size)。瀏覽器根據(jù)這個(gè)屬性砂心,計(jì)算主軸是否有多余空間懈词。它的默認(rèn)值為auto,即flex-item的本來大小辩诞。
(6)flex是flex-grow || flex-shrink || flex-basis的簡寫坎弯,flex屬性可以指定1個(gè),2個(gè)译暂,3個(gè)值抠忘。

1、order:定義項(xiàng)目的排列順序

(1)可以設(shè)置任意整數(shù)(正整數(shù)外永、負(fù)整數(shù)崎脉、0),值越小越排在前面
(2)默認(rèn)值是0
示例如下:

2伯顶、align-self:覆蓋flex-container設(shè)置的align-items囚灼。

align-self屬性允許單個(gè)項(xiàng)目有與其他項(xiàng)目不一樣的對齊方式骆膝,可覆蓋align-items屬性。默認(rèn)值為auto灶体,表示繼承父元素的align-items屬性阅签,如果沒有父元素,則等同于stretch蝎抽。
示例:


3政钟、flex-grow:可以設(shè)置任意非負(fù)數(shù)字(正小數(shù)、正整數(shù)樟结、0)养交,默認(rèn)值是0

(1)當(dāng)flex-container在main axis有剩余size時(shí)才會(huì)生效
(2) 如果所有flex-item的flex-grow總和sum超過1,每個(gè)flex-item擴(kuò)展的size為:flex-container的剩余size * flex-grow/sum
(3)如果所有flex-item的flex-grow總和sum不超過1狭吼,每個(gè)flex-item擴(kuò)展的size為:flex-container的剩余size * flex-grow
(4)flex-item擴(kuò)展后的所有size不能超過max-width

示例:

20.png

4层坠、flex-shrink可:以設(shè)置任意非負(fù)數(shù)字(正小數(shù)、正整數(shù)刁笙、0)破花,默認(rèn)值是1

(1)當(dāng)flex-item 在main axis上超過flex-container的size時(shí)才會(huì)生效
(2)如果所有flex-item的flex-shrink總和sum超過1,每個(gè)flex-item收縮的size為:flex-item超出flex-container的size * (收縮比例 / 所有flex-item收縮比例之和)
(3)如果所有flex-item的flex-shrink總和sum不超過1疲吸,每個(gè)flex-item收縮的size為:每個(gè)flex-item收縮的size為:flex-item超出flex-container的size * 所有flex-item收縮比例之和 * (收縮比例/所有flex-item收縮比例之和)
i. 收縮比例=flex-shrink * flex-item的base-size
ii. base-size就是flex-item放入flex-container之前的size
iii. flex items收縮后的所有size不能小于min-width

示例:

5座每、flex-basis:用來設(shè)置flex-item在main axis方向上的size,

(1)設(shè)置為auto為默認(rèn)值摘悴,即為原來的大小峭梳、
(2)設(shè)置具體的寬度數(shù)值(100px),即可改變flex-item的size
決定flex-item最終size的因素蹂喻,從優(yōu)先級高到底
i.max-width/max-height/min-width/min-height
ii.flex-basis
iii.width/height
iiii.內(nèi)容本身的size

6葱椭、flex:是flex-grow || flex-shrink || flex-basis的簡寫,flex屬性可以指定1個(gè)口四,2個(gè)孵运,3個(gè)值

(1)單值語法:值必須為以下其中之一:
一個(gè)無單位數(shù)(<number>):它會(huì)被當(dāng)做flex-grow的值
一個(gè)有效的寬度(width)值:它會(huì)被當(dāng)做flex-basis的值
關(guān)鍵字none,auto活initial
(2)雙值語法:第一個(gè)值必須為一個(gè)無單位數(shù)蔓彩,并且會(huì)被當(dāng)做flex-grow的值
第二個(gè)值必須為以下之一:
一個(gè)無單位數(shù):它會(huì)被當(dāng)做flex-shrink的值
一個(gè)有效的寬度值:它會(huì)被當(dāng)做flex-basis的值
(3)三值語法:
第一個(gè)值必須為無單位數(shù)治笨,并且會(huì)被當(dāng)做flex-grow的值
第二個(gè)值必須為無單位數(shù),并且會(huì)被當(dāng)做flex-shrink的值
第二個(gè)值必須為一個(gè)有效的寬度值數(shù)赤嚼,并且會(huì)被當(dāng)做flex-basis的值

該屬性有兩個(gè)快捷值:auto (1 1 auto) 和 none (0 0 auto)旷赖。
建議優(yōu)先使用這個(gè)屬性,而不是單獨(dú)寫三個(gè)分離的屬性更卒,因?yàn)闉g覽器會(huì)推算相關(guān)值

常用的示例:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末等孵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蹂空,更是在濱河造成了極大的恐慌流济,老刑警劉巖锐锣,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绳瘟,居然都是意外死亡雕憔,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進(jìn)店門糖声,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斤彼,“玉大人,你說我怎么就攤上這事蘸泻×鹞” “怎么了?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵悦施,是天一觀的道長并扇。 經(jīng)常有香客問我,道長抡诞,這世上最難降的妖魔是什么穷蛹? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮昼汗,結(jié)果婚禮上肴熏,老公的妹妹穿的比我還像新娘。我一直安慰自己顷窒,他們只是感情好蛙吏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鞋吉,像睡著了一般鸦做。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谓着,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天馁龟,我揣著相機(jī)與錄音,去河邊找鬼漆魔。 笑死,一個(gè)胖子當(dāng)著我的面吹牛却音,可吹牛的內(nèi)容都是我干的改抡。 我是一名探鬼主播,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼系瓢,長吁一口氣:“原來是場噩夢啊……” “哼阿纤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夷陋,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤欠拾,失蹤者是張志新(化名)和其女友劉穎胰锌,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體藐窄,經(jīng)...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡资昧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了荆忍。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片格带。...
    茶點(diǎn)故事閱讀 39,731評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刹枉,靈堂內(nèi)的尸體忽然破棺而出叽唱,到底是詐尸還是另有隱情,我是刑警寧澤微宝,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布棺亭,位于F島的核電站,受9級特大地震影響蟋软,放射性物質(zhì)發(fā)生泄漏镶摘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一钟鸵、第九天 我趴在偏房一處隱蔽的房頂上張望钉稍。 院中可真熱鬧,春花似錦棺耍、人聲如沸贡未。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俊卤。三九已至,卻和暖如春害幅,著一層夾襖步出監(jiān)牢的瞬間消恍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工以现, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狠怨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓邑遏,卻偏偏與公主長得像佣赖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子记盒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評論 2 354