Flex布局

一知押、Flex布局與傳統(tǒng)布局

傳統(tǒng)布局依賴于盒模型朗徊,利用display爷恳、position温亲、float屬性來(lái)布局栈虚,但是其對(duì)于某些特殊布局魂务,如垂直居中粘姜,就很不方便。這種情況下利用Flex布局就很方便豺裆。
注:設(shè)置了 Flex 布局以后臭猜,其子元素的float蔑歌、clear和vertical-align屬性將失效丐膝。

二、Flex布局的基本概念

軸.png

1煞烫、Flex布局

即“彈性布局”滞详,是用來(lái)為盒模型提供最大的靈活性料饥。

2岸啡、flex容器

指設(shè)置flex布局的元素:

.box{
    display:flex;
}

Webkit 內(nèi)核的瀏覽器巡蘸,必須加上-webkit前綴:

.box{
    display: -webkit-flex;
    display:flex;
}

3悦荒、flex項(xiàng)目

指flex容器的所有子元素搬味。

4碰纬、主軸與交叉軸

  • 主軸(main axis):flex容器的水平軸嘀趟;
  • 交叉軸(cross axis):flex容器的垂直軸她按;
  • main start酌泰、main end:主軸的開(kāi)始與結(jié)束位置陵刹,主軸與邊框的交叉點(diǎn)衰琐;
  • cross start羡宙、cross end:交叉軸的開(kāi)始與結(jié)束位置狗热,交叉軸與邊框的交叉點(diǎn)匿刮;
  • main size:?jiǎn)蝹€(gè)項(xiàng)目占據(jù)的主軸空間熟丸;
  • cross size:?jiǎn)蝹€(gè)項(xiàng)目占據(jù)的交叉軸空間。

三架馋、Flex布局的屬性

Flex布局的屬性有兩種:設(shè)置在容器上的屬性和設(shè)置在項(xiàng)目上的屬性叉寂。

容器的屬性

容器的屬性有6種:flex-direction屏鳍、flex-wrap钓瞭、flex-flow山涡、justify-content鸭丛、align-items鳞溉、align-content鼠哥。這些屬性均設(shè)置在容器上朴恳。
注:各屬性解析均建立在以下代碼基礎(chǔ)上:

<style>
        #flex{
            display: flex;
        }
        #flex1{
            background-color: aquamarine;
            width: 100px;
            height: 100px;
        }
        
        #flex2{
            background-color: rgb(127, 136, 255);
            width: 100px;
            height: 100px;
        }
        #flex3{
            background-color: rgb(255, 127, 180);
            width: 100px;
            height: 100px;
        }
</style>
    
<div id="flex">
    <div id="flex1">flex1</div>
    <div id="flex2">flex2</div>
    <div id="flex3">flex3</div>
</div>

flex-direction屬性:

flex-direction有4個(gè)屬性值:row(默認(rèn)) 于颖、row-reverse恍飘、column章母、column-reverse乳怎;用于決定主軸的方向(即項(xiàng)目的排列方向)蚪缀。

flex-direction: row ;

row.png

flex-direction: row-reverse ;

row-reverse.png

flex-direction: column ;

colum.png

flex-direction: column-reverse ;

column-reverse.png

flex-wrap屬性:

flex-wrap有三個(gè)屬性值: nowrap(默認(rèn))、wrap刷后、wrap-reverse尝胆;用于規(guī)定一條軸線排不下時(shí),如何換行贪染。

flex-wrap:nowrap抑进;不換行

nowrap.png

flex-wrap:wrap寺渗;換行信殊,第一行在上方涡拘。

wrap.jpg

flex-wrap:wrap-reverse;換行橱野,第一行在下方水援。

wrap-reverse.jpg

flex-flow屬性

flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡(jiǎn)寫形式或渤,默認(rèn)值為row nowrap薪鹦。

justify-content屬性

justify-content屬性有5個(gè)屬性值:flex-start (默認(rèn))距芬、flex-end 框仔、center 离斩、space-between 跛梗、space-around核偿;用于定義項(xiàng)目在主軸上的對(duì)齊方式漾岳。

justify-content:flex-start 尼荆;左對(duì)齊

flex-start.png

justify-content:flex-end ;右對(duì)齊

flex-end.png

justify-content:center 巧还;居中

center.png

justify-content:space-between ;兩端對(duì)齊坊秸,項(xiàng)目之間的間隔都相等

space-between.png

justify-content:space-around狞悲;每個(gè)項(xiàng)目?jī)蓚?cè)的間隔相等。所以妇斤,項(xiàng)目之間的間隔比項(xiàng)目與邊框的間隔大一倍

space-around.png

align-items屬性

