flex

布局的傳統(tǒng)解決方案轮纫,基于盒狀模型周蹭,依賴 display屬性 + position屬性 + float屬性愿险。
以下簡單的布局是難以或不可能用這樣的工具( floatspositioning)方便且靈活的實現(xiàn)的:

  • 在父內(nèi)容里面垂直居中一個塊內(nèi)容瘟滨。
  • 使容器的所有子項占用等量的可用寬度/高度遇西,而不管有多少寬度/高度可用。
  • 使多列布局中的所有列采用相同的高度次慢,即使它們包含的內(nèi)容量不同旁涤。

Flex布局將成為未來布局的首選方案。本文介紹Flex布局的語法迫像。

Flex布局是什么

Flex是Flexible Box的縮寫劈愚,意為”彈性布局”,用來為盒狀模型提供最大的靈活性闻妓【穑可以簡便、完整由缆、響應式地實現(xiàn)各種頁面布局注祖。
任何一個容器都可以指定為Flex布局。

div{
  display: flex;
}

行內(nèi)元素也可以使用Flex布局均唉。

span {
  display: inline-flex;
}

注意是晨,設為Flex布局以后,子元素的float舔箭、clear和vertical-align屬性將失效罩缴。

一個簡單的例子

例子 我們將使用該例子創(chuàng)建一個非常的標準三列布局。

首先,我們需要選擇將哪些元素將設置為柔性的盒子箫章。我們需要給這些 flexible 元素的父元素 display 設置一個特定值烙荷。

本例中,我們想要設置 <article> 元素檬寂,因此我們給 <section>(變成了 flex 容器)設置 display

section {
  display: flex;
}

我們的多列布局具有大小相等的列奢讨,并且列的高度都是一樣。 這是因為這樣的 flex 項(flex容器的子項)的默認值是可以解決這些的常見問題的焰薄。

Flex容器&Flex項

設置了 display: flex 的父元素(在本例中是 <section>)被稱之為 flex 容器(flex container)拿诸。 在 flex 容器中所有子元素稱之為 flex 項flex item)(本例中是 <article> 元素。

flex容器&flex項

容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)塞茅。主軸的開始位置(與邊框的交叉點)叫做main start亩码,結(jié)束位置叫做main end;交叉軸的開始位置叫做cross start野瘦,結(jié)束位置叫做cross end描沟。
項目默認沿主軸排列。
單個項目占據(jù)的主軸空間叫做main size鞭光,占據(jù)的交叉軸空間叫做cross size吏廉。

容器的屬性

可以為容器設置以下六個屬性值:
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content

1 flex-direction 決定主軸的方向(即項目的排列方向)

.box {
  flex-direction: row(默認值) | row-reverse | column | column-reverse;
}
1column-reverse 2column 3row 4row-reverse
  • row(默認值):主軸為水平方向,起點在左端惰许。
  • row-reverse:主軸為水平方向席覆,起點在右端。
  • column:主軸為垂直方向汹买,起點在上沿佩伤。
  • column-reverse:主軸為垂直方向,起點在下沿晦毙。

2 flex-wrap 決定項的換行規(guī)則

默認情況下生巡,項目都排在一條線(又稱”軸線”)上。flex-wrap屬性定義见妒,如果一條軸線排不下孤荣,如何換行。

.box{
  flex-wrap: nowrap(默認) | wrap | wrap-reverse;
}
  • nowrap(默認):不換行须揣。
  • wrap:換行盐股,第一行在上方。
  • wrap-reverse:換行返敬,第一行在下方遂庄。

3 flex-flow

是flex-direction屬性和flex-wrap屬性的簡寫形式寥院,所以默認值為row nowrap劲赠。

.box {
  flex-flow: <flex-direction> || <flex-wrap>;
}

4 justify-content 控制 flex 項在主軸上的對齊方式

.box {
  justify-content: flex-start(默認值) | flex-end | center | space-between | space-around;
}
  • flex-start(默認值):左對齊
  • flex-end:右對齊
  • center: 居中
  • space-between:兩端對齊,項目之間的間隔都相等。
  • space-around:每個項目兩側(cè)的間隔相等凛澎。所以霹肝,項目之間的間隔比項目與邊框的間隔大一倍。

5 align-items 控制 flex 項在交叉軸上的對齊方式

.box {
  align-items: flex-start | flex-end | center | baseline | stretch(默認值);
}

具體的對齊方式與交叉軸的方向有關塑煎,下面假設交叉軸從上到下沫换。

  • flex-start:交叉軸的起點對齊。
  • flex-end:交叉軸的終點對齊最铁。
  • center:交叉軸的中點對齊讯赏。
  • stretch(默認值):如果項未設置高度或設為auto,將占滿整個容器的高度冷尉。
  • baseline: 項目的第一行文字的基線對齊漱挎。

6 align-content 定義了多根軸線的對齊方式

如果項目只有一根軸線,該屬性不起作用雀哨。

