CSS布局--Flex布局(彈性布局)

布局的傳統(tǒng)解決方案:是基于盒模型,這種布局依賴display屬性 + position屬性 + float屬性勇皇,但是對于一些特殊的布局是不方便的,比如說:對于垂直布局就不容易實現(xiàn)。

Flex布局是什么无蜂?

Flex布局又被稱為彈性布局紊服,用來為盒模型提供最大的靈活性檀轨,任意的容器、行內(nèi)元素都可以使用Flex布局欺嗤。
ps:設(shè)定為Flex布局之后参萄,子元素的float、clear和vertical-align屬性將會失效煎饼。

基本概念

采用Flex布局的元素讹挎。被稱為Flex容器,簡稱為‘容器’。他的所有的子元素自動成為容器的成員筒溃,成為Flex的項目马篮。

Flex基本概念

容器默認(rèn)存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start怜奖,結(jié)束位置叫做main end浑测;交叉軸的開始位置叫做cross start,結(jié)束位置叫做cross end歪玲。

項目默認(rèn)沿主軸排列迁央。單個項目占據(jù)的主軸空間叫做main size,占據(jù)的交叉軸空間叫做cross size滥崩。

Flex的屬性設(shè)置

flex-direction岖圈、flex-wrapflex-flow钙皮、justify-content幅狮、align-itemsalign-content

flex-direction

.project{
    height: 100%;
    width: 100%;
    display: flex;
    flex-direction:column;    /* row | row-reverse | column | column-reverse;*/
}
.item{
    height: 100px;
    width: 100px;
    border: 1px red solid;
}
<div class='project'>
    <div class ='item'></div>
    <div class ='item'></div>
    <div class ='item'></div>
</div>

column-reverse:主軸為垂直方向株灸,起點在下沿崇摄。
column:主軸為垂直方向,起點在上沿慌烧。
row(默認(rèn)值):主軸為水平方向逐抑,起點在左端。
row-reverse:主軸為水平方向屹蚊,起點在右端厕氨。

flex-direction的屬性

flex-wrap
在該布局下,所有的項目都排在一條線上汹粤,但是當(dāng)一跳軸線排不下的時候命斧,就要換行,這個屬性解決的就是如何換行的問題嘱兼。

.project{
    height: 100%;
    width: 100%;
    display: flex;
    flex-wrap:nowrap;   /* nowrap | wrap | wrap-reverse;*/
}
.item{
    height: 400px;
    width: 400px;
    border: 1px red solid;
}
<div class='project'>
    <div class ='item'>1</div>
    <div class ='item'>2</div>
    <div class ='item'>3</div>
    <div class ='item'>4</div>
    <div class ='item'>5</div>
    <div class ='item'>6</div>
</div>

nowrap(默認(rèn)值):不換行国葬。
wrap:換行,第一行在上方芹壕。汇四。
wrap-reverse:換行,第一行在下方踢涌。

nowrap不換行
wrap 換行通孽,第一行在上面
wrap-reverse 換行,第一行在下

flex-flow
flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式睁壁,默認(rèn)值為row nowrap

.project{
        height: 100%;
        width: 100%;
        display: flex;
        flex-flow: column wrap;
    }
.item{
        height: 400px;
        width: 400px;
        border: 1px red solid;
    }

justify-content
justify-content屬性定義了項目在主軸上的對齊方式背苦。

.project{
        border:solid 1px black;
        height: 50px;
        width: 100%;
        display: flex;
        justify-content:space-between;/* flex-start | flex-end | center | space-between | space-around;*/
}
.item{
    height: 50px;
    width: 100px;
    border: 1px red solid;
}
justify-content屬性

flex-start(默認(rèn)值):左對齊
flex-end:右對齊
center: 居中
space-between:兩端對齊互捌,項目之間的間隔都相等。
space-around:每個項目兩側(cè)的間隔相等行剂。所以疫剃,項目之間的間隔比項目與邊框的間隔大一倍。

align-items屬性

align-items屬性定義項目在交叉軸上如何對齊硼讽。

.project{
        border:solid 1px black;
        width: 100%;
        height: 100%;
        display: flex;
        align-items: baseline;
    }
.item{
        margin-top: 100px;
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }
.item2{
        height: 100px;
        width: 100px;
        border: 1px red solid;
    }
.item3{
        height: 150px;
        width: 100px;
        border: 1px red solid;
    }

align-items的屬性

都很好理解巢价,就是baseline存在一定的歧義。我們通過一個小栗子來進行了解固阁。

flex-start:交叉軸的起點對齊壤躲。
flex-end:交叉軸的終點對齊。
center:交叉軸的中點對齊备燃。
baseline: 項目的第一行文字的基線對齊碉克。
stretch(默認(rèn)值):如果項目未設(shè)置高度或設(shè)為auto,將占滿整個容器的高度并齐。

align-content

align-content屬性定義了多根軸線的對齊方式漏麦。如果項目只有一根軸線,該屬性不起作用况褪。也就是說item存在換行的情況存在

.project{
        border:solid 1px black;
        width: 100%;
        height: 100%;
        display: flex;
        flex-wrap: wrap;
        align-content: space-between;
    }
