1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        3分鐘精通flex布局 - flex布局可視化學(xué)習(xí)工具

        共 5009字,需瀏覽 11分鐘

         ·

        2021-02-05 00:54

        寫在前面

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

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

        那有沒有一種更直觀、更高效的學(xué)習(xí)方式呢?

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

        這個工具適合什么人?

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

        • 對有些屬性的作用有些模糊,畢竟是web開發(fā),寫了就能即時看效果,多試幾次總能對
        • 有時候還需要百度
        • 搞不清主軸變化后的變化,容易搞混
        • 其他

        可視化工具展示

        父元素屬性設(shè)置

        在這里控制父元素的屬性值,操作后即時渲染到下面的結(jié)果預(yù)覽區(qū)。

        結(jié)果預(yù)覽

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

        上面實現(xiàn)的是一個水平垂直居中效果

        圖解FlexBox

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

        flex-direction:row

        flex-direction:row-reverse

        flex-direction:row, justify-content:space-around

        flex-direction:column,justify-content:space-around

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

        特別說明下

        其實很多人迷惑的是justify-contentalign-items的關(guān)系,很多人誤認為align-items是設(shè)置垂直方向的布局,這么理解其實是有問題的。

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

        • justify-content 用來設(shè)置主軸方向的布局或?qū)R方式
        • align-items 用來設(shè)置交叉軸方向的布局或?qū)R方式

        主軸可以通過flex-direction來進行設(shè)置,取值為rowcolumn。

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

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

        截圖演示下

        flex-direction:row,justify-content:space-around,align-items:center

        flex-direction:column,justify-content:space-around,align-items:center

        本工具的實現(xiàn)方式

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

        細節(jié)就不說了,貼下主要用到的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'
        ????????????}
        ????????},
        ????]
        }

        彩蛋

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

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

        工具地址

        http://bigerfe.com/yflex

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

        目前只是具備的基本功能,還有一些需要優(yōu)化要做,后面持續(xù)更新,歡迎體驗。

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

        可否點個『在看』支持下?


        瀏覽 38
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            青草网在线| 抽插综合 | 国产夜夜嗨 | 操我逼逼 | 一级黄色大片免费看 | 亚洲AV大片 | 少妇啪啪姿势不断呻吟动漫 | 久久免费看 | 国产在线精品国自产拍免费国产 | 欧美偷拍自拍 |