學習筆記:flex布局知識點及常用布局歸納整理

傳統(tǒng)布局方式基于盒狀模型(display + position + float ),能解決大部分布局問題,但對于一些特殊的復雜布局以及垂直居中布局,顯然 flex 布局(彈性布局)擁有更大的優(yōu)勢。熟悉掌握 flex 布局及擁有一套常用的布局總結题诵,能幫助我們高效的進行前端開發(fā)。

阮一峰 flex 布局博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

新舊 flex 布局兼容性寫法:https://www.w3cplus.com/css3/using-flexbox.html


一层皱、瀏覽器兼容性

來自阮一峰的網(wǎng)絡博客

flex 布局對于大部分瀏覽器兼容性較好仇轻,主要問題在于不支持10以下的 IE 瀏覽器版本,如果你的項目對于兼容性要求較高奶甘,需要兼容舊版瀏覽器,建議慎用 flex 布局祭椰。但它對移動端的兼容性較好臭家,本人也主要將其用在移動端的開發(fā)上。

二方淤、基本概念

(1)盒狀模型

如上圖所示钉赁,盒子模型由 margin、border携茂、padding你踩、content 四部分組成,再結合 display(block 塊狀元素、inline 內(nèi)聯(lián)元素带膜、inline-block 內(nèi)聯(lián)塊狀元素)吩谦,position (relative 相對定位、absolute 絕對定位膝藕、fixed 固定定位)式廷,float 浮動對頁面進行布局。

(2)flex 彈性布局

采用 flex 布局的容器稱為 flex 容器(flex container)芭挽,當一個元素采用 flex 布局后滑废,它的子元素將自動成為容器成員(flex item)。

如下圖所示袜爪,flex 容器默認存在2根軸線蠕趁,主軸(main axis,默認為橫軸)和交叉軸(cross axis辛馆,默認為縱軸)俺陋,flex 布局所有的屬性都圍繞這2條軸線上的元素如何布排進行設定。

來自阮一峰的網(wǎng)絡博客

總結:盒狀模型通過元素與自身怀各、元素與父元素倔韭、元素與屏幕的定位來實現(xiàn)頁面布局,而 flex 布局則打破了這種模式瓢对,它是對 flex 容器進行主軸寿酌、交叉軸的布局設定,使其內(nèi)部所有的元素都遵循這種設定進行布局硕蛹。無疑醇疼,采用 flex 布局方案能以更少的代碼量和效率實現(xiàn)更復雜的布局要求(不考慮舊版瀏覽器兼容情況下)。

三法焰、常用屬性

(1)容器(flex container)屬性:6個

1秧荆、flex-direction,決定主軸上元素的排布方向埃仪,有4種取值

row:默認值乙濒,主軸為水平方向且起點在左端

row-reverse:主軸為水平方向且起點在右端

column:主軸為垂直方向且起點在上方

column-reverse:主軸為垂直方向且起點在下方

2、flex-wrap卵蛉,定義換行方式颁股,當一條軸線放不下時如何換行,有3種取值

nowrap:默認值傻丝,不換行

wrap:換行

wrap-reverse:換行且第一行在下方

3甘有、flex-flow,是flex-direction屬性和flex-wrap屬性的簡寫形式葡缰,默認值為 row nowrap(主軸在橫軸亏掀,不換行)

4忱反、justify-content,定義了子元素在主軸上的對齊方式滤愕,有5種取值(排布與主軸方向有關温算,下面假設主軸為橫軸)

flex-start :默認值,左對齊该互,從左至右按順序排列

flex-end:右對齊米者,從右至左按順序排列

center:居中排列

space-between:兩端對齊,最左與最右的元素與容器邊界無間隔宇智,元素與元素間的距離相等

space-around:等距對齊蔓搞,元素兩側(cè)間隔相等,元素與元素之間的距離是最兩端元素與容器邊界距離的2倍随橘,

來自阮一峰的網(wǎng)絡博客

5喂分、align-items,定義在交叉軸上的項目如何對齊机蔗,有5種取值蒲祈。

flex-start:以交叉軸的起點對齊

flex-end:以交叉軸的終點對齊

center:以交叉軸的中點對齊

strench:如果項目未設置高度或設置為 auto,將占滿整個容器

baseline:以項目第一行文字的基線對齊

來自阮一峰的網(wǎng)絡博客

6萝嘁、align-content梆掸,定義了多根軸線的對齊方式,有6種取值牙言。(當軸線只有一條時酸钦,該屬性不起作用)

flex-start:與交叉軸的起點對齊

flex-end:與交叉軸的終點對齊

center:與交叉軸的中點對齊

space-between:與交叉軸兩端對齊,軸線之間的間隔相等

space-around:軸線之間的間隔相等咱枉,軸線間的距離是軸線與交叉軸起點卑硫、交叉軸終點距離的兩倍。

stretch:默認值蚕断,軸線占滿整個交叉軸

(2)項目(flex item)屬性:6個

1欢伏、order,定義項目的排列順序亿乳,數(shù)值越小硝拧,排列越靠前,默認都為0

2葛假、flex-grow障陶,定義項目的放大比例,默認都為0桐款,即使有剩余空間也不放大。如果都設為1夷恍,則所有項目將等分空間魔眨。如果有一個項目設為2而其它項目設為1媳维,則該項目占據(jù)的空間是其它項目的2倍。

