Flex使用詳解

在介紹flex之前淹遵,先說一個面試時關(guān)于CSS布局常提到的問題咽安,也就是三欄布局耕捞,左右兩邊固定衔掸,中間一欄自適應(yīng)屏幕大小,如下效果:



以前常見的做法就是將左右兩邊絕對定位俺抽,定位到相應(yīng)的位置敞映,中間設(shè)置width:100%;然后在設(shè)置對應(yīng)的padding-left和padding-right值×赘現(xiàn)在css3中提供了flex屬性振愿,也就是彈性盒子布局,這樣就很好地處理上面的問題弛饭,具體代碼如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>利用flex固縮固布局</title>
    <style>
        *{
            margin: 0;
            padding-right: 0;
        }
        header{
            width: 100%;
            height: 200px;
            margin-top: 10px;
            display: flex;
            display: -webkit-flex;
        }
        header div{
            height: 200px;
            border: 1px solid red;
            margin: 0px 10px;
        }
        header div:nth-child(1){
            width: 100px;
        }
        header div:nth-child(2){
            flex:1;
            -webkit-flex:1;
        }
        header div:nth-child(3){
            width: 100px;
        }

    </style>
</head>
<body>
    <header>
        <div>width:100px;</div>
        <div>寬度自適應(yīng)</div>
        <div>width:100px;</div>
    </header>
</body>
</html>

上面代碼中沒有涉及到一點定位的內(nèi)容冕末,僅僅在父容器中設(shè)置了display:flex;屬性,并在子元素中設(shè)置flex:1即可侣颂。非常的方便档桃。既然flex這么強(qiáng)大,那么接下來就介紹一下flex的具體使用方法憔晒。

一藻肄、flex容器

通過上面的代碼蔑舞,我們能發(fā)現(xiàn):要使用flex布局,需要設(shè)計到兩層嘹屯,外面一層叫做Flex容器(flex container),簡稱”容器”州弟。它的所有子元素自動成為容器成員钧栖,稱為Flex項目(flex item),簡稱”項目”婆翔。下面是一個flex布局的基本概念介紹:



容器默認(rèn)存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)拯杠。主軸的開始位置(與邊框的交叉點)叫做main start,結(jié)束位置叫做main end浙滤;交叉軸的開始位置叫做cross start,結(jié)束位置叫做cross end气堕。項目默認(rèn)沿主軸排列纺腊。
大致了解了之后,主要還是怎么用茎芭。flex容器有以下六個屬性:

  1. flex-direction
  2. flex-wrap
  3. flex-flow
  4. justify-content
  5. align-items
  6. align-content

下面逐個介紹一下這六個屬性的作用:

1. flex-direction

flex-direction屬性決定主軸的方向(即項目的排列方向)揖膜。

flex-direction: row | row-reverse | column | column-reverse;

四個值分別代表:

  • row(默認(rèn)值):主軸為水平方向,起點在左端梅桩。
  • row-reverse:主軸為水平方向壹粟,起點在右端。
  • column:主軸為垂直方向宿百,起點在上沿趁仙。
  • column-reverse:主軸為垂直方向,起點在下沿垦页。
    效果分別對應(yīng)如下:


2. flex-wrap

flex-wrap屬性定義雀费,如果一條軸線排不下,如何換行痊焊。有三個屬性值盏袄,默認(rèn)情況下是wrap。

flex-wrap: nowrap | wrap | wrap-reverse;

分別表示不換行薄啥、換行以及反轉(zhuǎn)換行辕羽,效果分別如下:


3. flex-flow

flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認(rèn)值為row nowrap垄惧。這里就不再具體測試刁愿。

4. justify-content

justify-content屬性定義了項目在主軸上(即相當(dāng)于X軸)的對齊方式。一共有五個屬性值:

justify-content: flex-start | flex-end | center | space-between | space-around;

分別表示:左對齊到逊、右對齊酌毡、居中克握、兩端對齊、每個項目兩側(cè)的間隔相等枷踏。以下是對應(yīng)的效果:


5. align-items

align-items屬性定義項目在交叉軸上(即Y軸上)如何對齊菩暗。也有五個屬性值:

align-items: flex-start | flex-end | center | baseline | stretch;

分表表示:上對齊、下對齊旭蠕、居中對齊停团、項目的第一行文字的基線對齊、如果項目未設(shè)置高度或設(shè)為auto掏熬,將占滿整個容器的高度(默認(rèn)值)佑稠,下面是對應(yīng)的效果圖:


6. align-content

align-content屬性定義了多根軸線的對齊方式。如果項目只有一根軸線旗芬,該屬性不起作用舌胶。該屬性定義多跟軸線在Y軸上的對齊方式,與align-items有點類似疮丛。其有以下六個屬性值:

  • flex-start:與交叉軸的起點對齊幔嫂。
  • flex-end:與交叉軸的終點對齊。
  • center:與交叉軸的中點對齊誊薄。
  • space-between:與交叉軸兩端對齊履恩,軸線之間的間隔平均分布。
  • space-around:每根軸線兩側(cè)的間隔都相等呢蔫。所以切心,軸線之間的間隔比軸線與邊框的間隔大一倍。
  • stretch(默認(rèn)值):軸線占滿整個交叉軸片吊。

二绽昏、flex item

