小程序开发必看!一篇文章让你了解 Flex 布局 By/ifanr - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ifanr2016
V2EX    推广

小程序开发必看!一篇文章让你了解 Flex 布局 By/ifanr

  •  1
     
  •   ifanr2016 2017-01-09 10:44:53 +08:00 4381 次点击
    这是一个创建于 3206 天前的主题,其中的信息可能已经有所发展或是发生改变。
    知晓程序注:
    要想开发小程序,每个人都需要先了解 Flex 。小程序的开发框架使用了 Flex 排版布局,它能帮助开发者以最快的速度,构建美观而具有动态调整性质的小程序排版。
    但是, Flex 在目前为止尚未大范围地推广和使用,甚至许多前端开发者,在上手小程序开发后才知道 Flex 。
    那么,使用 Flex 到底有什么优势? Flex 中有多少排版模式?如何正确使用 Flex 排版?
    今天,知晓程序(微信号 zxcx0101 )就来带大家看看 Flex 的正确使用方法。希望本文可以帮助大家,利用好 Flex 构建具有良好体验的小程序。


    文 |姜家志
    微信小程序页面布局方式采用 Flex 布局格式,它是 W3c 在 2009 年提出的一种新的网页排版方案,可以简便、完整地实现各种响应式页面布局。
    Flex 布局的主要特点是:能够让同级元素在不同的屏幕大小中,用最适合的方法填充空间。同时, Flex 提供了元素在容器中的对齐方式、对齐方向以及元素顺序,甚至被编排的元素可以是动态的或是不确定的大小的。



    Flex 布局有如下特点:
    任意方向的伸缩
    在样式层可以调换和重排顺序
    主轴和侧轴方便配置
    子元素的空间拉伸和填充
    沿容器对齐
    本文将会简单介绍Flex布局在微信小程序中的使用。
    伸缩容器
    在小程序中,设有display: flex或者display: block的元素就是一个flex container (伸缩容器),里面的子元素称为 flex item (伸缩项目)。在 flex container 中,子元素都可以使用 Flex 进行布局。
    display: block 指定为块内容器模式,总是使用新行开始显示,微信小程序的视图容器( view 、 scroll-view 和 swiper )会默认设置display: block ;
    display:flex :指定为行内容器模式。在一行内显示的子元素,可以使用flex-wrap属性指定其是否换行、如何换行。 flex-wrap有三个值: nowrap (不换行)、 wrap (向下换行),以及 wrap-reverse (向上换行)。
    假设我们有以下的代码:
    <view class="flex-row" style="display: block;">
    <view class="flex-view-item">1</view>
    <view class="flex-view-item">2</view>
    <view class="flex-view-item">3</view>
    </view>
    使用display: block (默认值)时,显示效果如下:



    改换成display: flex后,显示效果如下:



    我们可以从效果图中清楚地看出block和flex的区别,即子元素view换行显示( block )和行内显示( flex )的差异。
    主轴和侧轴
    Flex 布局的伸缩容器可以使用任何方向进行布局。
    默认情况下,容器有主轴( main axis )和侧轴( cross axis )两种轴。
    主轴的开始位置为主轴起点( main start ),主轴的结束位置为主轴终点( main end ),而主轴的长度为主轴长度( main size )。
    同理侧轴的起点为侧轴起点( cross start ),结束位置为侧轴终点( cross end ),长度为侧轴长度( cross size )。



    注意,主轴并不是一定是从左到右的,同理侧轴也不一定是从上到下。主轴的方向可以使用 flex-direction 属性控制,它有 4 个可选值:
    row:从左到右的水平方向
    row-reverse :从右到左的水平方向
    column :从上到下的垂直方向
    column-reverse :从下到上的垂直方向
    如果水平方向为主轴,那个垂直方向就是侧轴,反之亦然。
    四种主轴方向设置的效果图:



    图中的实例展示了使用了不同的 flex-direction 值排列方向的区别。
    实例代码:
    <view>
    <view class="flex-row" style="display: flex; flex-direction: row;">
    <view class="flex-view-item">1</view>
    <view class="flex-view-item">2</view>
    <view class="flex-view-item">3</view>
    </view>
    <view class="flex-column" style="display: flex; flex-direction: column;" >
    <view class="flex-view-item">c1</view>
    <view class="flex-view-item">c2</view>
    <view class="flex-view-item">c3</view>
    </view>
    </view>
    运行效果:



    对齐方式
    子元素有两种对齐方式:
    justify-conent 定义子元素在主轴上面的对齐方式;
    align-items 定义子元素在侧轴上对齐的方式。
    justify-content有 5 个可选的对齐方式:
    flex-start :主轴起点对齐(默认值);
    flex-end :主轴结束点对齐;
    center :在主轴中居中对齐;
    space-between :两端对齐,除了两端的子元素分别靠向两端的容器之外,其他子元素之间的间隔都相等;
    space-around :每个子元素之间的距离相等,两端的子元素距离容器的距离也和其它子元素之间的距离相同。
    justify-content的对齐方式和主轴的方向有关。下图以flex-direction为row ,主轴方式是从左到右,描述justify-content5 个值的显示效果:



    align-items表示侧轴上的对齐方式:
    stretch :填充整个容器(默认值);
    flex-start :侧轴的起点对齐;
    flex-end :侧轴的终点对齐;
    center :在侧轴中居中对齐;
    baseline :以子元素的第一行文字对齐。
    align-tiems设置的对齐方式,和侧轴的方向有关。下图以flex-direction为row ,侧轴方向是从上到下,描述align-items的 5 个值显示效果:



    有了主轴和侧轴的方向再加上设置他们的对齐方式,就可以实现大部分的页面布局了。
    希望大家可以通过本文,熟悉 Flex 布局,开发出体验更好的小程序。
    原文地址: http://www.jianshu.com/p/f82262002f8a
    源代码地址: https://github.com/jjz/weixin-mina/blob/master/pages/flex/flex.wxml

    目前国内首个小程序商店已经上线,诚邀大家入驻。 https://minapp.com/?utm_source=v2ex&utm_medium=tiezi20170114





    本文由知晓程序授权转载,关注微信号 zxcx0101 ,回复「上手」获取全网最值得看的小程序上手体验系列文章。
    快速关注知晓程序↓↓↓



    知晓程序(微信号 zxcx0101 )是爱范儿旗下专注于小程序生态的公众号。我们提供最全面、新鲜的小程序资讯(消息、观点、指南、活动)和服务,在这里你能了解到关于小程序的一切。
    第 1 条附言    2017-01-09 17:00:59 +08:00
    知晓程序建立了专门的小程序讨论群组,详情请点击 http://school.17vsell.com/TollChatRoom/Detail.aspx?tollId=5176&from=groupmessage&isappinstalled=0
    7 条回复    2017-01-09 14:07:10 +08:00
    chloerei
        1
    chloerei  
       2017-01-09 12:21:27 +08:00 via iPhone
    bayernmunchen
        2
    bayernmunchen  
       2017-01-09 13:11:28 +08:00 via Android
    文章很不错
    ifanr2016
        3
    ifanr2016  
    OP
       2017-01-09 13:12:32 +08:00
    @bayernmunchen 多谢支持
    jun4rui
        4
    jun4rui  
       2017-01-09 13:26:29 +08:00 via Android
    配图好眼熟。。。
    ericls
        5
    ericls  
       2017-01-09 13:30:49 +08:00 via iPhone
    图都是盗的
    leega0
        6
    leega0  
       2017-01-09 13:39:36 +08:00
    “甚至许多前端开发者,在上手小程序开发后才知道 Flex ” 不至于吧,我一年前就 h5 上面用过了。
    irrigator
        7
    irrigator  
       2017-01-09 14:07:10 +08:00   1
    既然图片都盗用了 Css Tricks 的那篇文章(谷歌搜 Flexbox 排第一的链接),不如直接翻译过来?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1232 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 17:27 PVG 01:27 LAX 10:27 JFK 13:27
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86