3遏暴、flex-shrink侄刽,定義了項目的縮小比例,默認都為1朋凉, 既當空間不足時州丹,所有項目都將等比例縮小。如果設為0杂彭,則當空間不足時墓毒,該項目也不縮小。

4亲怠、flex-basis所计,定義項目占據(jù)的主軸空間,瀏覽器根據(jù)這個屬性計算是否有多余空間团秽。默認值為 auto主胧,即項目本來的大小,也可設置固定空間习勤。

5踪栋、flex,是 flex-grow图毕、flex-shrink 和 flex-basis 的簡寫夷都,默認為0 1 auto。該屬性有2個快捷值吴旋,auto(1 1 auto)和 none(0 0 auto)损肛,建議優(yōu)先使用這2個屬性,而不是單獨寫3個分離的屬性荣瑟,因為瀏覽器會推算相關值治拿。

6、align-self笆焰,允許單個項目能夠有和其它項目不一樣的對齊方式劫谅,可覆蓋 align-items 屬性。默認值為 auto嚷掠,表示繼承父元素的 align-items 屬性捏检。

四、常用布局總結

在開展一些前端項目時不皆,會發(fā)現(xiàn)很多頁面布局都是相似和重復的贯城,此時若把公共布局樣式都抽離出來,需要時再調(diào)用霹娄,對于減少代碼量能犯、提高效率和后續(xù)修改都是非常有利的鲫骗。以下為平時總結的一些通用布局代碼(父元素調(diào)用):

//上下左右居中

.box-center {

? display: flex;

? justify-content: center;

? align-items: center;

}

// item 兩端對齊(左右兩端不留空間)

.item-between{

? display: flex;

? justify-content: space-between;

}

//item 兩端對齊且上下居中(主軸在橫軸)

.lr-bettem{

? display: flex;

? flex-direction: row;

? justify-content: space-between;

? align-items: center;

}

//item 從左到右排列,且上下居中(主軸在橫軸)

.lr-start{

? display: flex;

? flex-direction: row;

? justify-content: flex-start;

? align-items: center;

}

//item 從左到右排列踩晶,上下不居中

.lr-start2{

? display: flex;

? flex-direction: row;

? justify-content: flex-start;

}

//item從右到左排列执泰,且上下居中

.lr-end {

display: flex;

flex-direction: row;

justify-content: flex-end;

align-items: center;

}

// item 上下兩端對齊(主軸在縱軸)

.ud-bettem{

? display: flex;

? flex-direction: column;

? justify-content: space-between;

}

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市渡蜻,隨后出現(xiàn)的幾起案子术吝,更是在濱河造成了極大的恐慌,老刑警劉巖茸苇,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件排苍,死亡現(xiàn)場離奇詭異,居然都是意外死亡税弃,警方通過查閱死者的電腦和手機纪岁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來则果,“玉大人幔翰,你說我怎么就攤上這事∥髯常” “怎么了遗增?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長款青。 經(jīng)常有香客問我做修,道長,這世上最難降的妖魔是什么抡草? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任饰及,我火速辦了婚禮,結果婚禮上康震,老公的妹妹穿的比我還像新娘燎含。我一直安慰自己,他們只是感情好腿短,可當我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布屏箍。 她就那樣靜靜地躺著,像睡著了一般橘忱。 火紅的嫁衣襯著肌膚如雪赴魁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天钝诚,我揣著相機與錄音颖御,去河邊找鬼。 笑死凝颇,一個胖子當著我的面吹牛潘拱,可吹牛的內(nèi)容都是我干的秉继。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼泽铛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辑鲤?” 一聲冷哼從身側(cè)響起盔腔,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎月褥,沒想到半個月后弛随,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡宁赤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年舀透,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片决左。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡愕够,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出佛猛,到底是詐尸還是另有隱情惑芭,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布继找,位于F島的核電站遂跟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏婴渡。R本人自食惡果不足惜幻锁,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望边臼。 院中可真熱鬧哄尔,春花似錦、人聲如沸硼瓣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堂鲤。三九已至亿傅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瘟栖,已是汗流浹背葵擎。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留半哟,地道東北人酬滤。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓签餐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親盯串。 傳聞我的和親對象是個殘疾皇子氯檐,可洞房花燭夜當晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 一、Flex 布局是什么体捏? CSS3引入了一種新的布局模式——Flexbox布局冠摄,即伸縮盒模型布局(Flexibl...
    俠客有情劍無情QAQ閱讀 5,751評論 7 94
  • 請解釋一下CSS3的FLEXBOX(彈性盒布局模型)以及適用場景? 大家好几缭,我是IT修真院鄭州分院第七期的學員馮亞...
    f056917閱讀 524評論 0 1
  • 文章目錄0. 前言1. 基礎概念2. 容器屬性(父屬性:Properties for the Parent)2.1...
    游云deb閱讀 1,625評論 0 1
  • 彈性盒模型Flex指南 Web layout 是Web UI中的基礎架構, 重要性不言而喻. 傳統(tǒng)的盒模型, 借助...
    raining_804f閱讀 485評論 0 0
  • 找到間書真好
    隨風998閱讀 460評論 0 48