CSS flex-grow 屬性
關於彈性佈局的總體介紹可以參閱display:flex 彈性佈局一章節。
上面是一篇概括性文章,僅對相關屬性進行了基礎介紹,細節方面有所欠缺。
本文則通過程式碼例項詳細介紹一下彈性佈局中的flex-grow屬性。
一.彈性佈局概括:
彈性佈局的內容較多,相關文章的篇幅通常也很長,從各種角度進行分析,看起來比較複雜。
其實說來說去,就是告訴讀者這麼一個事情,子專案如何去分配容器的空間。
既然是彈性佈局,那麼子專案自然可以做到能伸能屈,如此通俗的介紹估計能對理解有所幫助。
二.flex-grow屬性:
前面提到過彈性佈局就是專案可以做到能伸能屈,此屬性就是用來規定專案"伸"。
flex-grow屬性定義專案的放大比例,預設為0,也就是不進行放大。
如果容器不存在剩餘空間,那麼也就無法進行放大操作。
語法結構:
[CSS] 純文字檢視 複製程式碼flex-grow: number|initial|inherit;
屬性值說明:
(1).number:一個數值,預設為0,用於規定子專案的放大比例,這個比例要和其他專案對比進行確定。
(2).initial:專案以預設方式顯示,具體參閱CSS initial 屬性一章節。
(3).inherit:從父元素繼承該屬性。
上述程式碼都是理論闡述,可能讀過之後還是感覺一頭霧水,不用擔心,後面會有詳細的程式碼例項分析。
三.程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #main { width: 350px; height: 100px; background:#ccc; display: flex; } #main div{flex-basis:50px;} #main div:nth-of-type(1) {flex-grow: 1;} #main div:nth-of-type(2) {flex-grow: 1;} #main div:nth-of-type(3) {flex-grow: 1;} #main div:nth-of-type(4) {flex-grow: 1;} #main div:nth-of-type(5) {flex-grow: 1;} </style> </head> <body> <div id="main"> <div style="background-color:coral;"></div> <div style="background-color:lightblue;"></div> <div style="background-color:khaki;"></div> <div style="background-color:pink;"></div> <div style="background-color:lightgrey;"></div> </div> </body> </html>
程式碼執行效果截圖如下:
程式碼分析如下:
(1).首先,容器採用display: flex彈性佈局,總寬度是350畫素。
(2).子專案的基準寬度是50畫素,五個子專案總共佔據250畫素,所以容器還有剩餘空間。
(3).預設狀態下,flex-grow屬性值是0,也就是不放大擴充套件,上述程式碼設定每一個子專案的flex-grow屬性值為1,也就是它們平均瓜分容器剩餘的空間,所以最終結果是五個子專案佔據的空間是相同的。
下面再來看一個不是平均分配剩餘空間的程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #main { width: 350px; height: 100px; background:#ccc; display: flex; } #main div{flex-basis:50px;} #main div:nth-of-type(1) {flex-grow: 1;} #main div:nth-of-type(2) {flex-grow: 3;} #main div:nth-of-type(3) {flex-grow: 1;} #main div:nth-of-type(4) {flex-grow: 1;} #main div:nth-of-type(5) {flex-grow: 1;} </style> </head> <body> <div id="main"> <div style="background-color:coral;"></div> <div style="background-color:lightblue;"></div> <div style="background-color:khaki;"></div> <div style="background-color:pink;"></div> <div style="background-color:lightgrey;"></div> </div> </body> </html>
程式碼執行效果截圖如下:
可以看到,第二個div的寬度要明顯大於其餘div,程式碼分析如下:
(1).首先,容器採用display: flex彈性佈局,總寬度是350畫素。
(2).子專案的基準寬度是50畫素,五個子專案總共佔據250畫素,所以容器還有剩餘空間。
(3).第二個div的flex-grow屬性值為3,其餘div的flex-grow屬性值為1。
(4).也就是說第二個div瓜分到的剩餘空間是其他div的三倍,特別注意的是,不是第二個div的尺寸是其他div的三倍,而是第二個div瓜分到容器剩餘空間是其他div的三倍。
佔據剩餘空間尺寸的計算方式:可以認為將剩餘空間劃分為(1+3+1+1+1)=7份,每一份的尺寸等於剩餘空間/7。
那麼每一個div的尺寸就是:
(1).50px+100/7
(2).50px+(100/7)*3
(3).50px+100/7
(4).50px+100/7
(5).50px+100/7
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #main { width: 350px; height: 100px; background:#ccc; display: flex; } #main div{flex-basis:70px;} #main div:nth-of-type(1) {flex-grow: 1;} #main div:nth-of-type(2) {flex-grow: 3;} #main div:nth-of-type(3) {flex-grow: 1;} #main div:nth-of-type(4) {flex-grow: 1;} #main div:nth-of-type(5) {flex-grow: 1;} </style> </head> <body> <div id="main"> <div style="background-color:coral;"></div> <div style="background-color:lightblue;"></div> <div style="background-color:khaki;"></div> <div style="background-color:pink;"></div> <div style="background-color:lightgrey;"></div> </div> </body> </html>
程式碼執行效果截圖如下:
雖然設定的瓜分比例不同,但是每一個div的尺寸卻是相同的。
因為容器已經沒有任何剩餘空間了,所以每一個子專案必須各守本分。
還有一個比較極端的情況,那就是不設定子專案的初始寬度,僅設定flex-grow屬性。
那麼此時各個子專案的尺寸就以flex-grow屬性值比例進行劃分,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #main { width: 350px; height: 100px; background:#ccc; display: flex; } #main div:nth-of-type(1) {flex-grow: 1;} #main div:nth-of-type(2) {flex-grow: 3;} #main div:nth-of-type(3) {flex-grow: 1;} #main div:nth-of-type(4) {flex-grow: 1;} #main div:nth-of-type(5) {flex-grow: 1;} </style> </head> <body> <div id="main"> <div style="background-color:coral;"></div> <div style="background-color:lightblue;"></div> <div style="background-color:khaki;"></div> <div style="background-color:pink;"></div> <div style="background-color:lightgrey;"></div> </div> </body> </html>
程式碼執行效果截圖如下:
沒有設定初始的寬度,那麼各個子專案的尺寸按照flex-grow順序值比例進行劃分。
於是各個div的寬度分別如下:
(1).350*(1/7)
(2).350*(3/7)
(3).350*(1/7)
(4).350*(1/7)
(5).350*(1/7)
非常的簡單,不再多介紹,如果有任何問題可以在文章底部留言。
相關文章
- CSS 屬性篇(七):Display屬性CSS
- css display 屬性CSS
- CSS perspective 屬性CSS
- CSS transform 屬性CSSORM
- css常用屬性CSS
- css的屬性CSS
- CSS字型屬性和文字屬性詳解CSS
- css文字屬性2CSS
- css常用文字屬性CSS
- CSS 的 background 屬性CSS
- css的background屬性CSS
- CSS zoom屬性用法CSSOOM
- CSS 屬性賦值CSS賦值
- CSS外觀屬性CSS
- css3屬性CSSS3
- CSS 常用文字屬性CSS
- css屬性的可繼承性CSS繼承
- CSS3常用屬性CSSS3
- CSS定位屬性詳解CSS
- CSS 自定義屬性指北CSS
- [CSS]屬性選擇器CSS
- css3核心屬性CSSS3
- CSS3 filter屬性CSSS3Filter
- CSS 屬性宣告順序CSS
- css文字外觀屬性CSS
- CSS---text-overflow屬性CSS
- CSS z-index 屬性CSSIndex
- css字型樣式屬性CSS
- HTML CSS 三大屬性④HTMLCSS
- CSS3 transition 屬性CSSS3
- CSS3 transform 屬性CSSS3ORM
- css常用屬性彙總CSS
- CSS屬性速查表CSS
- CSS3 initial 屬性CSSS3
- CSS font-size屬性CSS
- CSS text-indent 屬性CSS
- Css 中的position屬性CSS
- css 背景圖片屬性CSS