十五、flex弹性元素的样式

目录:
1. 基本布局
2. 弹性元素的属性:flex-grow
3. 弹性元素的属性:flex-shrink
4. 弹性元素的属性:flex-basis
5. flex 统一设置这3个属性(常用)
6. order

一、基本布局

<style>

        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 800px;
            border:10px red solid;
            /* 当设置了ul为弹性盒子,li就自动是弹性元素 */
            display: flex;
        }
        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
        }


        li:nth-child(2){
            background-color: pink;
        }
        li:nth-child(3){
            background-color: orange;
        }


    </style>
<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

</body>

二、弹性元素的属性:flex-grow

  • flex-grow:1 表示所有元素平均分配剩下的空白,比如空白300,那么每个
    方框就在弹长100。
    li{
        
			width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
            /* 弹性元素的增长系数 */
            flex-grow: 1;
        }


        li:nth-child(2){
            background-color: pink;
          
        }
        li:nth-child(3){
            background-color: orange;
        
        }
    • 如果每一个都设置了增长系数,假设剩余空白是300, 现在总共系数分配比例:1 + 2 + 3 = 6,300 / 6 = 50, 对应的每个方框,弹长:1* 50 = 50, 2 * 50 = 100, 3 * 50 = 150
    li{
        
			width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
            /* 弹性元素的增长系数 */
            flex-grow: 1;
        }


        li:nth-child(2){
            background-color: pink;
             /*增长系数是按照比例去分配的, */
            flex-grow: 2;
        }
        li:nth-child(3){
            background-color: orange;
            flex-grow: 3;
        }

三、弹性元素的属性:flex-shrink

  • flex-shrink:弹性元素的缩减系数,默认1

测试:把父类ul 的width设置小点,会发现里面的元素,会自动缩减,以适应父类边框变小的情况。

 <style>

        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 400px;
            border:10px red solid;
            /* 当设置了ul为弹性盒子,li就自动是弹性元素 */
            display: flex;
        }
        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
            /* 弹性元素的增长系数*/
            flex-grow: 1;
            /* 弹性元素的缩减系数
                - 缩减系数的计算方式比较复杂
                - 缩减多少是根据 缩减系数和 元素大小 来计算。 基本理论是元素越大,缩减的越多
         
            */
            flex-shrink: 1;
        }
        
        li:nth-child(2){
            background-color: pink;
            flex-grow: 2;
        }
        li:nth-child(3){
            background-color: orange;
            flex-grow: 3;
        }
    </style>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>  
</body>

四、弹性元素的属性:flex-basis

   flex-basis 指定的是元素在主轴上的基本长度
                如果主轴 - 横向 - 则该值指定的就是元素的宽度 - 原来设置li的width无效
                如果主轴 - 纵向 - 则该值指定的就是元素的高度- 原来设置li的height无效
                 - 默认值是auto,表示参考元素自身的高度或宽度
                 - 如果传递了一个具体的数值,则以该值为准
  • flex-basis: 设置弹性元素的基础长度。一旦这里设定了100px, li里面设定的width:200px,就失效了。
 <style>

        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 800px;
            border:10px red solid;
            /* 当设置了ul为弹性盒子,li就自动是弹性元素 */
            display: flex;
        }
        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
        
           /* 弹性元素的增长系数*/
            /* flex-grow: 1; */
            
            flex-shrink: 1;

            /* 弹性元素基础长度:flex-basis ,一旦这里设定了100, li里面		设定的width:200px,就失效了。
            所有的li,都固定成100px
             */
            flex-basis: 100px;
        }
        

        li:nth-child(2){
            background-color: pink;
            
        }
        li:nth-child(3){
            background-color: orange;
          
        }


    </style>

总的可以理解为:flex-basis: 100px; 表示设置了这个弹框的宽度是100, 然后这个弹簧能弹多长,由flex-grow来确定,越大越长。这个弹框能够缩多短,由flex-shrink来决定。 所以这3个属性,就是弹簧的3种状态

五、flex 统一设置这3个属性(常用)

- 通常我们在运用这几个属性的时候,不会一个个这样单独设置,而是直接一起写.
- 假设我们想要的效果是:flex-grow:增长系数1, flex-shrink:缩减系数1, flex-basis:基础值 auto  
 - flex 可以设置弹性元素所有的3个样式
   flex 增长 缩减  基础
<style>

        *{
            margin: 0;
            padding: 0;
            list-style: none;
        }

        ul{
            width: 800px;
            border:10px red solid;
            /* 当设置了ul为弹性盒子,li就自动是弹性元素 */
            display: flex;
        }
        li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
         
            /* 通常这样用:
            flex 可以设置弹性元素所有的3个样式
            flex 增长 缩减  基础
            
            */
            flex: 1 1 auto;

        }
        

        li:nth-child(2){
            background-color: pink;
            
        }
        li:nth-child(3){
            background-color: orange;
          
        }


    </style>

<body>
    <ul>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>

    
</body>
  • flex 除了可以自己设置值,还有几个固定的可选值
  •        initial  "flex:0 1 auto"
             auto    "flex: 1 1 auto"
             none    "flex:0 0 auto" 设置这个,表示弹性元素没有弹性了
    
 li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
        
            /* 
            flex 可以设置弹性元素所有的3个样式
            flex 增长 缩减  基础
               initial  "flex:0 1 auto"
               auto    "flex: 1 1 auto"
               none    "flex:0 0 auto" 设置这个,表示弹性元素没有弹性了
            */
            flex: initial;

        }

六、order

  • 控制元素的排列顺序
  li{
            width: 200px;
            height: 100px;
            background-color: #bfa;
            font-size: 50px;
            text-align: center;
            line-height: 100px;
           
            flex: initial;

        }
        li:nth-child(1){
            /* order 决定弹性元素的排列顺序 */
            order:3;
        }

        li:nth-child(2){
            background-color: pink;  
            order:2;
        }
        li:nth-child(3){
            background-color: orange;
            order:1;
        }

注意:flex 对IE 8,9可能支持不是很好,移动端随意使用。 浮动和flex优先推荐flex

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值