彈性布局,又稱“Flex布局”,是由W3C老大哥于2009年推出的一種布局方式??梢院啽?、完整、響應(yīng)式地實(shí)現(xiàn)各種頁面布局。而且已經(jīng)得到所有主流瀏覽器的支持,我們可以放心大膽的使用。 >>> 了解兩個基本概念,接下來會頻繁提到: ① 容器: 需要添加彈性布局的父元素; ② 項(xiàng)目: 彈性布局容器中的每一個子元素,稱為項(xiàng)目;
>>> 了解兩個基本方向,這個牽扯到彈性布局的使用: ① 主軸: 在彈性布局中,我們會通過屬性規(guī)定水平/垂直方向?yàn)橹鬏S; ② 交叉軸: 與主軸垂直的另一方向,稱為交叉軸。
① 給父容器添加display: flex/inline-flex;屬性,即可使容器內(nèi)容采用彈性布局顯示,而不遵循常規(guī)文檔流的顯示方式; ② 容器添加彈性布局后,僅僅是容器內(nèi)容采用彈性布局,而容器自身在文檔流中的定位方式依然遵循常規(guī)文檔流; ③ display:flex; 容器添加彈性布局后,顯示為塊級元素; display:inline-flex; 容器添加彈性布局后,顯示為行級元素; ④ 設(shè)為 Flex布局后,子元素的float、clear和vertical-align屬性將失效。但是position屬性,依然生效。
2.1代碼實(shí)例
div id='div'> div class='div1'>1div> div class='div2'>2div> div class='div3'>3div> div class='div4'>4div> div> #div{ width: 400px; height: 400px; background-color: yellow; display: flex; } #div div{ width: 100px; height: 100px; background-color: blue; color: white; font-size: 30px; } 五個簡單的div,只給父容器添加了display: flex;屬性,就可以讓容器內(nèi)部打破原有文檔流模式,展現(xiàn)為彈性布局。 簡單的了解一下彈性布局后,我們來詳解一下配合“display: flex;”使用的12大屬性。其中,12個屬性分為兩類,6個作用于父容器,6個作用于子項(xiàng)目。
① flex-direction屬性決定主軸的方向(即項(xiàng)目的排列方向)。 row(默認(rèn)值): 主軸為水平方向,起點(diǎn)在左端; row-reverse: 主軸在水平方向,起點(diǎn)在右端 ; column:主軸為垂直方向,起點(diǎn)在上沿。 column-reverse:主軸為垂直方向,起點(diǎn)在下沿。 ② flex-wrap屬性定義,如果一條軸線排不下,如何換行。 nowrap(默認(rèn)):不換行。當(dāng)容器寬度不夠時,每個項(xiàng)目會被擠壓寬度; wrap: 換行,并且第一行在容器最上方; wrap-reverse: 換行,并且第一行在容器最下方。 ③ flex-flow 是flex-direction和flex-wrap的縮寫形式,默認(rèn)值為:flex-flow: row wrap; 不做過多解釋 ④ justify-content屬性定義了項(xiàng)目在主軸上的對齊方式。 >>> 此屬性與主軸方向息息相關(guān)。 主軸方向?yàn)椋?/span>row-起點(diǎn)在左邊,row-reverse-起點(diǎn)在右邊, column-起點(diǎn)在上邊,column-reverse-起點(diǎn)在下邊 flex-start(默認(rèn)值): 項(xiàng)目位于主軸起點(diǎn)。 flex-end:項(xiàng)目位于主軸終點(diǎn)。 center: 居中 space-between:兩端對齊,項(xiàng)目之間的間隔都相等。(開頭和最后的項(xiàng)目,與父容器邊緣沒有間隔) space-around:每個項(xiàng)目兩側(cè)的間隔相等。所以,項(xiàng)目之間的間隔比項(xiàng)目與邊框的間隔大一倍。(開頭和最后的項(xiàng)目,與父容器邊緣有一定的間隔)
⑤ align-items屬性定義項(xiàng)目在交叉軸上如何對齊。 flex-start:交叉軸的起點(diǎn)對齊。 flex-end:交叉軸的終點(diǎn)對齊。 center:交叉軸的中點(diǎn)對齊。 baseline: 項(xiàng)目的第一行文字的基線對齊。(文字的行高、字體大小會影響每行的基線) stretch(默認(rèn)值):如果項(xiàng)目未設(shè)置高度或設(shè)為auto,將占滿整個容器的高度。
⑥ align-content屬性定義了多根軸線的對齊方式。如果項(xiàng)目只有一根軸線,該屬性不起作用。 (當(dāng)項(xiàng)目換為多行時,可使用align-content取代align-items) flex-start:與交叉軸的起點(diǎn)對齊。 flex-end:與交叉軸的終點(diǎn)對齊。 center:與交叉軸的中點(diǎn)對齊。 space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布。 space-around:每根軸線兩側(cè)的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。 stretch(默認(rèn)值):軸線占滿整個交叉軸。
① order屬性定義項(xiàng)目的排列順序。數(shù)值越小,排列越靠前,默認(rèn)為0。 ② flex-grow屬性定義項(xiàng)目的放大比例,默認(rèn)為0,即如果存在剩余空間,也不放大。 ③ flex-shrink屬性定義了項(xiàng)目的縮小比例,默認(rèn)為1,即如果空間不足,該項(xiàng)目將縮小。
④ flex-basis定義項(xiàng)目占據(jù)的主軸空間。(如果主軸為水平,則設(shè)置這個屬性,相當(dāng)于設(shè)置項(xiàng)目的寬度。 原width將會失效。)
⑤ flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認(rèn)值為0 1 auto。后兩個屬性可選。 此屬性有兩個快捷設(shè)置:auto=(1 1 auto)/none=(0 0 auto)
⑥ align-self:定義單個項(xiàng)目自身在交叉軸上的排列方式,可以覆蓋掉容器上的align-items屬性。 屬性值:與align-items相同,默認(rèn)值為auto,表示繼承父容器的align-items屬性值。
好了,相信到這里,所有同學(xué)都能夠理解flex彈性布局了吧~~學(xué)習(xí)一個新知識,字不如表,表不如圖。希望這5個div的圖解,能夠讓所有同學(xué)深刻的理解Flex彈性布局~接下來,讓我們愉快的拋棄Float、拋棄Position,一起擁抱Flex吧??! 最后,所有的源碼附上,需要的同學(xué)自行測試哦~ DOCTYPE html>html> head> meta charset='UTF-8'> title>title> style type='text/css'> #div{ width: 500px; height: 400px; background-color: yellow; display: flex; /*flex-direction: column-reverse;*/ /*flex-wrap: wrap;*/ /*justify-content: space-around;*/ /*align-items: stretch;*/ /*align-content: stretch;*/ } #div div{ width: 100px; height: 100px; background-color: blue; color: white; font-size: 30px; /*flex-shrink: 0;*/ } #div .div1{ /*font-size: 48px;*/ /*order: 1;*/ /*flex-grow: 1;*/ /*flex-shrink: 0;*/ /*background-color: red;*/ } #div .div3{ /*flex-grow: 2;*/ background-color: green; /*flex-basis: 200px;*/ align-self: flex-end; } style> head> body> div id='div'> div class='div1'>1div> div class='div2'>2div> div class='div3'>3div> div class='div4'>4div> div> body>html>
作者:杰瑞教育
出處:http://www.cnblogs.com/jerehedu/ 版權(quán)聲明:本文版權(quán)歸煙臺杰瑞教育科技有限公司和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。 技術(shù)咨詢: |
|
來自: 昵稱43682464 > 《編程》