.box {
  align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • flex-start:與交叉軸的起點對齊磕谅。
  • flex-end:與交叉軸的終點對齊。
  • center:與交叉軸的中點對齊雾棺。
  • space-between:與交叉軸兩端對齊膊夹,軸線之間的間隔平均分布。
  • space-around:每根軸線兩側(cè)的間隔都相等捌浩。所以放刨,軸線之間的間隔比軸線與邊框的間隔大一倍。
  • stretch(默認值):軸線占滿整個交叉軸尸饺。

項的屬性

以下6個屬性設置在項上宏榕。
order
flex-grow
flex-shrink
flex-basis
flex
align-self

1 order屬性:定義項的排列順序

數(shù)值越小,排列越靠前侵佃,默認為0麻昼。

.item {
  order: <integer>;
}

2 flex-grow :定義彈性盒子項(flex item)的拉伸因子

默認為0,即如果存在剩余空間馋辈,也不放大抚芦。

.item {
  flex-grow: <number>; /* default 0 */
}

3 flex-shrink :定義彈性盒子項的收縮規(guī)則

flex 元素僅在默認寬度之和大于容器的時候才會發(fā)生收縮,其收縮的大小是依據(jù) flex-shrink 的值迈螟。默認為1叉抡,即如果空間不足,該項目將縮小答毫。負值對該屬性無效褥民。

.item {
  flex-shrink: <number>; /* default 1 */
}

4 flex-basis 指定了 flex項在主軸方向上的初始大小

如果不使用 box-sizing 來改變盒模型的話,那么這個屬性就決定了 flex 元素的內(nèi)容盒(content-box)的寬或者高(取決于主軸的方向)的尺寸大小洗搂。
默認值為auto消返,即項目的本來大小载弄。也可以設為跟width或height屬性一樣的值(比如350px),則項目將占據(jù)固定空間撵颊。

.item {
  flex-basis: <length> | auto; /* default auto */
}

5 flex屬性

是flex-grow, flex-shrink 和 flex-basis的簡寫宇攻,默認值為0 1 auto。后兩個屬性可選倡勇。

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

6 align-self屬性:允許單個項目有與其他項目不一樣的對齊方式

可覆蓋align-items屬性逞刷。默認值為auto,表示繼承父元素的align-items屬性妻熊,如果沒有父元素夸浅,則等同于stretch。

.item {
  align-self: auto(默認值) | flex-start | flex-end | center | baseline | stretch;
}

除了auto扔役,其他屬性值都與align-items屬性完全一致题篷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厅目,隨后出現(xiàn)的幾起案子番枚,更是在濱河造成了極大的恐慌,老刑警劉巖损敷,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件葫笼,死亡現(xiàn)場離奇詭異,居然都是意外死亡拗馒,警方通過查閱死者的電腦和手機路星,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诱桂,“玉大人洋丐,你說我怎么就攤上這事』拥龋” “怎么了友绝?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肝劲。 經(jīng)常有香客問我迁客,道長,這世上最難降的妖魔是什么辞槐? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任掷漱,我火速辦了婚禮,結(jié)果婚禮上榄檬,老公的妹妹穿的比我還像新娘卜范。我一直安慰自己,他們只是感情好鹿榜,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布海雪。 她就那樣靜靜地躺著锦爵,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喳魏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天怀薛,我揣著相機與錄音刺彩,去河邊找鬼。 笑死枝恋,一個胖子當著我的面吹牛创倔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播焚碌,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼畦攘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了十电?” 一聲冷哼從身側(cè)響起知押,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鹃骂,沒想到半個月后台盯,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡畏线,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年静盅,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寝殴。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡蒿叠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚣常,到底是詐尸還是另有隱情市咽,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布抵蚊,位于F島的核電站魂务,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏泌射。R本人自食惡果不足惜粘姜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望熔酷。 院中可真熱鬧孤紧,春花似錦、人聲如沸拒秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至押蚤,卻和暖如春蔑歌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揽碘。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工次屠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人雳刺。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓劫灶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親掖桦。 傳聞我的和親對象是個殘疾皇子本昏,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

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

  • 傳統(tǒng)的網(wǎng)頁布局基于盒裝模型,使用display枪汪,position涌穆,float屬性來達成各種布局。對于一些特殊的布局...
    exialym閱讀 2,626評論 0 11
  • 作者: 阮一峰日期: 2015年7月10日原文鏈接:http://www.ruanyifeng.com/blog/...
    Mike_Gu閱讀 971評論 0 6
  • 請解釋一下CSS3的FLEXBOX(彈性盒布局模型)以及適用場景雀久? 大家好蒲犬,我是IT修真院鄭州分院第七期的學員馮亞...
    f056917閱讀 517評論 0 1
  • 網(wǎng)頁布局(layout)是CSS的一個重點應用。 一岸啡、Flex布局是什么原叮? Flex是Flexible Box的縮...
    抱著熊喵啃什么閱讀 632評論 0 4
  • 轉(zhuǎn)自--阮一峰, 此人寫的很詳細, 收藏了一下, 非常感謝 網(wǎng)頁布局(layout)是CSS的一個重點應用。 布局...
    春雨霏霏_____閱讀 658評論 0 0