个人认为 weui-flex 在小程序布局方面发挥了重大的作用。为开发人员提供了极其便利的布局环境,尤其对于我们我种代码怪来说,前端布局很多时候是有一些困难的,但有了weui-flex页面布局从此不在是问题 。
先介绍一下flex应用:百度查了一下发现在一篇文章地址(http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html)
这里面介绍了 Flex 布局教程 只要认真研究一下 Flex 的各种属性。相信你也会变成布局高手。
2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。
Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为 Flex 布局。只要将它的 display属性设置为 flex / inline-flex / -webkit-flex; /* Safari */ 这样就可以了。
需要注意的是:设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。
在小程序开发者工具里面,我们可以看到默认的 weui-flex 它设置的 display 属性。
flex有六个属性设置可以用在容器上
flex-direction 属性决定主轴的方向(即项目的排列方向)
值有:flex-direction: row | row-reverse | column | column-reverse;
row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
flex-wrap 默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
值有:flex-wrap: nowrap | wrap | wrap-reverse;
nowrap(默认):不换行。
wrap:换行,第一行在上方。
wrap-reverse:换行,第一行在下方。
flex-flow flex-flow 属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
flex-flow: flex-direction> || flex-wrap;
justify-content 属性定义了项目在主轴上的对齐方式。
值有:justify-content: flex-start | flex-end | center | space-between | space-around;
flex-start(默认值):左对齐
flex-end:右对齐
center:居中
space-between:两端对齐,项目之间的间隔都相等。
space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
align-items 属性定义项目在交叉轴上如何对齐。
值有:align-items: flex-start | flex-end | center | baseline | stretch;
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
align-content 属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
flex-start:与交叉轴的起点对齐。
flex-end:与交叉轴的终点对齐。
center:与交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。
另外还有六个项目属性 :
order 属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
flex-grow 属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
flex-shrink 属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。负值对该属性无效。
flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
flex 属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
align-self 属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
align-self: auto | flex-start | flex-end | center | baseline | stretch;
搞明白布局之后,我们就可以开始动手制作,把FLEX做成可动态调用的组件。这样以后使用的时候就方便很多了。
第一步:建立 flex 组件
第二步:配置 组件信息
wxml文件,默认的weui-flex在小程序里面有默认样式不用管,我们把单个列表 flexitem 和 图标 fleximg 文本 flextext这几项设置为自定义的CSS,其它几个参数就是数组 内容。
代码语言:javascript复制<view class="weui-flex" >
<view class="weui-flex__item" wx:for="{{Flexs}}" wx:key="id">
<view class="{{FlexItem}}" bindtap="flexLink" data-linktype="{{item.LinkType}}" data-url="{{item.LinkUrl}}">
<image class="{{FlexImg}}" src="{{item.IconUrl}}"/>
<view>
<text class="{{FlexText}}">{{item.IconText}}</text>
</view>
</view>
</view>
</view>
js文件:options里面的 addGlobalClass 这个很重要,设置了这个为true之后才可以使用外部CSS,这样才能满足我们设想的需求,在调用组件的页面直接调用flex组件,然后通过传值把在CSS文件中设置的几个样式文件名传进去。这样就可以实现在调用页面自由控制展示样式。满足不同布局的需求。
代码语言:javascript复制Component({
options: {
addGlobalClass: true,
},
//上面 addGlobalClass: true 设置了可以使用外部CSS,这样就可以内外配合起来用了。
/**
* 组件的属性列表
*/
properties: {
FlexItem: String,
FlexImg: String,
FlexText: String,
Flexs: Array
},
第三步:在页面中引用,引用的时候可以把我们定义的CSS样式名称及数组内容传进去。
<my-flex FlexItem="flexList" FlexImg="flexIcon" FlexText="FlexText" Flexs="{{indexFlex1}}"></my-flex>
传了内容之后效果就完成了。
我们制作了一个 两行 三列的布局,并配合图标及文字完成了一个小导航设置。
总结:flex布局功能很强大,在小程序开发过程中确实可以减少很多开发时长。。