CSS布局之彈性盒子-flexbox(下)

采用Flex布局的元素绷蹲,稱(chēng)為Flex容器(flex container),簡(jiǎn)稱(chēng)”容器”顾孽。它的所有子元素自動(dòng)成為容器成員瘸右,稱(chēng)為Flex項(xiàng)目(flex item),簡(jiǎn)稱(chēng)”項(xiàng)目”岩齿。

上篇介紹設(shè)置在容器上的屬性太颤,本篇繼續(xù)介紹設(shè)置在項(xiàng)目上的屬性。

六盹沈、設(shè)置在項(xiàng)目上的屬性

  1. order – 決定flex元素的順序龄章。

  2. align-self – 自身對(duì)齊交叉軸,覆蓋父元素設(shè)置的align-items
    align-self屬性接受和align-items一樣的那些值乞封。

  3. flex-grow –定義項(xiàng)目的放大比例做裙,默認(rèn)為0,即如果存在剩余空間肃晚,也不放大锚贱。

  4. flex-shrink –定義項(xiàng)目的縮小比例,默認(rèn)為1关串,即如果空間不足拧廊,該項(xiàng)目將縮小。

  5. flex-basis –在分配多余空間之前晋修,項(xiàng)目占據(jù)的主軸空間吧碾。

  6. flex –flex屬性是flex-grow, flex-shrink 和 flex-basis的簡(jiǎn)寫(xiě),默認(rèn)值為0 1 auto墓卦。后兩個(gè)屬性可選


項(xiàng)目上主軸方向相關(guān)屬性

1 項(xiàng)目-主軸:order

語(yǔ)法:

order: number

order屬性規(guī)定了彈性容器中的可伸縮項(xiàng)目在布局時(shí)的順序倦春。元素按照 order 屬性的值的增序進(jìn)行布局。擁有相同 order 屬性值的元素按照它們?cè)谠创a中出現(xiàn)的順序進(jìn)行布局落剪。

.test {
    width: 600px;
    border: 1px solid #000;
    display: flex;
}
.test p{
    width: 100px;
    height: 100px;
    background-color: red;
    line-height: 100px;
    text-align: center;
    margin: 8px;
}
.item1 {
            order: 1;
}
.item2 {
    order: 0;
}
.item3 {
    order: -1;
}

<div class="test">
    <p class="item1">1</p>
    <p class="item2">2</p>
    <p class="item3">3</p>
</div>
order.png

注意點(diǎn):

  • 所有 flex 項(xiàng)默認(rèn)的 order 值是 0睁本。
  • order 值大的 flex 項(xiàng)比 order 值小的在顯示順序中更靠后。
  • 相同 order 值的 flex 項(xiàng)按源順序顯示忠怖。所以假如你有四個(gè)元素呢堰,其 order 值分別是2,1脑又,1和0暮胧,那么它們的顯示順序就分別是第四锐借,第二,第三往衷,和第一钞翔。
  • 第三個(gè)元素顯示在第二個(gè)后面是因?yàn)樗鼈兊?order 值一樣,且第三個(gè)元素在源順序中排在第二個(gè)后面席舍。

2 項(xiàng)目-交叉軸:align-self

語(yǔ)法:

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

設(shè)置在項(xiàng)目上的交叉軸方向的屬性只有一個(gè)布轿,align-self自身對(duì)齊交叉軸,覆蓋父元素設(shè)置的align-items来颤,屬性值列表和align-items相同融求。

屬性值:
flex-start: 元素與容器的頂部對(duì)齊呕诉。
flex-end: 元素與容器的底部對(duì)齊斥黑。
center: 元素縱向居中狸演。
baseline: 元素在容器的基線(xiàn)位置顯示。
stretch: 元素被在側(cè)軸方向被拉伸到與容器相同的高度或?qū)挾取?/p>

3 項(xiàng)目-主軸:flex-basis

語(yǔ)法:

flex-basis: number|auto

取值:

flex-basis指定了 flex 元素在主軸方向上的初始大小滑黔。如果不使用 box-sizing 來(lái)改變盒模型的話(huà)笆包,那么這個(gè)屬性就決定了 flex 元素的內(nèi)容盒(content-box)的寬或者高(取決于主軸的方向)的尺寸大小。

flex-basis 的取值有兩個(gè):number和auto略荡。

  • flex-basic 初始值默認(rèn)取值是auto,
    如果主軸方向是水平方向(row)庵佣,auto等于flex項(xiàng)目的寬度(width)。
    如果主軸方向是垂直方向(conlumn), auto等于flex項(xiàng)目的高度(height)汛兜。
  • flex-basis 取值為number, 表示可以設(shè)置flex元素的主軸方向的最小寬度或者最小高度巴粪,number 單位為px, rem。
  • 注意:flex-basis 取值為number會(huì)覆蓋掉flex項(xiàng)目原有的寬度或高度(取決于主軸的方向)粥谬。
