css之Flex布局(二)

本文详细介绍了Flex布局中项目(flex-item)的属性,包括order、flex-grow、flex-shrink、flex-basis、flex和align-self。通过实例解析了这些属性如何影响布局的放大和缩小,强调了临界值的重要性和比例分配的概念。

flex布局(二)之flex-item的属性

前言:这里的flex-item的属性是指Flex容器中项目div的属性

上篇讲了flex布局的容器的六大css属性,这次来说说容器中的项目(flex-item)的六大css属性

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

在下面的代码实例中,为了更直观的看属性的解析。不会在代码中给每个div设置宽高度。但是这个步骤在实际代码中是必须的! 假设每个flex-item的宽高都为200px


order属性

根据对每个flex-item规定的order值的大小进行比较,各个flex-item将从小到大进行重新排列。对于没有设置order属性的flex-item,默认order为0

...
<style>
    .contain{
        display:flex;
        flex-direction:row;
    }
    .flex-item1{
        order:2;
    }
    .flex-item2{
        order:1;
    }
    .flex-item3{
        order:3;
    }
</style>
<div class="contain">
    <div class="flex-item1">1</div>
    <div class="flex-item2">2</div>
    <div class="flex-item3">3</div>
</div>

这里写图片描述


flex-grow属性

其作用是将项目成比例放大。对于没有设置该属性的flex-item来说,其flex-grow默认为0

...
<style>
    .contain{
        display:flex;
        flex-direction:row;
        width:800px;
    }
    .flex-item1{
        flex-grow:2;
    }
    .flex-item2{
        flex-grow:1;
    }
    .flex-item3{
        flex-grow:1;
    }
</style>
<div class="contain">
    <div class="flex-item1">1</div>
    <div class="flex-item2">2</div>
    <div class="flex-item3">3</div>
</div>

大家要注意,这里的成比例放大,是根据原来剩余的空间多少,进行2:1:1的成比例分配给这三个flex-item。

重点来了(解析)

在没有设置这个属性前,剩余的宽度是容器宽度减去三个flex-item的总宽度(假设每个flex-item的宽度为200px),那么还剩下200px的。

800px-200px*3 = 200px

然后设置flex-grow属性后,浏览器就会根据2:1:1的比例将这剩余的空间划分给三个flex-item。

flex-item1分到100px;flex-item2分到50px;flex-item3分到50px

最后flex-item1的宽度为300px,flex-item2的宽度为250px,flex-item3的宽度为250px


flex-shrink属性

其作用是flex-grow属性的反作用,也就是成比例的缩小。这里的“成比例缩小”和flex-grow的“成比例放大”的原理是一样的。

...
<style>
    .contain{
        display:flex;
        flex-direction:row;
        width:800px;
    }
    .flex-item1{
        flex-shrink:2;
    }
    .flex-item2{
        flex-shrink:1;
    }
    .flex-item3{
        flex-shrink:1;
    }
</style>
<div class="contain">
    <div class="flex-item1">1</div>
    <div class="flex-item2">2</div>
    <div class="flex-item3">3</div>
</div>

解析

假设当我们的容器缩小到500px时,那么我们将失去了300px的宽度。但是要注意,这里有个临界点,容器宽度大于600px将会放大,小于600px将会缩小。这600px就是三个flex-item的宽度和
所以实际上我们是缩小了100px

600px - 500px = 100px

那么根据2:1:1的比例分配

flex-item1缩小50px;flex-item2缩小25px;flex-item3缩小25px

所以最后flex-item1的宽度为150px;flex-item2宽度为175px;flex-item3的宽度为175px。


flex-basis属性

让浏览器知道一个flex-item长度多少。设置完这个值后,不管浏览器放大还是缩小都是根据这个值来进行相加减。不会再根据它的width进行计算。他的默认值是auto,也就是flex-item原来的大小

flex属性

flex是flex-grow,flex-shrink,flex-basis的三合一。它的默认值是0 1 auto。后两个属性可选。
另外,该属性有两个快捷值。分别为:auto(1 1 auto)和none(0 0 auto)

...
<style>
    .contain{
        display:flex;
        flex-direction:row;
        width:800px;
    }
    .flex-item1{
        flex:1(flex-grow) 1(flex-shrink) auto(flex-basis);
    }
    .flex-item2{
        flex:1 1 auto;
    }
    .flex-item3{
        flex:1 1 auto;
    }
</style>
<div class="contain">
    <div class="flex-item1">1</div>
    <div class="flex-item2">2</div>
    <div class="flex-item3">3</div>
</div>    

align-self属性

该属性允许单个flex-item有与其他有不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

 ...
<style>
    .contain{
        display:flex;
        flex-direction:row;
        align-items:flex-start;
        width:800px;
    }
    .flex-item2{
        align-self:flex-end;
    }
</style>
<div class="contain">
    <div class="flex-item1">1</div>
    <div class="flex-item2">2</div>
    <div class="flex-item3">3</div>
</div>       

这里写图片描述

总结

这六个属性中,需要注意的是放大和缩小属性。当我们要使用它们的时候,一定要注意临界值!一般情况下,临界值就是他的宽width。当然,如果设置了padding、flex-basis等属性就另算了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值