微信小程序页面布局方式 (react native也可以用)-温故而知新

微信小程序使用flexbox容器,flexbox布局由伸缩容器和伸缩项目组成。任何一个元素都可以指定为flexbox布局,其中设为display:flex或者display:inline-flex的元素称为伸缩容器。伸缩容器的子元素称为伸缩项目,伸缩项目使用伸缩布局模型来排版。伸缩布局模型与传统的布局不一样,它按照伸缩流的方向布局。请看下面的经典图片


默认情况下,伸缩容器由两根轴组成,主轴(main)和交叉轴(cross),其中主轴的开始位置叫main start,结束位置叫main end。交叉轴的开始位置叫cross start,结束位置叫cross end 。伸缩项目的主轴上的占据空间叫main axis,在交叉轴上的占据位置叫cross axis,根据设置情况的不同。主轴既可以是水平轴,也可以是垂直轴。不论哪个轴作为主轴,默认情况下伸缩项目总是沿着主轴,从主轴开始位置到主轴结束位置进行排版,flexbox在浏览器使用需要加上各个浏览器的私有前缀,-webkit,-moz,-ms,-o,微信小程序全部去掉前缀。

伸缩容器支持的属性有:

1,display

2,flex-direction

3,flex-wrap

4,flex-flow

5,justify-content

6,align-items

7,align-content

8,order

9,flex-grow

10,flex-basis

11,flex

12,align-self

主要介绍这几个属性

display

该属性用来指定元素是否为伸缩容器,语法为

display:flex | display:inline-flex

wxml代码为:

<view class="container">
<view class="sp1">1</view>
<view class="sp2">2</view>
<view class="sp3">3</view>
<view class="sp4">4</view>
<view class="sp5">5</view>
<view class="sp6">6</view>
<view class="sp7">7</view>
<view class="sp8">8</view>
<view class="sp9">9</view>
</view>

wxss代码为

.container{
display: flex;
}

flex:用于产生块级伸缩容器

.container{
display: inline-flex;
}

inline-flex:用于产生行内级伸缩容器,


flex-direction

该属性用于指定主轴方向,语法为

flex-direction: row | row-reverse | column | column-reverse

1)row水平方向从左向右


2)row-reverse水平方向从右向左


4)column伸缩容器为垂直方向,伸缩项目的排版方式为从上到下


5)column-reverse伸缩容器为垂直,伸缩项目为从下到上


flex-wrap

该属性用来指定伸缩容器的主轴线方向空间不足的情况下,是否换行以及该如何换行

flex-wrap: nowrap | wrap | wrap-reverse

1)nowrap空间不足是也不换行


2)wrap空间不足可以换行


3)wrap-reverse空间不足可以换行,若主轴为水平轴,则换行的方向为从下到上,和wrap相反


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

1)flex-start伸缩项目向主轴线的起始位置靠齐


2)flex-end 伸缩项目向主轴线的结束位置对齐,


3)center伸缩项目向主轴线的中间位置靠齐


4)space-around伸缩项目会平均的分布在主轴线里,两端保留一半的空间。


5)space-between伸缩项目会平分在主轴线里,第一个伸缩项目在主轴线的开始位置,最后一个伸缩项目在主轴线的终点位置


align-items

该属性用来定义伸缩项目在伸缩容器的交叉轴上的对齐方式

align-items: flex-start | flex-end | center | baseline | stretch;

1)flex-start伸缩项目沿交叉轴的起始位置对齐


2)flex-end沿交叉轴的结束位置对齐


3)center伸缩项目沿交叉轴的中间位置靠齐


4)baseline伸缩项目根据它们的基线对齐


5)stretch伸缩项目在交叉轴方向拉伸填充整个伸缩容器


align-content

用来调整伸缩项目出现换行后在交叉轴上的对齐方式,类似于伸缩项目在主轴上使用justify-content

align-content: flex-start | flex-end | center | space-between | space-around | stretch

1)flex-start伸缩项目向交叉的起始位置靠齐


2)flex-end伸缩项目向交叉轴的起始位置靠齐


3)center伸缩项目向交叉轴的中间位置靠齐


4)space-between伸缩项目在交叉轴中平均分布


5)space-around伸缩项目在交叉轴平均分布,且两边各有一半空间


6)strech伸缩项目将会在交叉轴上伸展以占用剩余空间


order

用于定义排列顺序,数值越小,排列越靠前,默认值为0

flex-grow

