移动端--flex布局

首先flex布局,有很多其他名字,比如:伸缩布局、弹性布局、伸缩盒布局、弹性盒布局。

这是一种极其灵活的布局方式,but PC端浏览器支持情况较差,尤其是IE678,有些甚至压根不支持,所以它在移动端应用相当广泛。

———————————————————————————————————————————

1.布局原理

一句话:通过给父盒子添加flex属性

display:flex;

,来控制子盒子的排列方式与位置。(任何一个容器都可以指定flex布局,无论是行内元素还是块级元素)

ps:当为父元素设置为flex后,子元素的float,clear,vertical-align将失效。(很好理解,因为flex布局可以做很多事,可以直接让块级元素一行显示,也可以让子元素居中显示,所以也就不需要浮动和清除浮动这些了)

———————————————————————————————————————————

2.flex布局父项常见属性:

1)设置主轴方向

<!--  flex-direction:设置主轴方向  -->
flex-direction:row              //主轴为行,从左到右(默认值)
flex-direction:row-reverse      //主轴为行,从右到左
flex-direction:column           //主轴为列,从上到下
flex-direction:column-reverse   //主轴为列,从下到上

  flex布局中子元素是根据主轴方向排列的,主轴和侧轴是会变化的,flex-direction设置谁为主轴,剩下的就是侧轴。默认情况下,主轴是水平向右,测轴是垂直向下如下图所示:

 2)设置主轴上子元素的排列方式

<!--  justify-content:设置主轴上子元素的排列方式  -->
justify-content:flex-start     //从头部开始,从左到右(默认)
justify-content:flex-end       //从尾部开始排列(贴着右边,前提是主轴默认)
justify-content:center         //在主轴上居中对齐
justify-content:space-around   //平分剩余空间
justify-content:space-between  //先两边贴边,再平分剩余空间(重要)

ps:在设置这个属性之前,一定要确定好主轴方向。

最后一个效果十分重要,从这里其效果如下图所示:

  3)设置盒子是否换行

 在flex布局中,默认子元素是不换行的,如果父盒子装不开的情况下,就会缩小子元素的宽度,硬塞到父盒子里,强行一行显示。

<!--  flex-wrap:设置子元素是否被换行  -->
flex-wrap:nowrap;    //不换行(默认值)
flex-wrap:wrap;      //换行

  4)设置侧轴上子元素的排序方式(单行情况)

ps:这个align-items在子项为单项时候使用,也就是单行的时候使用。如果是多行的话,采用下方5)的内容。

<!--  align-items:设置侧轴上子元素的排列方式(以默认的侧轴y为例)  -->
align-items:flex-start     //从上到下
align-items:flex-end       //从下到上
align-items:center         //居中
align-items:stretch        //拉伸(默认值)

 这个拉伸需要注意,如果在子盒子不给高度的情况下,就会默认拉伸到和父盒子一样高/宽。

   5)设置侧轴上子元素的排序方式(多行情况)

 此方法适用于父盒子内部有多行盒子的情况,在单行是没有效果的。

<!--  align-content:设置侧轴上子元素的排列方式(多行)  -->
align-content:flex-start     //在侧轴头部开始排列
align-content:flex-end       //在侧轴尾部开始排列
align-content:center         //在侧轴中间显示
align-content:stretch        //设置子元素高度平分父元素高度
align-content:space-around   //子元素在侧轴平分剩余空间
align-content:space-between  //子元素先贴在侧轴两头,再将剩余空间平分

 直接看可能比较难懂,可以自己建一个父盒子里面套几个小盒子,写一写样式,感受一下就很清楚了。

6)设置主轴方向与是否换行的复合写法

<!-- flex-flow是flex-direction和flex-wrap的合并写法  -->

flex-flow:coplumn wrap;

 ——————————————————————————————————————————

3.flex布局子项常见属性:

1)flex属性定义子项目分配剩余空间

 数字number为占多少份数(可以写百分比哈)

flex:<number>;   //默认是0

 此方法可用于实现圣杯布局,非常简单方便,如下大盒子里准备三个小盒子:

<section>
    <div></div>
    <div></div>
    <div></div>
</section>

 再写一下样式,首先一定不要忘了给父元素添加flex属性,然后给左右盒子宽度,最后只需要给中间的盒子写一句:flex:1;即可,意味第二个子盒子独占剩余空间的一份,具体样式如下:

section {
    display: flex;
    width: 60%;
    height: 150px;
    background-color: pink;
    margin: 0 auto;
}

section div:nth-child(1) {
    width: 100px;
    height: 150px;
    background-color: rgb(209, 122, 122);
}

section div:nth-child(2) {
    flex: 1;
    background-color: rgb(115, 183, 115);
}

section div:nth-child(3) {
    width: 100px;
    height: 150px;
    background-color: rgb(110, 110, 173);
}

最后效果如下,可随着浏览器可视区域的大小自适应变大变小。

 2)控制子项自己在侧轴上的排列方式

 注意与align-items区分,如果有三个盒子,你加完align-items:flex-end;会让三个盒子全部移到下面,而如果我们只想让其中的一个盒子移到下面,则需要用到下面这个属性:

align-self:flex-end;

只给这一个盒子添加,就让这一个盒子落下来,里面的属性值和align-items的属性值选项一样,根据需求选择即可。

 3)定义项目的排列顺序

 通过order属性设置,数值越小,越靠前,默认值为0;(要注意,与z-index不一样)

order:-1;

还是假设你有三个盒子,从左到右,分别1、2、3.此时你想让2号盒子排到一号盒子的前面,只需要让order设置为-1即可,因为1号盒子默认是0,只要让2号盒子的order小于0就可以了。

———————————————————————————————————————————

总结:

虽然刚开始学习flex布局,可能会有点乱,因为单词有点多还不那么好记,那么最好的学习方法就是实践,多练习总会记住的。

  • 12
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值