美文网首页CSS
关于flex布局的一些简单总结

关于flex布局的一些简单总结

作者: cb12hx | 来源:发表于2018-03-23 16:05 被阅读0次

关于flex布局,基本的属性还是比较容易理解的,本文仅仅是来讨论shrink和grow两个属性
相信大家肯定用过下面这句代码

.test{
  flex: 1
}

仅仅定义了一个flex,其实它是三个属性的缩写

flex-grow
flex-shrink
flex-basis

1.flex-grow

那我们来看看仅仅定义flex:1这个具体会怎么计算

  .content {
    display: flex;
    width: 1200px;
    height: 300px;
    background: green;
  }

  .child1 {
    flex: 1;
    background: red;
  }

  .child2 {
    flex: 2;
    background: orange;
  }

  .child3 {
    flex: 3;
    background: gray;
  }
  <div class="content">
    <div class="child1"></div>
    <div class="child2"></div>
    <div class="child3"></div>
  </div>

我们来看看最后每一个child计算出的值是啥

image.png
image.png
image.png
由此可见,只定义一个值时,其实是定义了flex-grow,这个时候,每一个子元素的宽度会等比例分配,比如上面的代码,1+2+3总共分成了6份,那么第一个的宽度就是12001/6,第二个是12002/2,第三个是1200*3/6
上面的代码,基准值都是0%,那么宽度就是按照flex-grow来分配的,假如我们给每一个dom定义基准值,看看会是什么效果
  .child1 {
    flex: 1 1 200px;
    background: red;
  }

  .child2 {
    flex: 2 1 300px;
    background: orange;
  }

  .child3 {
    flex: 3 1 400px;
    background: gray;
  }

这是基准值总和为200+300+400=900,小于父容器的大小,那么就会根据grow的比率来平分剩余的部分300,child1分到300*1/6=50,最后大小为250,child2分到300*2/6=100,最后大小为400,child3分到300*3/6=150,最后大小为550

2.flex-shrink

把代码再改一下

  .child1 {
    flex: 1 1 500px;
    background: red;
  }

  .child2 {
    flex: 2 1 400px;
    background: orange;
  }

  .child3 {
    flex: 3 1 600px;
    background: gray;
  }

此时,基准值为500+400+600=1500,大于1200,多出了300,此时就需要对多余的部分进行压缩了,计算公式如下
flex-basis - 多出的值 * (flex-basicflex-shrink) /(所有的子节点自己的基准值再相加),那么

child1: 500 - 300 * 500 * 1/(500*1 +400*1 + 600*1) = 500 -300*500/1500 =500-100 = 400
child2: 400 - 300*400*1/(500*1+400*1+600*1) = 400 -300*400/1500 = 400 - 80=320
child3: 600 - 300*600*1/(500*1+400*1+600*1) = 600 - 300*600/1500 = 600 - 120 = 480

可以把shrink修改一下再计算试试

  .child1 {
    flex: 1 2 500px;
    background: red;
  }

  .child2 {
    flex: 2 3 400px;
    background: orange;
  }

  .child3 {
    flex: 3 5 600px;
    background: gray;
  }
多出了1200 - 500-400-600 = 300
child1: 500 - 300*(500*2) / (500*2 + 400*3 + 600*5) = 500 - 300 * 1000 / 5200 = 442
child2: 400 - 300 * (400*3) / 5200 =  330
child3: 600 - 300 * (600*5) / 5200 = 426

相关文章

  • 关于flex布局的一些简单总结

    关于flex布局,基本的属性还是比较容易理解的,本文仅仅是来讨论shrink和grow两个属性相信大家肯定用过下面...

  • 几种常见布局的flex写法

    flex布局目前基本上兼容主流的浏览器,且实现方式简单。小H整理了flex的一些知识点,并且总结归纳了几种常见布局...

  • FlexBox布局名词

    关于flexbox一些布局名称 布局名词 弹性容器通过设置display:flex或 inline-flex将其定...

  • 小程序CSS知识点

    一、flex布局Flex 布局教程:语法篇Flex 布局教程:实例篇 二、CSS position 属性总结CSS...

  • CSS 3 Flex布局

    Flex布局 flex布局可以实现空间自动分配自动对齐,适用于简单的线性布局。 flex基本概念 flex con...

  • Flex布局的简单总结

    主要是总结阮一峰老师的教程,加深自己的印象。 基本概念 flex容器:采用flex布局的元素称为flex容器。 f...

  • flex记录

    教程:Flexbox 布局的最简单表单Flex 布局教程:语法篇Flex 布局教程:实例篇 父元素为 flex 布...

  • ReactNative实战

    布局 RN的布局思路其实就是Flex布局,关于Flex布局,如果不熟悉的,可以去学习一下Flex布局 先看一下这个...

  • css-flex布局

    1.flex布局的兼容性写法 关于flex布局的兼容性,参考flex兼容性 .flex{ display:-web...

  • flex布局

    By Leaf 一、简单理解flex布局 首先我们来理解一下flex布局的一些基本概念(图是我从网上找来的,我觉得...

网友评论

    本文标题:关于flex布局的一些简单总结

    本文链接:https://www.haomeiwen.com/subject/opstcftx.html