在前一篇我们讲到了react Native混合APP开发时,布局主要采用是Flexbox布局,不了解可以参考之前的一篇文章.
[React Native混合开发]React Native中的Flexbox布局
####现在来详细介绍一下Flexbox布局语法跟使用.大家可能非常关心以下几个问题:
#####1 .什么是Flexbox布局?
#####2. Flexbox布局主要用于什么场景?
#####3. Flexbox布局它的语法是什么?
#####4. 如何实际使用Flexbox布局?
#####5. Flexbox布局它的缺陷是什么?
####下面就这五个问题给大家分析分析.希望给那些想尝试用Flexbox的行内人有所帮助. 在恰当的地方能够使用恰当的布局方法,如果有说的不到位,希望大家指正,一起进步。
##1 .什么是Flexbox布局?
###1.1 W3C解释
Flexbox Layout(Flexible Box)模块,W3C官方称为CSS弹性盒子布局,是在CSS3中定义的一种新的布局模式.
###1.2 具体解释
- Flexbox Layout(Flexible Box)模块,W3C官方称为CSS弹性盒子布局,是在CSS3中定义的一种新的布局模式。
- Flexbox可以控制在容器内的子元素的对齐方式、排列方式以及排序顺序,即使其子元素的尺寸是未知或者动态的情况下。
- 弹性容器的主要特点就是能够调整其子元素的宽度或者高度以使其能在不同分辨率的屏幕下能用最好的方式去填充可用空间。
###1.3 核心思想- 具有flex属性的容器和容器内的项目都具有弹性计算的能力,以至于符合预定的规则.
- 一个Flex弹性盒子能让子元素填充可用空间或者为了阻止子元素超出区域而进行收缩。
##2. Flexbox布局主要用于什么场景?
- 大部分用于移动网页制作上
2 react Native混合开发布局也是基于Flexbox布局
3 Angular等框架布局也采用Flexbox布局
###2.1具体表现
#####1 在不设置元素的具体宽度的情形下将元素排成横排,并在一排的空间不够的时候折行。
#####2 快速的将元素排成竖排。
#####3 将元素沿着父容器的左边、右边或中间或者两端(之前只能使用text-align:justify,还需要为低版本浏览器做很多兼容)排齐。
#####4 改变元素显示的顺序而不改变HTML代码。
#####5 将每个元素占有的空间设置为父元素宽度/高度的一个比例,却不用担心在父元素的尺寸设置为百分比值的时候或是窗口的尺寸变化的时候布局会坏掉。
#####6 实现元素的水平,垂直居中。
有这么效果,我们就来看看,到底每个效果如何用Flexbox布局来实现.
##3. Flexbox布局它的语法是什么?
####3.1 参考了别人总结的,首先看一下Flexbox基本概念
采用Flex布局的元素,称为Flex容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称"项目"。
容器默认存在两根轴:
#####1. 水平的主轴(main axis)和垂直的交叉轴(cross axis)。
#####2. 主轴的开始位置(与边框的交叉点)叫做main start. 结束位置叫做main end;
#####3. 交叉轴的开始位置叫做cross start,结束位置叫做cross end。
#####4. 项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。
####3.2 具体布局
任何元素都可以指定为Flex布局,下面我们来具体看看怎么去写.
####书写几个标签
div1
div2
div3
####设置样式
#####注意:设为Flex布局以后,子元素的float、clear和vertical-align属性将失效。
#div{
display: flex;//指定flex样式
display:-webkit-flex;
width:400px;
border:2px solid #e72a54;
}
#div div:nth-child(1){
width: 100px;
height: 200px;
background:#191cbd;
}
#div div:nth-child(2){
width: 100px;
height: 200px;
background:#33bd19;
}
#div div:nth-child(3){
width: 100px;
height: 200px;
background:#e7c234;
}
###3.2 容器属性
下面我们来看看别人总结的关于容器的属性,现在拿过来分享给大家.
####1. flex-direction
含义:flex-direction属性决定主轴的方向(即项目的排列方向)
语法:flex-direction: row | row-reverse | column | column-reverse;
解释:
row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
###实现:
#div{
display: flex;
display:-webkit-flex;
flex-direction:row;
//flex-direction:row-reverse;
//flex-direction:column;
//flex-direction:column-reverse;
width:400px;
border:2px solid #e72a54;
}
###2. flex-wrap
####含义:
默认情况下,项目都排在一条线(又称"轴线")上。flex-wrap属性定义,如果一条轴线排不下,如何换行。
####语法:
flex-wrap: nowrap | wrap | wrap-reverse;
####含义
- nowrap(默认):不换行。
- wrap:换行,第一行在上方。
- wrap-reverse:换行,第一行在下方
####实现:
####标签
div1
div2
div3
div4
div5
div6
###1. nowrap(默认):不换行。
####样式设置
#div{
display: flex;
display:-webkit-flex;
flex-direction:row;
flex-wrap:nowrap;/*不换行*/
width:400px;
border:2px solid #e72a54;
}
####效果
###2. wrap:换行,第一行在上方。
####样式设置
#div{
display: flex;
display:-webkit-flex;
flex-direction:row;
flex-wrap:wrap;/*换行*/
width:400px;
border:2px solid #e72a54;
}
###效果
###3. wrap-reverse:换行,第一行在下方
####样式设置
#div{
display: flex;
display:-webkit-flex;
flex-direction:row;
flex-wrap:wrap-reverse;/*换行,第一行在下方
####样式设置*/
width:400px;
border:2px solid #e72a54;
}
###3. flex-flow
####含义:
flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。
###语法
flex-flow: || ;
###具体实现
#div{
display: flex;
display:-webkit-flex;
flex-flow:row-reverse wrap-reverse;/*可以自由组合*/
/*flex-flow: row nowrap 默认*/
width:400px;
border:2px solid #e72a54;
}
####效果
###4. justify-content
####含义:
justify-content属性定义了项目在主轴上的对齐方式。
####语法
justify-content: flex-start | flex-end | center | space-between | space-around;
####参数解释
- flex-start(默认值):左对齐
- flex-end:右对齐
- center: 居中
- space-between:两端对齐,项目之间的间隔都相等。
- space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
####1. flex-start(默认值):左对齐
####具体样式
#div{
display: flex;
display:-webkit-flex;
justify-content: flex-start;/*左对齐*/
width:400px;
border:2px solid #e72a54;
}
####效果展示
####2. flex-end:右对齐
####具体样式
#div{
display: flex;
display:-webkit-flex;
justify-content: flex-end;/*右对齐*/
width:500px;
border:2px solid #e72a54;
}
####效果展示
####3. center: 居中
####具体样式
#div{
display: flex;
display:-webkit-flex;
flex-wrap:wrap-reverse;
justify-content: center;/*居中*/
width:400px;
height:400px;
border:2px solid #e72a54;
}
####效果展示
####4. space-between:两端对齐,项目之间的间隔都相等。
####具体样式
#div{
display: flex;
display:-webkit-flex;
flex-wrap:wrap-reverse;
justify-content: space-between;/*两端对齐*/
width:400px;
height:400px;
border:2px solid #e72a54;
}
####效果展示
####5. space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
####具体样式
#div{
display: flex;
display:-webkit-flex;
flex-wrap:wrap-reverse;
justify-content: space-around;/*每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍*/
width:400px;
height:400px;
border:2px solid #e72a54;
}
####效果展示
###5. align-items
####含义
align-items属性定义项目在交叉轴上如何对齐。
####语法:
align-items: flex-start | flex-end | center | baseline | stretch;
####参数解释
- flex-start:交叉轴的起点对齐。
- flex-end:交叉轴的终点对齐。
- center:交叉轴的中点对齐。
- baseline: 项目的第一行文字的基线对齐。
- stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
####具体样式
#div{
display: flex;
display:-webkit-flex;
flex-wrap:wrap-reverse;
align-items: stretch;
width:400px;
height:400px;
border:2px solid #e72a54;
}
####效果展示
###(注意:剩下的样式大家自己去试一试)
###6. align-content
###含义
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
###语法
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
###参数解释
- flex-start:与交叉轴的起点对齐。
- flex-end:与交叉轴的终点对齐。
- center:与交叉轴的中点对齐。
- space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
- space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
- stretch(默认值):轴线占满整个交叉轴。
####具体样式
#div{
display: flex;
display:-webkit-flex;
flex-wrap:wrap-reverse;
align-content: space-between;与交叉轴两端对齐,轴线之间的间隔平均分布。
width:400px;
height:400px;
border:2px solid #e72a54;
}
####效果展示
###(注意:剩下的样式大家自己去试一试)
###结束
明天继续更新…