flex布局学习

Flex布局学习笔记

主要学习资料阮一峰老师的blog

个人对于flex布局的理解:通过对某个容器中横纵两条轴上元素的分布的变化,实现的布局。也可以设置容器内元素的具体属性实现针对于某个元素的调整。

基础的属性还是要在使用中才能掌握,而且阮一峰老师对于flex的基本属性解释的非常详细,我就不再列举了。下面是针对于一些实例进行的代码的分析。

tips:

  1. 以下所有实例都借鉴于阮老师的博客
  2. 以下所有的图中若无特殊声明,浅灰色的为外层容器,class为container,深灰色的内层项目,class为item

单项目

  1. 没有设置任何属性时的情况:

    1item_01

    只设置外层容器container的display:flex就可以达成以上效果。

        .container {
               display: flex;
           }
  2. 项目水平居中

    1item_02

    在flex布局中,最重要的莫过于那两条互相垂直的轴了,主轴是默认是水平的,所以想要将某个元素水平居中,只需要将主轴上的布局修改为居中的布局就可以了。

           .container {
               display: flex;
               justify-content: center;
           }
  3. 项目向右对齐

    1item_03

    默认的对齐方式是向左的,所以想要实现向右对齐,也只需要改变容器主轴的布局方式为向左对齐即可。其实在flex中为了使得轴的方向改变之后语义仍然没有问题,这里应该改为向主轴的末端对齐。

           .container {
               display: flex;
               justify-content: flex-end;
           }
  4. 垂直居中

    1item_04

    前面我们都是一直在一个轴上的操作,想要实现垂直居中就要使用另一个和主轴垂直的交叉轴了。交叉轴上的操作和主轴上的操作是类似的,只需要改变布局方式就可以了。不同的只是属性罢了。

           .container {
               display: flex;
               align-items: center;
           }
  5. 水平垂直居中

    1item_05

    水平垂直居中的话只需要把两个轴的布局都设置为居中就可以了。

           .container {
               display: flex;
               align-items: center;
               justify-content: center;
           }

两个轴的操作基本上就是这样子的,对于一个项目的的布局,仅仅使用这两个轴的布局已经绰绰有余。

双项目

  1. 两个项目分居两边

    2item_01

    其实这样的布局,也是轴的基本布局的一种,可以通俗的理解为将容器中的项目在轴的方向上两端对齐,项目之间的间隔是相等的。

           .container {
               display: flex;
               justify-content: space-between;
           }
  2. 竖直方向上的两端对齐

    2item_02

    一眼就能看出来,这个不就是上一个倒了一下么,所以我们只需要把轴转一下就可以实现这个效果了。

           .container {
               display: flex;
               flex-direction: column;
               justify-content: space-between;
           }
  3. 两端对齐加居中

    2item_03

    这个跟上一个也没有多大的变化,只不过水平居中了一下。那么是不是只需要改一下主轴的布局就可以了。这里就需要注意一下了,由于我们之前已经将主轴的方向修改过了,所以主轴现在竖直的,因此修改主轴是不行的。这时另一个轴的方向,也会随着主轴方向的改变而改变,毕竟名叫交叉轴嘛。所以我们只需要在上一个的基础上,修改交叉轴的布局为居中就可以了。

           .container {
               display: flex;
               flex-direction: column;
               justify-content: space-between;
               align-items: center;
           }
  4. 两个项目位于对角线上

    2item_04

    想要实现这样的布局,只靠两个轴的布局显然是不同的,因为两个项目的布局方式是不一样的,第一个是默认的布局方式,而第二个则是在交叉轴上的居中操作,想明白了这一点,就好办了,使用align-self对第二个项目修改布局方式就可以了。

           .container {
               display: flex;
    
           }
           .item:nth-child(2) {
               align-self: center;
           }
  5. 两个项目处于两个角

    2item_05

    这个其实跟上一个也差不多,一样的思路,可以知道第二个项目是需要使用self属性单独设置的,但是在水平方向上两个处于两端要怎么实现呢?是的了,这时就需要对容器的主轴使用space-between布局了。

           .container {
               display: flex;
               justify-content: space-between;
           }
           .item:nth-child(2) {
               align-self: flex-end;
           }

三项目

  1. 最基本的三个项目

    3item_01

    最基本的布局方式,只需要让容器display:flex就可以了

  2. 对角线三项目

    3item_02

    这个其实跟前面的两个项目处于对角线上是一个道理。所以也只需要把第二个和第三个项目单独设置一下就可以了。

           .container {
               display: flex;
           }
           .item:nth-child(2) {
               align-self: center;
           }
           .item:nth-child(3) {
               align-self: flex-end;
           }

四项目

  1. 三一分隔

    4item_01

    首先第一行是正常的布局,不用管。而本来应该在第二行的第四个项目到了第三行,显然是space-between布局,并且到了最后一列,所以主轴的布局方式也应该改变为flex-end。这里需要注意的是,由于需要多行多列,所以需要设置flex-wrap属性为wrap,即可换行,否则每个项目的大小将会被压缩。除此之外,由于不止一行,所以在设置交叉轴上的布局方式时要是用align-content属性。

           .container {
               display: flex;
               flex-wrap: wrap;
               align-content: space-between;
               justify-content: flex-end;
           }

    如此复杂的布局都只是使用容器的属性进行布局的,真的很神奇。

  2. 四个项目四个角

    4item_02

    四个项目被分到了四个角,可以想到将四个项目分为两组,分别在水平和垂直方向上使用space-between就可以了。

           .container {
               display: flex;
               justify-content: space-between;
           }
           .column {
               display: flex;
               flex-direction: column;
               justify-content: space-between;
           }

圣杯布局

圣杯

    <div class="container">
        <header></header>
        <div class="mainbody">
            <div class="content"></div>
            <nav class="nav"></nav>
            <aside class="aside"></aside>
        </div>
        <footer></footer>
    </div>
        .container {
            display: flex;
            flex-direction: column;
        }
        header {
            flex: 1;
        }
        footer {
            flex: 1;
        }
        .mainbody {
            flex: 1;
            display: flex;
        }
        .nav {
            order: -1;
        }

其中包括两个flex部分,一个是最外围的container,还有一个是mainbody。

其中为了使得mainbody中的content即主要内容有限加载,将content标签放在了最前面,但是又想要content部分在中间,所以使用了order对flex中的项目进行排序。

搞完这个,果然对‘弹性’布局的理解更深了。

总结

flex既然能够作为一套完整的布局体系,就不是一时半会儿能够完全搞清楚的。这次也是对于flex布局有了一个大致的了解,以后如果学到了新的内容或者有了新的感悟,还会继续更新。毕竟才刚刚入门,其中的很多细节还是知之甚少,如文中有误,欢迎指出,学习讨论。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值