布局的传统解决方案,基于盒状模型,依赖
display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。CSS 终极之战:Grid VS Flexbox
Flexbox 是为一维布局设计的,而 Grid 是为二维布局设计。
https://zhuanlan.zhihu.com/p/31952490
https://itw01.com/2HBQEPH.html
內容優先 vs 佈局優先
Flexbox 以內容為基礎, Grid 以佈局為基礎。
Flexbox 以內容為基礎,為一維布局而設計
https://eden-liu.com/frontend/css3-flexbox-key-points/
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
https://www.oxxostudio.tw/articles/201501/css-flexbox.html
https://wcc723.github.io/css/2017/07/21/css-flex/
2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
CSS3 Flexbox,是一種優於傳統 float 僅能水平流動的排版,更能做到置中、垂直與等距等等。
軸線觀念
- 主軸:
- justify-content
- 可對其主軸的起點、終點或等距排列
- 交錯軸:
- align-items
- 可對其交錯軸的起點、終點或置中
- flex-direction,可改變主軸的方向性 (預設主軸是由左至右)
- 水平
- 垂直
- 反轉
外層屬性
- display:必備屬性
- flex-flow
- flex-direction:決定 flex 軸線
- flex-wrap:決定換行的屬性
- justify-content:主軸的對齊
- align-items:交錯軸的對齊
內層屬性
- flex
- flex-grow:伸展比
- flex-shrink:收縮比
- flex-basis:絕對值
- order:排序
- align-self:單一物件的交錯軸對齊
接著來看一下細部的屬性介紹
flex-direction
對齊方法
- row (default)
- row-reverse
- column
- column-reverse
justify-content
主軸對齊 (外層) ,依據主軸的軸線決定物件之間的間隔方法
以下是 justify-content 所有屬性:
- flex-start
- flex-end
- center
- space-between
- space-around
節錄:MSDN
align-items
交錯軸對齊 (外層),垂直於主軸的對齊方法
- flex-start
- flex-end
- center
- strech:拉滿整個軸線
- baseline:與文字的行高有關係,以文字基準線來排列
節錄:MSDN
align-self
交錯軸對齊 (內層),內元件本身垂直於主軸的對齊方法
- flex-start
- flex-end
- center
- strech:拉滿整個軸線
- baseline:與文字的行高有關係,以文字基準線來排列
http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
看看Flex如何实现,从1个点到9个点的布局。有 codepen 可以查看Demo。
詳閱該文章有完整說明。
Grid 以佈局為基礎,為二維布局而設計
http://muki.tw/tech/css-grid-note/
https://blog.techbridge.cc/2017/02/03/css-grid-intro/
幾年前出現的 FlexBox 宛如神兵利器,讓我們可以擺脫這些困擾,快速進行排版,而隨著 CSS Grid 規範的出現,我們即將有更好的武器了!
CSS Grid 不是要來取代 Flexbox,他們是相輔相成的角色,flex 可以看作是 one-dimensional layout solution,CSS Grid 則是 two-dimentional layout solution,用來解決我們所有先前需要各種 hack 才能完成的頁面佈局。
不過包括 IE 在內的舊瀏覽器仍是無法支援 CSS Grid 的。
IE exist. Use Grid?
https://www.youtube.com/watch?v=7msERxu7ivg






