摘要:布局的傳統(tǒng)解決方案,基于盒狀模型,依賴屬性屬性屬性。一基礎(chǔ)和術(shù)語布局是啥是的縮寫,意為彈性布局,用來為盒狀模型提供最大的靈活性?;靖拍畈捎貌季值脑?,稱為容器,簡稱容器。該屬性的個值分別表示具體對齊方式與軸的方向有關(guān)。
???????網(wǎng)頁布局(layout)是 CSS 的一個重點應(yīng)用。布局的傳統(tǒng)解決方案,基于盒狀模型,依賴 display 屬性 + position屬性 + float屬性。它對于那些特殊布局非常不方便,比如萬惡的垂直居中。一、基礎(chǔ)和術(shù)語 1、flex布局是啥
???????2009年,W3C 提出了一種新的方案----Flex 布局,可以簡便、完整、響應(yīng)式地實現(xiàn)各種頁面布局。目前,它已經(jīng)得到了所有瀏覽器的支持,這意味著,現(xiàn)在就能很安全地使用這項功能。(ie 10+支持flex布局,對于我現(xiàn)在的項目,因為使用cors解決跨域,所以對ie的支持也是ie10+,完美契合)
???????嘴上說著支持,但是ie從來不讓我們失望,flex在ie下的bug和解決方法,有需自取。
Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。
任何一個容器都可以指定為 Flex 布局。
.box{ display: flex; }
行內(nèi)元素也可以使用 Flex 布局。
.box{ display: inline-flex; }
Webkit 內(nèi)核的瀏覽器,必須加上-webkit前綴。當然如果你也使用了無敵的autoprefixer就不需要這么做了。
.box{ display: -webkit-flex; /* Safari */ display: flex; }
還有一點需要注意的是設(shè)為 Flex 布局以后,子元素的float、clear和vertical-align屬性將失效。
2、基本概念采用 Flex 布局的元素,稱為 Flex 容器(flex container),簡稱"容器"。它的所有子元素自動成為容器成員,稱為 Flex 項目(flex item),簡稱"項目"。
容器默認存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開始位置(與邊框的交叉點)叫做main start,結(jié)束位置叫做main end;交叉軸的開始位置叫做cross start,結(jié)束位置叫做cross end。
項目默認沿主軸排列。單個項目占據(jù)的主軸空間叫做main size,占據(jù)的交叉軸空間叫做cross size。
容器可以設(shè)置的屬性共有以下6個
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
1.1 flex-directionflex-direction屬性決定主軸的方向(即項目的排列方向)。
.box { flex-direction: row | row-reverse | column | column-reverse; }
該屬性的4個值分別表示:
row(默認值):主軸為水平方向,起點在左端。
row-reverse:主軸為水平方向,起點在右端。
column:主軸為垂直方向,起點在上沿。
column-reverse:主軸為垂直方向,起點在下沿。
1.2 flex-wrap默認情況下,項目都排在一條線(又稱"軸線")上。flex-wrap屬性定義,如果一條軸線排不下,如何換行。
.box{ flex-wrap: nowrap | wrap | wrap-reverse; }
該屬性的3個值分別表示:
nowrap(默認):不換行。
wrap:換行,第一行在上方。
wrap-reverse:換行,第一行在下方。
1.3 flex-flowflex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認值為row nowrap。
.box { flex-flow:1.4 justify-content屬性|| ; }
justify-content屬性定義了項目在主軸上的對齊方式。
.box { justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly; }
該屬性的6個值分別表示(具體對齊方式與軸的方向有關(guān)。下面假設(shè)主軸為從左到右):
flex-start(默認值):左對齊
flex-end:右對齊
center: 居中
space-between:兩端對齊,項目之間的間隔都相等。
space-around:每個項目兩側(cè)的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。
space-evenly:每個項目之前的間距以及到邊緣的間距相等
1.5 align-items屬性align-items屬性定義項目在交叉軸上如何對齊。
.box { align-items: flex-start | flex-end | center | baseline | stretch; }
該屬性的5個值分別表示(具體的對齊方式與交叉軸的方向有關(guān),下面假設(shè)交叉軸從上到下):
flex-start:交叉軸的起點對齊。
flex-end:交叉軸的終點對齊。
center:交叉軸的中點對齊。
baseline: 項目的第一行文字的基線對齊。
stretch(默認值):如果項目未設(shè)置高度或設(shè)為auto,將占滿整個容器的高度。
1.6 align-content屬性align-content屬性定義了多根軸線的對齊方式。如果項目只有一根軸線,該屬性不起作用。
.box { align-content: flex-start | flex-end | center | space-between | space-around | stretch; }
該屬性的6個值分別表示:
flex-start:與交叉軸的起點對齊。
flex-end:與交叉軸的終點對齊。
center:與交叉軸的中點對齊。
space-between:與交叉軸兩端對齊,軸線之間的間隔平均分布。
space-around:每根軸線兩側(cè)的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。
stretch(默認值):軸線占滿整個交叉軸。
2、項目的屬性項目可以設(shè)置的屬性同樣有6個:
order
flex-grow
flex-shrink
flex-basis
flex
align-self
2.1 order默認情況下,項目按源順序排列。但是order屬性可以控制它們在flex容器中的顯示順序。
.item { order:2.2 flex-grow; /* default 0 */ }
flex-grow屬性定義項目的放大比例,如果所有項目的flex-grow屬性都為1,則它們將等分剩余空間(如果有的話)。如果一個項目的flex-grow屬性為2,其他項目都為1,則前者占據(jù)的剩余空間將比其他項多一倍。
.item { flex-grow:2.3 flex-shrink; /* default 0 */ }
與flex-grow想反,flex-shrink屬性定義了項目的縮小比例,如果所有項目的flex-shrink屬性都為1,當空間不足時,都將等比例縮小。如果一個項目的flex-shrink屬性為0,其他項目都為1,則空間不足時,前者不縮小。
.item { flex-shrink:2.4 flex-basis; /* default 1 */ }
flex-basis屬性定義了在分配多余空間之前,項目占據(jù)的主軸空間(main size)。瀏覽器根據(jù)這個屬性,計算主軸是否有多余空間。它的默認值為auto,即項目的本來大小。
.item { flex-basis:| auto; /* default auto */ }
它可以設(shè)為跟width或height屬性一樣的值(比如350px),則項目將占據(jù)固定空間。
(https://css-tricks.com/snippe... 中講到這個關(guān)鍵字還沒有得到很好的支持,因此很難測試,也很難知道它的兄弟最大內(nèi)容、最小內(nèi)容和適合內(nèi)容做什么。)
flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,默認值為0 1 auto。后兩個屬性可選。
.item { flex: none | [ <"flex-grow"> <"flex-shrink">? || <"flex-basis"> ] }
該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)。
建議優(yōu)先使用這個屬性,而不是多帶帶寫三個分離的屬性,因為瀏覽器會推算相關(guān)值。
align-self屬性允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items屬性。默認值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同于stretch。
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; }
該屬性可能取6個值,除了auto,其他都與align-items屬性完全一致。
三、路漫漫其修遠兮???????其實flex布局沒什么自己的理解,發(fā)這篇文章單純?yōu)榱思由钣∠笞鰝€總結(jié),這篇文章大部分copy自flex布局教程和A Complete Guide to Flexbox
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/114737.html
摘要:最新開發(fā)的項目用了的新特性布局,遇到了兼容性的問題。那么新舊版本是什么布局分為舊版本,過渡版本,以及現(xiàn)在的標準版本。所以如果你只是寫新版本的語法形式,是肯定存在兼容性問題的。 最新開發(fā)h5的項目用了css的新特性flex布局,遇到了CSS兼容性的問題。在網(wǎng)上找到了如下的解決辦法。 我寫頁面的時候用到過很多的flex布局,覺得非常好用。下面附上一篇不錯的flex布局介紹的文章。?Flex...
摘要:但這會帶來高度塌陷的問題,所以要清除浮動。核心內(nèi)置類,會嘗試先于例外的是,利用的是轉(zhuǎn)換。安全性請求可被緩存,請求保存在瀏覽器的歷史記錄中則不能被緩存。與相比,的安全性較差,因為發(fā)送的數(shù)據(jù)是的一部分。 1.實現(xiàn)三欄布局(左右兩邊固定寬度,中間自適應(yīng)) 1)浮動布局左右兩邊固定寬度,并分別設(shè)置float:left和float:right。(但這會帶來高度塌陷的問題,所以要清除浮動。清除浮動...
摘要:正則表達式實現(xiàn)快速古詩匹配作者簡介是推出的一個天挑戰(zhàn)。數(shù)據(jù)匹配操作使用基礎(chǔ)參考文檔項目源碼分析正則找出匹配的詩句替換高亮的標簽構(gòu)造值會返回帶搜索關(guān)鍵字的新數(shù)組。執(zhí)行對大小寫不敏感的匹配。 Day06 - Fetch、filter、正則表達式實現(xiàn)快速古詩匹配 作者:?liyuechun 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰(zhàn)。項目免費提供了 30 ...
摘要:正則表達式實現(xiàn)快速古詩匹配作者簡介是推出的一個天挑戰(zhàn)。數(shù)據(jù)匹配操作使用基礎(chǔ)參考文檔項目源碼分析正則找出匹配的詩句替換高亮的標簽構(gòu)造值會返回帶搜索關(guān)鍵字的新數(shù)組。執(zhí)行對大小寫不敏感的匹配。 Day06 - Fetch、filter、正則表達式實現(xiàn)快速古詩匹配 作者:?liyuechun 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰(zhàn)。項目免費提供了 30 ...
閱讀 3879·2023-04-26 00:36
閱讀 2681·2021-11-16 11:44
閱讀 1105·2021-11-15 17:58
閱讀 1679·2021-09-30 09:47
閱讀 1220·2019-08-30 13:05
閱讀 1552·2019-08-30 12:55
閱讀 2420·2019-08-30 11:02
閱讀 2747·2019-08-29 17:01