.test {
    width: 600px;
    border: 1px solid #000;
    display: flex;
}
div p{
    width: 100px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    margin: 10px;
}
.item1{
    background-color: red;
}
.item2 {
    background-color: green;
    flex-basis: 200px;
}
.item3 {
    background-color: orange;
    flex-basis: auto;
}

<div class="test">
    <p class="item1">1</p>
    <p class="item2">2</p>
    <p class="item3">3</p>
</div>

可見(jiàn)肛根,item3和原始寬度一樣,item2的flex-basis的200px, 覆蓋掉width:100px,

flex-basis.png

4 容器-主軸:flex-grow

語(yǔ)法:

flex-grow: number

flex-grow 指的是當(dāng)flex項(xiàng)目沒(méi)有占滿(mǎn)整個(gè)flex容器的空間時(shí)帝嗡,每一個(gè)項(xiàng)目怎么變化晶通,要不要變大去占據(jù)空間,grow就是生長(zhǎng)哟玷,長(zhǎng)大的意思。

flex-grow屬性定義項(xiàng)目的放大比例一也,默認(rèn)為0巢寡,即不作任何的放大。flex容器下的項(xiàng)目是根據(jù)flex-grow值的權(quán)重對(duì)容器的剩余可用空間進(jìn)行放大的椰苟。注意:剩余可用空間是減去所有flex元素后計(jì)算得到的空間大小抑月。number負(fù)值無(wú)效。

.test {
    width: 600px;
    border: 1px solid #000;
    display: flex;
}
div p{
    height: 100px;
    line-height: 100px;
    text-align: center;
    margin: 10px;
    background-color: orange;
}
.item1{
    flex-grow: 1;
}
.item2 {
    flex-grow: 2;
}
.item3 {
    flex-grow: 3;
}

<div class="test">
    <p class="item1">1</p>
    <p class="item2">2</p>
    <p class="item3">3</p>
</div>
flex-grow.png

這里因?yàn)樗衒lex項(xiàng)目都沒(méi)有設(shè)置固定寬度舆蝴,所以谦絮,他們會(huì)按照各自flex-basis設(shè)置值的占總體值之和的權(quán)重去擴(kuò)展自身的寬度题诵。
即item1占1份,item1的寬度為容器寬度的1/6层皱。item2占2份性锭,item2的寬度為容器寬度的2/6。item3占3份叫胖,item3的寬度為容器寬度的3/6草冈。
注意:容器寬度為去掉margin和padding后的寬度。

5 容器-主軸:flex-shrink

語(yǔ)法:

flex-shrink: number

flex-shrink 指的是當(dāng)flex項(xiàng)目超出整個(gè)flex容器的空間時(shí)瓮增,每一個(gè)項(xiàng)目怎么變化怎棱,要不要縮小去適應(yīng)空間,shrink就是縮小的意思绷跑。

該屬性定義項(xiàng)目的縮小比例拳恋,默認(rèn)為0,即不作任何的縮小砸捏。flex容器下的項(xiàng)目是根據(jù)這個(gè)值的權(quán)重得出容器的超出空間比例分配诅岩,對(duì)設(shè)置該屬性的項(xiàng)目進(jìn)行縮小。number負(fù)值無(wú)效带膜。

.test {
    width: 600px;
    border: 1px solid #000;
    display: flex;
}
div p{
    width: 300px;
    height: 100px;
    line-height: 100px;
    text-align: center;
    margin: 10px;
    background-color: orange;
}
.item1{
    flex-shrink: 0;
}
.item2 {
    flex-shrink: 1;
}
.item3 {
    flex-shrink: 2;
}
<div class="test">
    <p class="item1">1</p>
    <p class="item2">2</p>
    <p class="item3">3</p>
</div>
flex-shrink.png

這里flex容器的寬度設(shè)置成600px吩谦,flex項(xiàng)目的寬度均為300px;為item1分配完空間后膝藕,剩下的空間被后面兩個(gè)項(xiàng)目按比例縮小分配式廷。

注意:容器寬度為去掉margin和padding后的寬度。
注意:flex 元素僅在默認(rèn)寬度之和大于容器的時(shí)候才會(huì)發(fā)生收縮芭挽,其收縮的大小依據(jù) flex-shrink 的值滑废。比如:上邊示例中,容器test總寬度為600px袜爪,每個(gè)p寬度為300px蠕趁,3個(gè)flex元素的寬度大于容器的寬度,所以3個(gè)p依據(jù)flex-shrink值進(jìn)行收縮辛馆。

6 項(xiàng)目-主軸 flex

6.1 語(yǔ)法:

flex: flex-grow flex-shrink flex-basis | auto

