前端布局之Flex語法

前端布局一直是CSS的一個重點應(yīng)用,然而基于盒子模型的傳統(tǒng)布局方案,依賴display + position + float 屬性,對于某些特殊的布局非常不方便每强,比如:垂直居中就不容易實現(xiàn)始腾。針對這一情況,在2009年空执,W3C提出了一種新的方案:Flex布局浪箭,可以簡便、完整辨绊、響應(yīng)式地實現(xiàn)前端的各種布局奶栖,并且已經(jīng)得到幾乎所有瀏覽器的支持。

眾所周知门坷,前端分為PC端和移動端宣鄙,并且它們的界面布局有一些差別,比如:PC端的界面中默蚌,水平方向是主軸(main axis)冻晤,豎直方向是交叉軸(cross axis);而移動端绸吸,水平方向是交叉軸(cross axis)鼻弧,豎直方向是主軸(main axis),針對這一差別锦茁,在前端布局中要特別注意攘轩。

flex屬性簡介

flex的屬性分為兩類:父容器屬性和子item的屬性

父容器屬性

屬性 作用 特性分類
flex-direction 定義子項在容器內(nèi)的排列方向 排列
flex-wrap 定義子項在容器內(nèi)的換行效果 排列
flex-flow flex-direction和flex-wrap的復(fù)合屬性 排列
justify-content 定義子項在容器內(nèi)水平對齊方式 對齊
align-items 定義子項在容器內(nèi)垂直對齊方式 對齊
align-content 定義多行子項在容器內(nèi)整體垂直對齊方式 對齊

子item屬性

屬性 作用 特性分類
order 定義子項們的排列順序 排列
flex-grow 定義子項寬度之和不足父元素寬度時,子項拉伸的比例 占地面積
flex-shrink 定義子項寬度之和超過父元素寬度時码俩,子項縮放的比例 占地面積
flex-basis 定義子項的初始寬度度帮,flex-grow和flex-shrink以此為基礎(chǔ)縮放 占地面積
align-self 定義單個子項與其他項目不一樣的對齊方式 對齊

Flex布局

FlexFlexible Box的縮寫,意思是彈性布局握玛,用來為盒子模型提供最大的靈活性够傍。分為兩種布局方式:flexinline-flex甫菠。

1. flex: 將對象作為彈性伸縮盒顯示

flex默認從左邊開始布局挠铲,所以指定寬度后,子item就開始從左至右依次布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
  <style type="text/css">
    .main{
      width:200px;
      background-color: red;
      display: flex;/*父div設(shè)置該屬性*/
    }
    .main>div{
      width: 50px;
      height: 50px;
      border: 1px solid blue;
      box-sizing: border-box;/*這是css3屬性寂诱,如果不懂拂苹,請繼續(xù)往下閱讀*/
      /*float:left;這個屬性就不需要了,會自動浮動*/
    }
  </style>
</head>
<body>
  <div class="main">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
  </div>
</body>
</html>

效果圖

圖1

2. inline-flex:將對象作為內(nèi)聯(lián)塊級彈性伸縮盒顯示

inline-flex將對象作為內(nèi)聯(lián)級容器痰洒,它會根據(jù)子item的大小自適應(yīng)寬度和高度瓢棒,所以可以刪除width: 200px

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
  <style type="text/css">
    .main{
      background-color: red;
      display: inline-flex;/*父div設(shè)置該屬性*/
    }
    .main>div{
      width: 50px;
      height: 50px;
      border: 1px solid blue;
      box-sizing: border-box;/*這是css3屬性,如果不懂丘喻,請繼續(xù)往下閱讀*/
      /*float:left;這個屬性就不需要了脯宿,會自動浮動*/
    }
  </style>
</head>
<body>
  <div class="main">
    <div>1</div>
    <div>2</div>
    <div>3</div>
    <div>4</div>
  </div>
</body>
</html>

效果圖

圖2

flex父容器屬性

1. flex direction

控制主軸的方向,即子item的排列方向泉粉,有四個取值范圍:

  • row(default)- 主軸水平
  • row-reverse
  • column - 主軸垂直
  • column-reverse
圖3

2. flex wrap

定義子item在主軸方向的換行效果

圖5

3. flex-flow

該屬性是flex-directionflex-wrap兩個屬性的縮寫连霉,默認值為:row nowrap

4. justify content

定義子item在主軸方向的對齊方式

