3分鐘精通flex布局 - flex布局可視化學習工具

2021-02-16 前端技術江湖
寫在前面

現在大前端中被使用最多的布局方式非flex莫屬,像h5、pc、小程序、rn、甚至native都在使用flex布局,可見掌握好flex布局是多的重要。

然而在flex布局興起時,我們學習flex布局的方法大部分就是看一些博客文章的解析,官方文檔說明,然後挨個去看各個屬性的作用和示例,然後再自己手敲實踐幾次。這也是我當初學習flex布局的方法,常規手段,也很有效。如果愣是要說一些不足的地方,應該就是不直觀,效率不太高。

那有沒有一種更直觀、更高效的學習方式呢?

為了能解決這個問題,flex布局可視化工具就誕生了。

這個工具適合什麼人?

畢竟flex布局很簡單,加起來屬性也沒幾個,學習成本也不高,如果你在日常工作中,存在下面一種或者幾種情況,那就可以繼續往下看,否則就可以跳出了。

對有些屬性的作用有些模糊,畢竟是web開發,寫了就能即時看效果,多試幾次總能對可視化工具展示父元素屬性設置

在這裡控制父元素的屬性值,操作後即時渲染到下面的結果預覽區。

結果預覽

在這裡可以添加子元素,也可以單獨對其中的一個子元素設置不同的屬性值。

上面實現的是一個水平垂直居中效果

圖解FlexBox

以下截圖均來自可視化工具,看不下去可以直接跳到到文章末尾,直接在線體驗。

flex-direction:rowflex-direction:row-reverseflex-direction:row, justify-content:space-aroundflex-direction:column,justify-content:space-around

還有很多屬性就不一一截圖了,可以直接打開文末的網址體驗下。

特別說明下

其實很多人迷惑的是justify-content和align-items的關係,很多人誤認為align-items是設置垂直方向的布局,這麼理解其實是有問題的。

這裡要搞清楚一個概念,主軸和交叉軸。

justify-content 用來設置主軸方向的布局或對齊方式align-items 用來設置交叉軸方向的布局或對齊方式

主軸可以通過flex-direction來進行設置,取值為row和column。

當為row時,justify-content 控制水平方向的布局,align-items 控制垂直方向的布局。

當為column時,justify-content 控制垂直方向的布局,align-items 控制水平方向的布局。

截圖演示下

flex-direction:row,justify-content:space-around,align-items:centerflex-direction:column,justify-content:space-around,align-items:center本工具的實現方式

實現很簡單,使用react開發,只遵循一個原則即可 UI=fn(state),所以只要定義好你的state就完成了一半兒。

細節就不說了,貼下主要用到的state

const ChildEleDefaultStyle = [
    { text: 'order', type: 'number', jsxKey: 'order' },
    { text: 'flex-grow', type: 'number', jsxKey: 'flexGrow' },
    { text: 'flex-shrink', type: 'number', jsxKey: 'flexShrink' },
    { text: 'flex-basis', type: 'string', jsxKey: 'flexBasis' },
    { text: 'align-self', type: 'list', jsxKey: 'alignSelf', values: ['auto', 'flex-start', 'flex-end', 'center', 'base-line'] },
]

const initState = {
    parentEleStyle: {
        flexDirection: 'row',
        justifyContent: 'center',
        alignItems: 'center',
        flexWrap: 'wrap',
    },
    parentFlexData: [
        {
            id: 1,
            propertiyName: 'flex-direction',
            propertiyObjName: 'flexDirection',
            values: [
                { name: 'row', checked: 2, },
                { name: 'row-reverse', checked: 1 },
                { name: 'column', checked: 1 },
                { name: 'column-reverse', checked: 1 },
            ]
        },
        {
            id: 2,
            propertiyName: 'flex-wrap',
            propertiyObjName: 'flexWrap',
            values: [
                { name: 'nowrap', checked: 1 },
                { name: 'wrap', checked: 2 },
                { name: 'wrap-reverse', checked: 1 },
            ]
        },
        {
            id: 3,
            propertiyName: 'justify-content',
            propertiyObjName: 'justifyContent',
            values: [
                { name: 'flex-start', checked: 1 },
                { name: 'flex-end', checked: 1 },
                { name: 'center', checked: 2 },
                { name: 'space-between', checked: 1 },
                { name: 'space-around', checked: 1 },

            ]
        },
        {
            id: 4,
            propertiyName: 'align-items',
            propertiyObjName: 'alignItems',
            values: [
                { name: 'flex-start', checked: 1 },
                { name: 'flex-end', checked: 1 },
                { name: 'center', checked: 2 },
                { name: 'space-between', checked: 1 },
                { name: 'space-around', checked: 1 },

            ]
        },
        {
            id: 5,
            propertiyName: 'align-content',
            propertiyObjName: 'alignContent',
            values: [
                { name: 'stretch', checked: 2 },
                { name: 'flex-start', checked: 1 },
                { name: 'flex-end', checked: 1 },
                { name: 'center', checked: 1 },
                { name: 'space-between', checked: 1 },
                { name: 'space-around', checked: 1 },

            ]
        }
    ],
    resultItems: [
        {
            id: 1, elementStyle: {
                order: 0,
                flexGrow: 0,
                flexShrink: 1,
                flexBasis: 'auto',
                alignSelf: 'auto'
            }
        },
        {
            id: 2, elementStyle: {
                order: 0,
                flexGrow: 0,
                flexShrink: 1,
                flexBasis: 'auto',
                alignSelf: 'auto'
            }
        },
        {
            id: 3, elementStyle: {
                order: 0,
                flexGrow: 0,
                flexShrink: 1,
                flexBasis: 'auto',
                alignSelf: 'auto'
            }
        },
        {
            id: 4, elementStyle: {
                order: 0,
                flexGrow: 0,
                flexShrink: 1,
                flexBasis: 'auto',
                alignSelf: 'auto'
            }
        },
    ]
}