flex屬性是前三個(gè)屬性:flex-grow俺陋、flex-shrink、flex-basis的簡(jiǎn)寫(xiě)形式昙篙。
除了可以分別填flex-grow腊状、flex-shrink、flex-basis苔可,這3個(gè)屬性值外缴挖。

6.2 flex還有2個(gè)經(jīng)常使用的屬性值:

initial 屬性默認(rèn)值,相當(dāng)于將屬性設(shè)置為"flex: 0 1 auto"焚辅。
元素會(huì)根據(jù)自身寬高設(shè)置尺寸映屋。它會(huì)縮短自身以適應(yīng)容器苟鸯,但不會(huì)伸長(zhǎng)并吸收f(shuō)lex容器中的額外自由空間來(lái)適應(yīng)容器 。
auto : 相當(dāng)于將屬性設(shè)置為 "flex: 1 1 auto"棚点。
元素會(huì)根據(jù)自身的寬度與高度來(lái)確定尺寸早处,但是會(huì)自行伸長(zhǎng)以吸收f(shuō)lex容器中額外的自由空間,也會(huì)縮短至自身最小尺寸以適應(yīng)容器乙濒。
none : 相當(dāng)于將屬性設(shè)置為"flex: 0 0 auto"陕赃。
元素會(huì)根據(jù)自身寬高來(lái)設(shè)置尺寸。它是完全非彈性的:既不會(huì)縮短颁股,也不會(huì)伸長(zhǎng)來(lái)適應(yīng)flex容器么库。

建議優(yōu)先使用這個(gè)2個(gè)屬性,而不是單獨(dú)寫(xiě)三個(gè)分離的屬性甘有。

6.3 flex語(yǔ)法
flex 屬性可以指定1個(gè)诉儒,2個(gè)或3個(gè)值。

單值語(yǔ)法: 值必須為以下其中之一:

  • 一個(gè)無(wú)單位數(shù)(<number>): 它會(huì)被當(dāng)作<flex-grow>的值亏掀。如:flex:1
  • 一個(gè)有效的寬度(width)值: 它會(huì)被當(dāng)作 <flex-basis>的值忱反。如:flex:200px
  • 關(guān)鍵字none, auto,或initial. 如:flex:auto

雙值語(yǔ)法: 第一個(gè)值必須為一個(gè)無(wú)單位數(shù),并且它會(huì)被當(dāng)作<flex-grow>的值滤愕。第二個(gè)值必須為以下之一:

  • 一個(gè)無(wú)單位數(shù):它會(huì)被當(dāng)作<flex-shrink>的值温算。如:flex:1 1
  • 一個(gè)有效的寬度值: 它會(huì)被當(dāng)作<flex-basis>的值。如:flex:1 200px

三值語(yǔ)法:

  • 第一個(gè)值必須為一個(gè)無(wú)單位數(shù)间影,并且它會(huì)被當(dāng)作<flex-grow>的值注竿。
  • 第二個(gè)值必須為一個(gè)無(wú)單位數(shù),并且它會(huì)被當(dāng)作 <flex-shrink>的值魂贬。
  • 第三個(gè)值必須為一個(gè)有效的寬度值巩割, 并且它會(huì)被當(dāng)作<flex-basis>的值。
    如:flex:1 1 200px

結(jié)尾

至此付燥,flex布局所有屬性都介紹完畢

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宣谈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子键科,更是在濱河造成了極大的恐慌闻丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萝嘁,死亡現(xiàn)場(chǎng)離奇詭異梆掸,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)牙言,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怪得,“玉大人咱枉,你說(shuō)我怎么就攤上這事卑硫。” “怎么了蚕断?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵欢伏,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我亿乳,道長(zhǎng)硝拧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任葛假,我火速辦了婚禮障陶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘聊训。我一直安慰自己抱究,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布带斑。 她就那樣靜靜地躺著鼓寺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勋磕。 梳的紋絲不亂的頭發(fā)上妈候,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音挂滓,去河邊找鬼苦银。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杂彭,可吹牛的內(nèi)容都是我干的墓毒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼亲怠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼所计!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起团秽,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤主胧,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后习勤,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體踪栋,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年图毕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夷都。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡予颤,死狀恐怖囤官,靈堂內(nèi)的尸體忽然破棺而出冬阳,到底是詐尸還是另有隱情,我是刑警寧澤党饮,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布肝陪,位于F島的核電站,受9級(jí)特大地震影響刑顺,放射性物質(zhì)發(fā)生泄漏氯窍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一蹲堂、第九天 我趴在偏房一處隱蔽的房頂上張望狼讨。 院中可真熱鬧,春花似錦贯城、人聲如沸熊楼。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鲫骗。三九已至,卻和暖如春踩晶,著一層夾襖步出監(jiān)牢的瞬間执泰,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工渡蜻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留术吝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓茸苇,卻偏偏與公主長(zhǎng)得像排苍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子学密,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

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