align-items屬性有5個(gè)屬性值:flex-start 、flex-end 、center 站超、baseline 、stretch死相;用于定義項(xiàng)目在交叉軸上如何對(duì)齊融求。
注:設(shè)置align-items屬性時(shí),要求容器有高度算撮。

<style>
        *{
            <!--將h1的外邊距取消生宛,否則會(huì)影響 flex-start 與 flex-end的效果-->
            margin:0;
        }
        #flex{
            height: 500px肮柜;<!--為容器設(shè)置高度-->
            display: flex;
        }
        #flex1{
            background-color: aquamarine;
            width: 100px;
            height: 100px;
        }
        
        #flex2{
            background-color: rgb(127, 136, 255);
            width: 100px;
            height: 100px;
        }
        #flex3{
            background-color: rgb(255, 127, 180);
            width: 100px;
            height: 100px;
        }
</style>
    
<div id="flex">
    <div id="flex1">flex1</div>
    <h1 id="flex2">flex2</h1>
    <div id="flex3">flex3</div>
</div>

align-items:flex-start汰扭;各項(xiàng)目于交叉軸的起點(diǎn)對(duì)齊

flex-start.png

align-items:flex-end彼绷;各項(xiàng)目于交叉軸的終點(diǎn)對(duì)齊

flex-end.png

align-items:center;各項(xiàng)目于交叉軸的中點(diǎn)對(duì)齊

center.png

align-items:baseline;各項(xiàng)目的第一行文字的基線對(duì)齊

baseline.png

align-items:stretch歉胶;如果項(xiàng)目未設(shè)置高度或設(shè)為auto,將占滿整個(gè)容器的高度

  • 為項(xiàng)目設(shè)置高度的情況下:


    stretch-有高度.png
  • 項(xiàng)目沒(méi)有高度:
<style>
    *{
        margin: 0;
    }
        #flex{
            height:300px ;
            display: flex;
            align-items: stretch;
        }
        #flex1{
            background-color: aquamarine;
        }
        
        #flex2{
            background-color: rgb(127, 136, 255);
        }
        #flex3{
            background-color: rgb(255, 127, 180);
        }
</style>
    
<div id="flex">
    <div id="flex1">flex1</div>
    <h1 id="flex2">flex2</h1>
    <div id="flex3">flex3</div>
</div>
stretch-無(wú)高度.png

align-content屬性

align-content屬性有6個(gè)屬性值:flex-start 埋合、flex-end 卧须、center、space-between 痴晦、space-around 南吮、stretch(默認(rèn));用于定義多根軸線的對(duì)齊方式誊酌。如果項(xiàng)目只有一根軸線部凑,該屬性不起作用。

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .flex{
            width: 240px;
            height: 200px;
            display: flex;
            flex-wrap: wrap;
            background-color: #8c8c8c;
        }
    .flex div{
            border: 2px solid #8c8c8c;
            width: 50px;
            height: 50px;
            background-color: #a0c8ff;
        }
</style>
    
<div class="flex">
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
    <div></div>
</div>

align-content:flex-start术辐;與交叉軸的起點(diǎn)對(duì)齊

flex-start.png

align-content:flex-end砚尽;與交叉軸的終點(diǎn)對(duì)齊

flex-end.png

align-content:center;與交叉軸的中點(diǎn)對(duì)齊

center.png

align-content:space-between辉词;與交叉軸兩端對(duì)齊必孤,軸線之間的間隔平均分布

space-between.png

align-content:space-around ;每根軸線兩側(cè)的間隔都相等瑞躺。所以敷搪,軸線之間的間隔比軸線與邊框的間隔大一倍

space-around.png

align-content:stretch;軸線占滿整個(gè)交叉軸

stretch.png

項(xiàng)目的屬性

項(xiàng)目的屬性有6種:order幢哨、flex-grow赡勘、flex-shrink、flex-basis捞镰、flex闸与、align-self毙替。

order屬性

用于定義項(xiàng)目的排列順序。數(shù)值越小践樱,排列越靠前厂画,默認(rèn)為0。

下例中拷邢,原本位于第一二三位的方塊袱院,在更改了其order數(shù)值后,現(xiàn)位于最后三位瞭稼。

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .flex{
            width: 240px;
            height: 300px;
            display: flex;
            flex-wrap: wrap;
            background-color: #8c8c8c;
        }
    .flex div{
            border: 2px solid #8c8c8c;
            width: 50px;
            height: 50px;
            background-color: #a0c8ff;
        }
    #f3,#f2{
            order: 1;
        }
    #f1{
            order: 5;
        }
</style>
    