彩蛋

面試中經常被問 flex:0 1 auto,表示什麼?所以特地在子元素上作了一個順序。

flex: flex-grow、flex-shrink 、flex-basis 縮寫

工具地址

http://bigerfe.com/yflex

獲得更好的體驗,需要在pc端訪問哦。

目前只是具備的基本功能,還有一些需要優化要做,後面持續更新,歡迎體驗。

今天分享到就這裡,希望對你有用。

相關焦點

  • flex布局 一行3個專題及常見問題 - CSDN
    以下內容主要參考了下面兩篇文章:A Complete Guide to Flexbox 和 A Visual Guide to CSS3 Flexbox Properties。一、Flex 布局是什麼?Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性。任何一個容器都可以指定為 Flex 布局。
  • 小程序Flex布局
    position:relative,相對布局 相對自己布局 left:50px,top:50px (自己居左居上各50px)position:absolute,絕對布局 找近的一個已定位的父級元素進行定位
  • CSS基礎之Flex布局面面觀
    但是利用另外一種布局方式,要實現垂直就中,一行代碼就搞定了,這種新的布局方式就是Flex彈性盒子布局。Flex 即 Flexible Box ,用來為盒狀模型提供最大的靈活性,顧名思義稱為」彈性布局」。
  • Flex布局容器的屬性有哪些?
    flex是Flexible Box的縮寫,意思為「彈性布局」,在使用過程中簡單、易用、代碼較少,在製作網頁的時候經常使用這種方法來進行布局。在使用的過程中任何一個容器都可以指定為Flex布局.{display:flex},行內元素也可以使用Flex布局.box{display:inline-flex;}。當我們將容器設置為Flex布局以後,容器當中的子元素的float、clear等屬性會失效。採用Flex布局的元素,稱為Flex容器,他的所有子元素自動成為容器成員,稱為Flex項目。
  • 微信小程序CSS之Flex布局
    css相信剛開始學習開發小程序的初學者一定對界面的布局很困擾,不知道怎麼布局,怎麼擺放位置,其原因是不了解CSS樣式的屬性,所以,今天代碼君打算寫一篇關於CSS的教程,給大家普及一下。說起CSS布局,首先要講解的就是FLex布局,這個可以說是一個萬能鑰匙,遇到什麼複雜的布局,都可以通過Flex布局搞定,為了方便大家理解Flex屬性,我將會一步步解析FLex的屬性,並附上效果圖採用 Flex 布局的元素,稱為 Flex 容器(flex container),簡稱"容器"。
  • 在H5開發中flex布局方式的屬性詳解
    flex 是 flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性,任何一個容器都可以指定為 flex 布局 ,不管你是塊元素還是行內元素都將被改變成盒狀模型 ,可以直接改變盒子大小.
  • Vue全家桶之flex布局探秘
    還記得我們曾經使用float布局嗎,基於盒狀模型,依賴 display屬性 + position屬性 + float屬性,對於複雜的布局,真的沒法下手,而且導致頁面兼容性不好,很難做到滿意的效果,時常為了居中絞盡腦汁,左邊距、右邊距、上邊距、下邊距、居中對齊、都設置了也沒什麼卵用;
  • 前端教程:flex布局(攜程網首頁案例製作)
    今日內容flex 布局體驗 flex 布局原理flex 布局父項常見屬性flex布局子項常見屬性>攜程網首頁案例製作傳統布局兼容性好布局繁瑣局限性,不能再移動端很好的布局flex布局pc則採用flexflex布局原理原理 -- 通過為父元素設置display:flex; 控制子元素(伸縮項) 的排列方式。
  • CSS的flex布局,看完這篇你就懂了
    每一個項目都離不開前端的網頁布局,網頁布局也是CSS一個重點應用,系統來說,頁面的布局都應該由前端來完成,不過作為後端人員,一些簡單的樣式就不需要依賴前端人員了。傳統的布局,都是基於盒子模型,依賴float、position定位,它對於一些特殊的布局非常不方便,比如,垂直居中。相信很多小夥伴對於垂直居中有些困擾吧。
  • 2020年了,FLEX布局還搞不定麼
    閱讀本文您將收穫布局的相關概念Flex布局的相關屬性面試中常問的Flex相關知識為啥要Flex布局?因為貪婪!在網頁布局還未進入CSS時代的時候,布局往往通過 <table> 標籤來實現伴隨著 Web語義化 時代的到來,人們不滿足於簡單的 table 布局,開始琢磨新花樣CSS標準 為我們提供了三種基本的布局方式:標準流、浮動布局、定位布局隨著技術和人們對美的需求的發展,傳統的布局顯得不夠靈活,所以就出現了今天要講的 flex 布局Flex布局基本概念2009
  • Chrome72 嵌套 flex 布局修改,你的網站可能會發生布局錯亂
    起源2019 年 1 月 29 日,Chrome72 正式版(72.0.3626.81)發布,本次發布帶來了一個改變,且沒有在更新日誌中提及,該改變導致某些網站發生了布局錯亂。該改變主要針對的是嵌套的flex布局,下面我們一起看下是怎麼回事。
  • flex布局實現瀑布流專題及常見問題 - CSDN
    瀑布流的布局自我感覺還是很吸引人的,最近又看到實現瀑布流這個做法,在這裡記錄下,特別的,感覺flex布局實現瀑布流還是有點懵的樣子,不過現在就可以明白它的原理了1.multi-column多列布局實現瀑布流先簡單的講下multi-column相關的部分屬性column-count
  • CSS:把Flex布局的代碼全部展示出來,你難道還不會?
    首先呢,先去看文檔,了解flex是什麼,這裡不做贅述。當然,可以看下面的代碼示例,輔助你理解。一、row將子元素在水平方向進行布局:1.3.垂直方向靠頂部,水平方向兩端對齊.row-lsb { display: flex; flex-direction: row; align-items: flex-start; justify-content:
  • CSS中flex和inline-flex的區別
    兩者的區別描述:flex: 將對象作為彈性伸縮盒顯示inline-flex:將對象作為內聯塊級彈性伸縮盒顯示一句話來描述就是 當Flex Box 容器沒有設置寬度大小限制時,當display 指定為 flex 時,FlexBox 的寬度會填充父容器,當display指定為 inline-flex
  • 微信小程序自定義日曆組件及flex布局最後一行對齊問題分析
    正文在編寫過程中,因為大家都知道,日曆組件是有固定行數和每一行的固定列數的(即使當前方塊內沒有值),所以結合小程序「數據優先」的特點,最合適的布局方式一定是flex了!說一下大致思路(布局上),筆者將整個組件分為兩部分:分別是頭部的當前日期(年月)顯示,以及左右兩側的切換按鈕頭部的布局自不多說:一個 display:flex; 加上 align-items:center; 居中簡直完美。
  • Flex布局新舊混合寫法詳解(兼容微信)
    box-align: center;  }   box-align屬性總共有5個值: .box{      box-align: start | end | center | baseline | stretch;      /*交叉軸對齊:頂部對齊(默認) | 底部對齊 | 居中對齊 | 文本基線對齊 | 上下對齊並鋪滿*/  }   3.
  • Google 開源的 Android 排版庫:FlexboxLayout
    ,是2009年W3C提出了一種新的布局方案,可以簡便、完整、響應式地實現各種頁面布局,並且 React Native 也是使用的 Flex 布局。,我們在 Android 開發中使用 Linearlayout + RelativeLayout 基本可以實現大部分複雜的布局,但是Google就想了,有沒有類似 Flexbox 的一個布局呢?
  • flex 多列水平居中 - CSDN
    目錄1.常用居中方法:水平居中,垂直居中,2.單列布局3.二列&三列布局:float+margin,position+margin,聖杯布局(float+負margin),雙飛翼布局(float+負margin),flex布局如果你想學習交流html5css3等web前端技術,想多了解一些前端方面的內容,可以加入我們的QQ
  • 探秘 flex 上下文中神奇的自動 margin
    —CSS2 Visual formatting model details: 10.3.3If margin-top, or margin-bottom are auto, their used value is 0.
  • CSS中固定定位、相對定位、絕對定位以及flex布局高效定位
    3.將主體部分的三個子元素都設置左浮動  那麼container下屬的main、left和right這三個子元素自動成為容器成員,稱為 Flex 項目(flex item),簡稱」項目」。 3.5.通過項目屬性flex-basis 設置left和right的固定寬度