介紹完了flex容器,介紹就要介紹容器里的成員了俏脊,F(xiàn)lex項目(flex item)而涉,簡稱”項目”。這里需要注意的是:設(shè)為Flex布局以后联予,子元素的float啼县、clear和vertical-align屬性將失效
flex項目有以下六個屬性:

  1. order
  2. flex-grow
  3. flex-shrink
  4. flex-basis
  5. flex
  6. align-self

以下對每一個分別進(jìn)行介紹:

1. order

order屬性定義項目的排列順序沸久。數(shù)值越小季眷,排列越靠前,默認(rèn)為0卷胯。有了這個屬性子刮,可以調(diào)整在HTML中出現(xiàn)的順序。

order: <integer>;

2. flex-grow

flex-grow屬性定義項目的放大比例,默認(rèn)為0挺峡,即如果存在剩余空間葵孤,也不放大。

flex-grow: <number>; /* default 0 */

如果一個項目的flex-grow屬性為2橱赠,另一個項目都為1尤仍,則前者占據(jù)的剩余空間將比后一項多一倍。如下所示:


3. flex-shrink

flex-shrink屬性定義了項目的縮小比例狭姨,默認(rèn)為1宰啦,即如果空間不足,該項目將縮小饼拍。

flex-shrink: <number>; /* default 1 */

如果所有項目的flex-shrink屬性都為1赡模,當(dāng)空間不足時,都將等比例縮小师抄。如果一個項目的flex-shrink屬性為0漓柑,其他項目都為1,則空間不足時叨吮,前者不縮小辆布。


4. flex-basis

flex-basis屬性定義了在分配多余空間之前,項目占據(jù)的主軸空間(main size)挤安。類似于設(shè)置了width屬性谚殊。

5. flex

flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫丧鸯,默認(rèn)值為0 1 auto蛤铜。后兩個屬性可選。

6. align-self

align-self屬性允許單個項目有與其他項目不一樣的對齊方式丛肢,可覆蓋align-items屬性围肥。默認(rèn)值為auto,表示繼承父元素的align-items屬性蜂怎,如果沒有父元素穆刻,則等同于stretch。

align-self: auto | flex-start | flex-end | center | baseline | stretch;

上面六個取值中杠步,除了auto氢伟,其他值與align-items屬性完全一致。這里就不一一介紹了幽歼。

三朵锣、flex的應(yīng)用

利用flex,我們可以完成很多布局甸私,而且不需要太多的代碼诚些。開頭的圣杯布局就是一種典型的示例,下面我們利用flex來實現(xiàn)流式布局皇型,并且加上簡單的媒體查詢诬烹,使其在移動端和PC顯示結(jié)構(gòu)不一樣砸烦,程序如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>flex實現(xiàn)流式布局</title>
    <style type="text/css">
    *{ margin: 0; padding:0;}
    .container{
        margin: 20px 20px;
        padding: 10px 10px;
        display: flex;
        flex-wrap:wrap;
        border: 1px solid #ADAAAA;
    }
      .item{
        flex:0 0 40%;
        height: 100px;
        margin:20px 5%;
        box-sizing: border-box;
        border: 1px solid red;
    }

    @media (min-width:960px){
     .item{
        flex:0 0 20%;
        height: 100px;
        margin:20px 2.5%;
        box-sizing: border-box;
        border: 1px solid red;
     }
    }
    </style>
</head>
<body>
    <div class="container">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</body>
</html>

在PC端顯示結(jié)果如下:



在移動端顯示效果如下:



原文:https://www.cnblogs.com/HanselHblog/p/6911490.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市绞吁,隨后出現(xiàn)的幾起案子幢痘,更是在濱河造成了極大的恐慌,老刑警劉巖掀泳,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雪隧,死亡現(xiàn)場離奇詭異,居然都是意外死亡员舵,警方通過查閱死者的電腦和手機(jī)脑沿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來马僻,“玉大人庄拇,你說我怎么就攤上這事【碌耍” “怎么了措近?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長女淑。 經(jīng)常有香客問我瞭郑,道長,這世上最難降的妖魔是什么鸭你? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任屈张,我火速辦了婚禮,結(jié)果婚禮上袱巨,老公的妹妹穿的比我還像新娘阁谆。我一直安慰自己,他們只是感情好愉老,可當(dāng)我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布场绿。 她就那樣靜靜地躺著,像睡著了一般嫉入。 火紅的嫁衣襯著肌膚如雪焰盗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天咒林,我揣著相機(jī)與錄音熬拒,去河邊找鬼。 笑死映九,一個胖子當(dāng)著我的面吹牛梦湘,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼捌议,長吁一口氣:“原來是場噩夢啊……” “哼哼拔!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瓣颅,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤倦逐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后宫补,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體檬姥,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年粉怕,在試婚紗的時候發(fā)現(xiàn)自己被綠了健民。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡贫贝,死狀恐怖秉犹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情稚晚,我是刑警寧澤崇堵,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站客燕,受9級特大地震影響鸳劳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜也搓,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一赏廓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧还绘,春花似錦楚昭、人聲如沸栖袋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塘幅。三九已至昔案,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間电媳,已是汗流浹背踏揣。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留匾乓,地道東北人捞稿。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親娱局。 傳聞我的和親對象是個殘疾皇子彰亥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,092評論 2 355