<div class="flex">
    <div id="f1">1</div>
    <div id="f2">2</div>
    <div id="f3">3</div>
    <div id="f4">4</div>
    <div id="f5">5</div>
    <div id="f6">6</div>
</div>
order.png

flex-grow屬性

用于定義項(xiàng)目的放大比例忽洛,默認(rèn)為0,即如果存在剩余空間环肘,也不放大欲虚。

下例中,為f1和f5設(shè)置同樣的數(shù)值廷臼,由于其各自所在的主軸剩余的空間不等苍在,因此最終的放大效果不等。所以flex-grow屬性是一種瓜分項(xiàng)目所在主軸(即使剩余空間不足以支撐項(xiàng)目擴(kuò)張相應(yīng)倍數(shù)荠商,也不會(huì)擴(kuò)張到另外的主軸上)的剩余空間的屬性寂恬。

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .flex{
            width: 240px;
            height: 300px;
            display: flex;
            flex-wrap: wrap;
            background-color: #8c8c8c;
        }
    .flex div{
            border: 2px solid #8c8c8c;
            width: 50px;
            height: 50px;
            background-color: #a0c8ff;
        }
    #f1,#f5{
            flex-grow: 5;
        }
    #f3{
            flex-grow: 2;
        }
</style>
    
<div class="flex">
    <div id="f1">1</div>
    <div id="f2">2</div>
    <div id="f3">3</div>
    <div id="f4">4</div>
    <div id="f5">5</div>
    <div id="f6">6</div>
</div>
flex-grow.png

flex-shrink屬性

用于定義項(xiàng)目的縮小比例,默認(rèn)為1莱没。

  • 如果所有項(xiàng)目的flex-shrink屬性都為1初肉,當(dāng)空間不足時(shí),都將等比例縮惺味恪牙咏;
  • 如果一個(gè)項(xiàng)目的flex-shrink屬性為0,其他項(xiàng)目都為1嘹裂,則空間不足時(shí)妄壶,前者不縮小。

flex-basis屬性

用于定義在分配多余空間之前寄狼,項(xiàng)目占據(jù)的主軸空間丁寄。瀏覽器根據(jù)這個(gè)屬性,計(jì)算主軸是否有多余空間泊愧。它的默認(rèn)值為auto伊磺,即項(xiàng)目的本來(lái)大小。
它可以設(shè)為跟width或height屬性一樣的值(比如350px)删咱,則項(xiàng)目將占據(jù)固定空間屑埋。

flex屬性

flex-grow, flex-shrink 和 flex-basis的簡(jiǎn)寫,默認(rèn)值為0 1 auto痰滋。后兩個(gè)屬性可選摘能。

align-self屬性

1续崖、允許單個(gè)項(xiàng)目有與其他項(xiàng)目不一樣的對(duì)齊方式,可覆蓋align-items屬性团搞。默認(rèn)值為auto袜刷,表示繼承父元素的align-items屬性,如果沒(méi)有父元素莺丑,則等同于stretch。
2墩蔓、align-self屬性有6個(gè)屬性值:auto(默認(rèn))梢莽、flex-start 、flex-end 奸披、center 昏名、baseline 、stretch阵面。


參考:Flex 布局教程:語(yǔ)法篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轻局,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子样刷,更是在濱河造成了極大的恐慌仑扑,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件置鼻,死亡現(xiàn)場(chǎng)離奇詭異镇饮,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)箕母,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門储藐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嘶是,你說(shuō)我怎么就攤上這事钙勃。” “怎么了聂喇?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵辖源,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我授帕,道長(zhǎng)同木,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任跛十,我火速辦了婚禮彤路,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘芥映。我一直安慰自己洲尊,他們只是感情好远豺,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著坞嘀,像睡著了一般躯护。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丽涩,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天棺滞,我揣著相機(jī)與錄音,去河邊找鬼矢渊。 笑死继准,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矮男。 我是一名探鬼主播移必,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼毡鉴!你這毒婦竟也來(lái)了崔泵?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤猪瞬,失蹤者是張志新(化名)和其女友劉穎憎瘸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體撑螺,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡含思,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了甘晤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片含潘。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖线婚,靈堂內(nèi)的尸體忽然破棺而出遏弱,到底是詐尸還是另有隱情,我是刑警寧澤塞弊,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布漱逸,位于F島的核電站,受9級(jí)特大地震影響游沿,放射性物質(zhì)發(fā)生泄漏饰抒。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一诀黍、第九天 我趴在偏房一處隱蔽的房頂上張望袋坑。 院中可真熱鬧,春花似錦眯勾、人聲如沸枣宫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)也颤。三九已至洋幻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間翅娶,已是汗流浹背文留。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竭沫,地道東北人厂庇。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像输吏,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子替蛉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355