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