flex弹性布局基础

阮一峰的flex布局

一:flex布局

Flexible Box:弹性布局,用来为盒状模型提供最大的灵活性。

二:概念

采用flex布局的元素成为flex容器,它的所有子元素称为项目。
容器默认两根轴:水平轴和垂直的交叉轴。

三:属性

  • flex-direction:决定主轴的方向。
    (flex-direction: row | row-reverse | column | column-reverse)

  • flex-wrap:如果一条轴线排不下,如何换行。
    (flex-wrap: nowrap | wrap | wrap-reverse;)

  • flex-flow:flex-direction+flex-wrap的简写
    (flex-flow: row nowrap)

  • justify-content:项目在主轴的对齐方式。
    (justify-content: flex-start | flex-end | center | space-between | space-around;)

  • align-items:项目在交叉轴上如何对齐。
    ( align-items: flex-start | flex-end | center | baseline | stretch;)

  • align-content:多根轴线(交叉轴)的对齐方式,如果只有一根不起作用。
    (align-content: flex-start | flex-end | center | space-between | space-around | stretch;)

项目的属性

  • order:定义了项目的排列顺序:数值越小排列越靠前,默认为0.
    (item{ order: 数字;})

  • flex-grow: 项目的放大比例。
    可用空间分配 flex-grow属性:
    在这里插入图片描述

整个盒子宽度550px,1,2,3子盒子默认宽高都为100px,然后设置盒子1,2,3的flex-grow属性如下:

            .container div:nth-child(1){
                flex-grow: 0;
            }
            .container div:nth-child(2){
                flex-grow: 1;
            }
            .container div:nth-child(3){
                flex-grow: 3;
            }

减去三个盒子的宽度还剩余:550-100X3=250px;
将剩余的宽度按照 0:1:3分配宽度:第一个盒子还是保持默认设置宽度不变,第二个盒子 (原本宽度)100Px+(分配的剩余宽度)250*(1/(1+3))px=162.5px; 同理第三个盒子变为:100+187.5=287.5px。

  • flex-shrink:项目的缩小比例。
    元素动态缩小的处理:flex-shrink:

         .son{
             flex-shrink: 1;
             width: 100px;
             height: 100px;
             padding: 10px;
             border: 1px solid #fff;
             box-sizing: border-box;
             background-color: lawngreen;
         }
         .son:nth-child(1){
             flex-shrink: 0;
         }
         .son:nth-child(2){
             flex-shrink: 1;
         }
         .son:nth-child(3){
             flex-shrink: 3;
         }
    

算法:父盒子总宽度250px
第一个:0不缩小还是100px;
第二个:1表示缩小1/4 三个元素水平排列(默认flex-shrink:0)溢出的长度:300-250px=50 100px-50*(1/4)=87.5px
第三个元素:100px-50*(3/4)=62.5px

  • flex-basis:在分配多余空间之前,项目占据的主轴空间。
    优先级大于width或height,但是max-height或min-height优先级最高。
    当主轴为X时,设置子元素的flex-basis:100px; 会覆盖掉之前的width属性;
    同理,主轴为column时,设置子元素的flex-basis:100px;会覆盖之前子元素的height属性。

  • flex:flex-grow+flex-shrink+flex-basis三者组合的简写(用的多)
    有两个快捷值:auto (1 1 auto),none(0 0 auto);
    示例: flex:1 2 100px;(后面两个值可以不写,第一个值必须写)
    等价于flex-grow:1;flex-shrink:2;flex-basis:100px;

  • align-self:允许单个项目与其他项目不同的对齐方式。可覆盖align-items。
    (align-self: auto | flex-start | flex-end | center | baseline | stretch;)

另:文字也可以当成弹性布局中的元素

      footer section h4{
        flex: 0 0 50px;
        display: flex;
        flex-direction: column;
        justify-content: center;/文字垂直居中/
        text-align: center;
    }
        <h4>我是文字</h4>

给弹性容器的子元素规定宽度或者高度(如果容器的主轴为column的话): flex:0 0 50px; 50px表示设置子元素的高度为50px 。

绝对定位与弹性布局相互矛盾,弹性布局对相对定位没影响。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值