.item{
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }
align-content

flex-start:與交叉軸的起點對齊撕贞。
flex-end:與交叉軸的終點對齊。
center:與交叉軸的中點對齊测垛。
space-between:與交叉軸兩端對齊捏膨,軸線之間的間隔平均分布。
space-around:每根軸線兩側(cè)的間隔都相等食侮。所以号涯,軸線之間的間隔比軸線與邊框的間隔大一倍。
stretch(默認(rèn)值):軸線占滿整個交叉軸锯七。

項目屬性

order链快、flex-growflex-shrink眉尸、flex-basis域蜗、flexalign-self

order
order屬性定義項目的排列順序效五。數(shù)值越小地消,排列越靠前,默認(rèn)為0畏妖。

.project{
        width: 100%;
        height: 100%;
        display: flex;
        flex-wrap: wrap;
        align-content: space-between;
        }
.item{
        order: 1;
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }
.item2{
        order: 3;
        height: 50px;
        width: 100px;
        border: 1px red solid;
        }
.item3{
        order: 2;
        height: 50px;
        width: 100px;
        border: 1px red solid;
        }
<div class='project'>
    <div class ='item'>item1</div>
    <div class ='item2'>item2</div>
    <div class ='item3'>item3</div> 
</div>
order屬性的使用

flex-grow
flex-grow屬性定義項目的放大比例,默認(rèn)為0疼阔,即如果存在剩余空間戒劫,也不放大半夷,屬性的值是數(shù)字。

.project{
        width: 100%;
        height: 100%;
        display: flex;
    }
.item{
        flex-grow: 1;
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }
.item2{
        flex-grow: 0;
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }
.item3{
        flex-grow: 1;
        height: 50px;
        width: 100px;
        border: 1px red solid;
    }

如果所有項目的flex-grow屬性都為1迅细,則它們將等分剩余空間(如果有的話)巫橄。如果一個項目的flex-grow屬性為2,其他項目都為1茵典,則前者占據(jù)的剩余空間將比其他項多一倍湘换。

flex-shrink
這個屬性定義了項目縮小的比例,這個值默認(rèn)是1统阿,即如果空間不足的時候彩倚,這個項目就會縮小,如果所有的flex-shrink屬性值都為1扶平,當(dāng)空間不足的時候帆离,都進行等比的縮小,但是如果有一個項目的flex-shrink為0结澄,其他項目的值為1的時候哥谷,空間不足的時候,值為0的項目不會縮小麻献。

flex-basis
flex-basis屬性定義了在分配多余空間之前们妥,項目占據(jù)的主軸空間(main size)。瀏覽器根據(jù)這個屬性勉吻,計算主軸是否有多余空間王悍。它的默認(rèn)值為auto,即項目的本來大小餐曼。它可以設(shè)為跟widthheight屬性一樣的值(比如350px)压储,則項目將占據(jù)固定空間。相當(dāng)于對項目設(shè)置了寬度源譬。

flex
flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫集惋,默認(rèn)值為0 1 auto。后兩個屬性可選踩娘。flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫刮刑,默認(rèn)值為0 1 auto。后兩個屬性可選养渴。

align-self
align-self屬性允許單個項目有與其他項目不一樣的對齊方式雷绢,可覆蓋align-items屬性。默認(rèn)值為auto理卑,表示繼承父元素的align-items屬性翘紊,如果沒有父元素,則等同于stretch藐唠。

參照:Flex 布局教程:語法篇

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末帆疟,一起剝皮案震驚了整個濱河市鹉究,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌踪宠,老刑警劉巖自赔,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異柳琢,居然都是意外死亡绍妨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門柬脸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來他去,“玉大人,你說我怎么就攤上這事肖粮」乱常” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵涩馆,是天一觀的道長行施。 經(jīng)常有香客問我,道長魂那,這世上最難降的妖魔是什么蛾号? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮涯雅,結(jié)果婚禮上鲜结,老公的妹妹穿的比我還像新娘。我一直安慰自己活逆,他們只是感情好精刷,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蔗候,像睡著了一般怒允。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锈遥,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天纫事,我揣著相機與錄音,去河邊找鬼所灸。 笑死丽惶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的爬立。 我是一名探鬼主播钾唬,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了知纷?” 一聲冷哼從身側(cè)響起壤圃,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤陵霉,失蹤者是張志新(化名)和其女友劉穎琅轧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踊挠,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡乍桂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了效床。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片睹酌。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖剩檀,靈堂內(nèi)的尸體忽然破棺而出憋沿,到底是詐尸還是另有隱情,我是刑警寧澤沪猴,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布辐啄,位于F島的核電站,受9級特大地震影響运嗜,放射性物質(zhì)發(fā)生泄漏壶辜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一担租、第九天 我趴在偏房一處隱蔽的房頂上張望砸民。 院中可真熱鬧,春花似錦奋救、人聲如沸岭参。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽演侯。三九已至,卻和暖如春利耍,著一層夾襖步出監(jiān)牢的瞬間蚌本,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工隘梨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留程癌,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓轴猎,卻偏偏與公主長得像嵌莉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子捻脖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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