用于定义伸缩项目的放大比例,默认值0,即如果存在剩余空间,也不放大,如果所有伸缩项目的flex-grow设置为1,那么每个伸缩项目将设置为大小相等的剩余空间,如果你将其中一个flex-frow伸缩项设置为2,那么这个伸缩项目所占剩余空间是其他伸缩项目所占胜于空间的两倍

flex-shrink

该属性用来定义伸缩项目的收缩能力

flex-basis

该属性用来设置伸缩项目的基准值,剩余空间按比率进行伸缩

flex

该属性是flex-grow,flex-shrink,flex-basis属性的缩写
flex: none | flex-grow flex-shrink flex-basis
其中第二个参数和第三个参数(flex-shrink,flex-basis)是可选参数,默认为0 1 auto

本例子sp3原属宽度为50px,当是flex:1时,该元素就会把伸缩容器的剩余空间占满,其实质上就等于felx-grow:1
该属性有两个快捷值:auto(1 1 auto)和none(0 0 auto)

align-self

用于设置单独的伸缩项目在交叉轴上的对齐方式,会覆盖默认的对齐方式
align-self: auto | flex-start | flex-end | center | baseline | stretch
1)auto

2)felx-start沿交叉轴开始位置对齐

3)flex-end沿交叉轴结束位置对齐

4)center沿交叉轴中心位置对齐

5)baseline沿交叉轴的基线对齐

6)stretch沿交叉轴方向占满伸缩容器

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如果组件之中有复用的代码,需要重新创建一个父类,父类中存储公共代码,返回子类,同时把公用属性...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例如我们的 setState 函数式同步执行的,我们的事件处理直接绑定在了 dom 元素上,这些都跟 re...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom 转为真实 dom 进行挂载。其实函数是组件和类组件也是在这个基础上包裹了一层,一个是调...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使用,可能是不了解。我公司的项目就没有使用,但是在很多三方库中都有使用。本小节我们来学习下如果使用该...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接触 react 就一直使用 mobx 库,上手简单不复杂。
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc 端可以使用分页进行渲染数限制,在移动端可以使用下拉加载更多。但是对于大量的列表渲染,特别像有实时数据...
本小节开始前,我们先答复下一个同学的问题。上一小节发布后,有小伙伴后台来信问到:‘小编你只讲了类组件中怎么使用 ref,那在函数式组件中怎么使用呢?’。确实我们...
上一小节我们了解了固定高度的滚动列表实现,因为是固定高度所以容器总高度和每个元素的 size、offset 很容易得到,这种场景也适合我们常见的大部分场景,例如...
上一小节我们处理了 setState 的批量更新机制,但是我们有两个遗漏点,一个是源码中的 setState 可以传入函数,同时 setState 可以传入第二...
我们知道 react 进行页面渲染或者刷新的时候,会从根节点到子节点全部执行一遍,即使子组件中没有状态的改变,也会执行。这就造成了性能不必要的浪费。之前我们了解...
在平时工作中的某些场景下,你可能想在整个组件树中传递数据,但却不想手动地通过 props 属性在每一层传递属性,contextAPI 应用而生。
楼主最近入职新单位了,恰好新单位使用的技术栈是 react,因为之前一直进行的是 vue2/vue3 和小程序开发,对于这些技术栈实现机制也有一些了解,最少面试...
我们上一节了了解了函数式组件和类组件的处理方式,本质就是处理基于 babel 处理后的 type 类型,最后还是要处理虚拟 dom。本小节我们学习下组件的更新机...
前面几节我们学习了解了 react 的渲染机制和生命周期,本节我们正式进入基本面试必考的核心地带 -- diff 算法,了解如何优化和复用 dom 操作的,还有...
我们在之前已经学习过 react 生命周期,但是在 16 版本中 will 类的生命周期进行了废除,虽然依然可以用,但是需要加上 UNSAFE 开头,表示是不安...
上一小节我们学习了 react 中类组件的优化方式,对于 hooks 为主流的函数式编程,react 也提供了优化方式 memo 方法,本小节我们来了解下它的用...
开源不易,感谢你的支持,❤ star me if you like concent ^_^
hel-micro,模块联邦sdk化,免构建、热更新、工具链无关的微模块方案 ,欢迎关注与了解
本文主题围绕concent的setup和react的五把钩子来展开,既然提到了setup就离不开composition api这个关键词,准确的说setup是由...
ReactsetState的执行是异步还是同步官方文档是这么说的setState()doesnotalwaysimmediatelyupdatethecomponent.Itmaybatchordefertheupdateuntillater.Thismakesreadingthis.staterightaftercallingsetState()apotentialpitfall.Instead,usecom