圖4

5. align-items

定義子item在交叉軸方向的對齊方式

圖6

6. align-content

定義多行子item在交叉軸上的對齊方式

圖7

子item屬性

1. order

定義子item的排列順序榴芳,默認為0

圖8

2. flex-grow

定義子item的寬度小于父容器時,子item的拉伸比例跺撼,默認為0窟感,表示不拉伸

圖9

3. flex-shrink

定義子item的寬度之和超過父容器時,子item的縮放的比例歉井,默認為1

圖10

4. flex-basis

設(shè)置子item的寬度flex-direction = row)或高度flex-direction = column)柿祈。如果設(shè)置該屬性,那么flex-grow/flex-shrink以該屬性大小進行縮放

5. flex

該屬性是:flex-grow flex-shrink flex-basis的簡寫哩至,默認值為:0 1 auto躏嚎,其中后兩個屬性可選

6. align-self

定義單個子item在交叉軸上的對齊方式,會覆蓋默認的對齊方式菩貌。默認值為auto紧索,表示繼承父容器的align-items屬性,如果沒有父容器菜谣,則等同于stretchstretch: 伸縮項目在交叉軸方向占滿伸縮容器, 前提是不設(shè)置交叉軸方向的尺寸)

圖11

定位

display屬性定義子item如何在父容器內(nèi)布局珠漂,有兩中類型:relativeabsolute

1. display: relative

在相對定位中,布局子item時需要用到margin尾膊、border媳危、padding等盒子模型。其中冈敛,borderpadding會顯示在item的背景色中待笑;而margin則不會,默認是透明色

圖12

2. display: absolute

使用絕對定位的item抓谴,如果其父容器設(shè)置了relative布局暮蹂,則以父容器做參考,如果父容器不設(shè)置relative布局癌压,則以window做參考仰泻。其中,設(shè)置布局的屬性為:left滩届、right集侯、top、bottom帜消、start棠枉、end

Position = Absolute; Start = 0; Top = 0; Width = 50; Height = 50;

視圖:

圖13
Position = Absolute; Start = 10; Top = 10; End = 10; Bottom = 10;

視圖:

圖14

至此泡挺,F(xiàn)lexbox的語法介紹完畢辈讶,雖然有點多,但是還要多練娄猫,熟能生巧贱除,熟練后你會發(fā)現(xiàn)咳促,前端flex布局快速、高效和靈活勘伺。

(部分圖片來源互聯(lián)網(wǎng)跪腹,如有侵權(quán),請告知飞醉,我怕賠不起)

參考文章

https://www.w3.org/TR/css-flexbox-1/#flex-formatting-context

https://facebook.github.io/yoga/docs/absolute-position/

http://www.cnblogs.com/shuiyi/p/5716918.html

http://www.w3school.com.cn/css/css_boxmodel.asp

http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

https://my.oschina.net/sheila/blog/384806

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冲茸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缅帘,更是在濱河造成了極大的恐慌轴术,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钦无,死亡現(xiàn)場離奇詭異逗栽,居然都是意外死亡,警方通過查閱死者的電腦和手機失暂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門彼宠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弟塞,你說我怎么就攤上這事凭峡。” “怎么了决记?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵摧冀,是天一觀的道長。 經(jīng)常有香客問我系宫,道長索昂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任扩借,我火速辦了婚禮椒惨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘往枷。我一直安慰自己框产,他們只是感情好,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布错洁。 她就那樣靜靜地躺著,像睡著了一般戒突。 火紅的嫁衣襯著肌膚如雪屯碴。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天膊存,我揣著相機與錄音导而,去河邊找鬼忱叭。 笑死,一個胖子當著我的面吹牛今艺,可吹牛的內(nèi)容都是我干的韵丑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼虚缎,長吁一口氣:“原來是場噩夢啊……” “哼撵彻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起实牡,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤陌僵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后创坞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體碗短,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年题涨,在試婚紗的時候發(fā)現(xiàn)自己被綠了偎谁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡纲堵,死狀恐怖搭盾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情婉支,我是刑警寧澤鸯隅,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站向挖,受9級特大地震影響蝌以,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜何之,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一跟畅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧溶推,春花似錦徊件、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辐赞,卻和暖如春部翘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响委。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工新思, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窖梁,地道東北人。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓夹囚,卻偏偏與公主長得像纵刘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荸哟,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

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